back1981
Участник-
Постов
146 -
Зарегистрирован
-
Посещение
Репутация
0 ОбычныйИнформация о back1981
-
Звание
Частый гость
-
Как сделать Bytes->HDLC->NRZI->Bell202
back1981 опубликовал тема в Интерфейсы
Суть вопроса - это преобразовать пакет байтов FF FF FF FF (пример) в пакет вида HDLC протокола, далее с полученными данными произвести шифрование NRZI и какими нибудь аппаратными средствами вывести сигнал посредством Bell202. Начальный пакет до Bell202 можно собрать и ручками это не есть проблема, но как полученные данные, скажем, вида 11111111101111100101111111110011101101111111111111111110011110101111001001110000 11111111111001110000000110101011111101110111110100111110 вывести на устройство(контроллер,принимающий данные по bell202 1-1300Гц,0-2100Гц 1200бит/сек). Существует ли возможность передачи этих данных через обычный аналоговый модем или звуковую карту? -
До конца не разобрал код. Меня смутило то что в счетчике учитывается изменение сигнала т.е. счетчик покажет 10 уже после 5 импульсов, вот это и смутило. Теперь после Ваших недоумений, еще раз пересмотрел код и понял что вот это OUTi= ~OUTi; будет менять выход на 10 импульсе в обратное состояние. Разница в моем и вашем коде в том, что у Вас он сделан рациональнее, а я не усмотрел алгоритма. Вот и все. void main(void) { // Инициализация xi= INi; ci=0; OUTi= 0; //................... for(;;) { // Делитель на 10 if(xi != INi) { xi= INi; if((++ci) == 10) { ci= 0; OUTi= ~OUTi; } } //................ } }
-
Вобщем вот ________________.bmp
-
Я наверное изначально неправильно вопрос поставил, считать надо не количество изменений на входе а именно количество импульсов, т.е. физического как он есть и соответственно событие либо по переднему либо по заднему фронту. Если выбрать по переднему фронту то код надо менять так. Далее импульс на выходе будем формировать скажем после прихода 6, а скидывать с 10 т.е. ширина импульса на выходе будет всегда в диапазоне времени от 1-го до 10-го импульса вне зависимости от частоты и если вдруг питание пропадет то округление будет типа математичского (практически если брать 5 а не 6). Если неправ поправьте. void main(void) { // Инициализация x1= IN1; c1=0; OUT1= 0; x2= IN2; c2=0; OUT2= 0; x3= IN3; c3=0; OUT3= 0; x4= IN4; c4=0; OUT4= 0; //................... // Делитель на 10 if(x1 != IN1)&(IN1==1) { x1= IN1; ++c1; if(c1 == 6) { OUT1=1; } if(c1 == 10) { c1= 0; OUT1=0; } } if(x2 != IN2)&(IN2==1) { x2= IN2; ++c2; if(c2 == 6) { OUT2=1; } if(c2 == 10) { c2= 0; OUT2=0; } } if(x3 != IN3)&(IN3==1) { x3= IN3; ++c3; if(c3 == 6) { OUT3=1; } if(c3 == 10) { c3= 0; OUT3=0; } } if(x4 != IN4)&(IN4==1) { x4= IN4; ++c4; if(c4 == 6) { OUT4=1; } if(c4 == 10) { c4= 0; OUT4=0; } } //................ }
-
Нужен простой декадный делитель на 4 канала, входная частота максимум 5 Гц, так как на выходе нужен импульс пошире, чем ширина входного импульса, то формировать его надо с приходом 10-го импульса и держать скажем 1 сек. Это маленько выбивается из понятий обычных счетчиков, но таковы условия задачи.
-
Это для того, чтобы прибор перед которым, будет ставиться делитель, смог стопроцентно захватить импульс.
-
Например на первый счетный пришло 10 импульсов, следовательно на выходе формируем единицу с задержкой Nмсек. В следующий момент скажем через Kмсек на второй счетный пришел 10-ый импульс, формируем единицу на нем, но время выходного импульса на обоих выходах должны быть одинаковы, а события происходят в разное время т.е. не получится сделать set gpio5=1; delay (1000); Или применить простые счетчики и считать в процессе иттерации какой выход сколько был в состоянии 1 т.е. output1++; if output>1000 set gptio5=0; Далее опытным путем или дизассемблировав посчитать потактово время выполнения иттерации, ну это я так по ламмерски рассуждаю.
-
Спасибо. Еще один небольшой вопрос. Как сделать по простому задержку на выходе на определенное количество сек,мсек, ведь выходов будет четыре, следовательно во времени эти задержки будут смещены?
-
Понятно, что на асме быстрее будет в плане выполнения программы, но мне хотелось бы while do, тем более скорость не критична т.к. речь идет о герцах. Для ламера сомое то :)
-
Спасибо. Скачал AVR32Studio и AVRStudio 4.13, на чем лучше начать и если можно скиньте пожалуйста исходник пустышку, куда я смогу вставить свои while(1) { if gpio1=1 {i1++} if gpio2=1 {i2++} if gpio3=1 {i3++} if gpio4=1 {i4++} if i1=10 {gpio5=1 } ........... }
-
На каком самом простом AVR можно организовать, так чтобы с внутреним генератором т.е. минимум железа, простой делитель, на входе 5в на выходе 5в
-
Понимаю, что старо, как мир. Может есть готовые примеры на базе суперпростого TINY? Погуглил ничего не нашел, знаю плохо искал, но уже забадался :). Посоветуйте дайте ссылку. Спасибо.
-
Кстати про защиту входа, можно ли обойтись предохраниетелем и защитным диодом супрессором например P4KE36.
-
Самый доступный я думаю MC34063A (нашел даже онлайн калькулятор http://www.nomad.ee/micros/mc34063a/index.shtml) -вопрос в моем случае греться будет или нет? Если использовать готовые DC/DC как у них с этим?