Здравствуйте помогите пожалуйста как реализовать перехват 163 Битового потока опыта в программирование для AVR можно сказать нет никакого но С знаю.
Как я понимаю мне нужно делать все через прерывания если нет то поправьте пожалуйста)
О потоке сначала идет 16 бит (нечего незначащих единичек можно использовать как начало пакета данных) , 4 бита (нечего незначащих), 11 бит (стартовый бит 0 8 бит нужной информации и две стоповой 1) итак 13 раз по 11 бит. bits: 16 4 11 11 11 11 11 11 11 11 11 11 11 11 11
Можно набрать "страничку" произвольной информации (поток данных) в накопителе (ОЗУ), затем отсортировать участки с одинаковыми начальными и конечными фрагментами и/или привязкой к начальной последовательности и длине пакета. Или тема "сигнатурный анализатор"...
разобрать поток данных
...
как реализовать перехват 163 Битового потока
Вы определитесь для начала, что вы хотите сделать: перехватить/записать или разобрать готовый?
Скорость какая? На высоких скоростях может оказаться AVR непригодным.
Передача синхронная или асинхронная?
Вобщем информации бы побольше.
разобрать поток данных
...
как реализовать перехват 163 Битового потока
Вы определитесь для начала, что вы хотите сделать: перехватить/записать или разобрать готовый?
Скорость какая? На высоких скоростях может оказаться AVR непригодным.
Передача синхронная или асинхронная?
Вобщем информации бы побольше.
Поток данных идет со скоростью 122 бит/сек
Время периода сигнала составляет ~8.192 миллисекунды
в потоке меняются только последние 153 бита за исключением стартовых битов 0 и стоповых двух единичек
передача данных синхронная и как я понял синхронизацию надо производить по первым 16 битам которые постоянно равны 1
Видимо надо что-то с радиоканала перехватить
Надо 1 таймер и одно внешнее прерывание. Единички вначале нужны для того чтоб приемник по ним синхронизировал таймслоты. 1 и 0 как кодируются? Может быть длительностью между импульсами, может быть манчестер... В общем нужен сам сигнал посмотреть.
alex2103 писал(а):Видимо надо что-то с радиоканала перехватить
Надо 1 таймер и одно внешнее прерывание. Единички вначале нужны для того чтоб приемник по ним синхронизировал таймслоты. 1 и 0 как кодируются? Может быть длительностью между импульсами, может быть манчестер... В общем нужен сам сигнал посмотреть.
Не это поток данных от эбу автомобиля. сегодня попробую записать осциллограмму потока.
Вероятно что-то из серии K-line, L-line или их аналогов.
Вам стоит написать производителя и марку ЭБУ, чтобы знающие люди могли подсказать интерфейс и методы кодирования данных.
uk8amk писал(а):Вероятно что-то из серии K-line, L-line или их аналогов.
Вам стоит написать производителя и марку ЭБУ, чтобы знающие люди могли подсказать интерфейс и методы кодирования данных.
Что то подобное K-line только здесь без запрос ответа это протокол старых Toyaota до 1998 года информации по которому нет кроме которой я написал выше и программы для ПК которая опрашивает флаговый вход ком порта и грузит проц компа на ~100% вот и решил сделать на МК чтобы данные выводились через UART так как опыта программирования для МК нет обращаюсь к вам за помощью. Поправьте что не так/
1) Настраиваю таймер для определения длительности уровня логического 0 или 1 Частота таймера счетчика = Тактовая частота/Делитель = 8000000/256= 31250Гц Длительность периода( тика ) = 1/31250= 32 мкс
Но тут проблема никак не могу понять как перевести 1 тик таймера в миллисекунды постоянно получается число которое никак не может быть длительностью. считаю по формуле
t=TCNT0*32;
2) Настраиваю прерывание по любой смене логического состояния
3) Настраиваю Uart на скорость 115200 бод
1) 1мкс в тысячу раз меньше 1 мс. --> 32мкс = 0.032мс.
И для определения длительности не обязятельно считать в миллисекундах или переводить в какие-либо другие величинах. Можно оставить в тиках(TCNT0).