Страница 1 из 1
Помогите разобрать поток данных
Добавлено: Вс фев 23, 2014 09:06:32
AlexK
Здравствуйте помогите пожалуйста как реализовать перехват 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
Re: Помогите разобрать поток данных
Добавлено: Вс фев 23, 2014 10:57:48
BOB51
Можно набрать "страничку" произвольной информации (поток данных) в накопителе (ОЗУ), затем отсортировать участки с одинаковыми начальными и конечными фрагментами и/или привязкой к начальной последовательности и длине пакета. Или тема "сигнатурный анализатор"...

Re: Помогите разобрать поток данных
Добавлено: Вс фев 23, 2014 12:42:27
uk8amk
разобрать поток данных
...
как реализовать перехват 163 Битового потока
Вы определитесь для начала, что вы хотите сделать: перехватить/записать или разобрать готовый?
Скорость какая? На высоких скоростях может оказаться AVR непригодным.
Передача синхронная или асинхронная?
Вобщем информации бы побольше.
Re: Помогите разобрать поток данных
Добавлено: Вс фев 23, 2014 14:52:16
AlexK
uk8amk писал(а):разобрать поток данных
...
как реализовать перехват 163 Битового потока
Вы определитесь для начала, что вы хотите сделать: перехватить/записать или разобрать готовый?
Скорость какая? На высоких скоростях может оказаться AVR непригодным.
Передача синхронная или асинхронная?
Вобщем информации бы побольше.
Поток данных идет со скоростью 122 бит/сек
Время периода сигнала составляет ~8.192 миллисекунды
в потоке меняются только последние 153 бита за исключением стартовых битов 0 и стоповых двух единичек
передача данных синхронная и как я понял синхронизацию надо производить по первым 16 битам которые постоянно равны 1
Re: Помогите разобрать поток данных
Добавлено: Вт фев 25, 2014 19:02:55
alex2103
Видимо надо что-то с радиоканала перехватить
Надо 1 таймер и одно внешнее прерывание. Единички вначале нужны для того чтоб приемник по ним синхронизировал таймслоты. 1 и 0 как кодируются? Может быть длительностью между импульсами, может быть манчестер... В общем нужен сам сигнал посмотреть.
Re: Помогите разобрать поток данных
Добавлено: Ср фев 26, 2014 04:18:19
AlexK
alex2103 писал(а):Видимо надо что-то с радиоканала перехватить
Надо 1 таймер и одно внешнее прерывание. Единички вначале нужны для того чтоб приемник по ним синхронизировал таймслоты. 1 и 0 как кодируются? Может быть длительностью между импульсами, может быть манчестер... В общем нужен сам сигнал посмотреть.
Не это поток данных от эбу автомобиля. сегодня попробую записать осциллограмму потока.
Re: Помогите разобрать поток данных
Добавлено: Пт фев 28, 2014 13:52:54
AlexK
Лог 0=0В Длительностью 8 mS
Лог 1=5В Длительностью 8 mS
Re: Помогите разобрать поток данных
Добавлено: Пт фев 28, 2014 15:23:23
uk8amk
Вероятно что-то из серии K-line, L-line или их аналогов.
Вам стоит написать производителя и марку ЭБУ, чтобы знающие люди могли подсказать интерфейс и методы кодирования данных.
Re: Помогите разобрать поток данных
Добавлено: Пт фев 28, 2014 19:21:29
AlexK
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 бод
Код: Выделить всё
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
#include <stdlib.h>
#include <stdio.h>
#define TIMER_DIV 32 //us
volatile int fr;
volatile bool sinhr;
int uart_putchar(char c, FILE *stream);
FILE uart_str=FDEV_SETUP_STREAM(uart_putchar, NULL, _FDEV_SETUP_WRITE);
int uart_putchar(char c, FILE *stream)
{
if(c=='\n') uart_putchar('\r', stream);
loop_until_bit_is_set(UCSRA, UDRE);
UDR=c;
return 0;
}
ISR(INT0_vect)
{
unsigned char len;
len=TCNT0; //Значение тиков таймера
printf("%lu\n\r", len);
//Синхронизация происходит по первым 16 битам которые всегда равны лог 1
if (len>120) && (len<136) && (!sinhr) //Синхронизация где 120mS длительность 15 бит, 136mS длительность импульса 17 бит
{
sinhr=true;
return;
}
if (fr==0)
{
fr=1;
}
else
{
fr=0;
}
TCNT1=0; //Сброс таймера
}
int main(void)
{
fr=1;
//Таймер
TCCR0 = (1<<CS02)|(0<<CS01)|(0<<CS00);
TIMSK = 0;
TCNT0 = 0;
//Прерывание
GICR=(1<<INT0);
MCUCR=(0<<ISC01)|(1<<ISC00);
//Uart
UCSRA=0x02;
UCSRB=0x08;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x08;
stdout=&uart_str;
sei();
while(1)
{
}
return 0;
}
Re: Помогите разобрать поток данных
Добавлено: Сб мар 01, 2014 10:43:13
uk8amk
1) 1мкс в тысячу раз меньше 1 мс. --> 32мкс = 0.032мс.
И для определения длительности не обязятельно считать в миллисекундах или переводить в какие-либо другие величинах. Можно оставить в тиках(TCNT0).
Re: Помогите разобрать поток данных
Добавлено: Пт мар 14, 2014 20:28:04
AlexK
Ясно спасибо разобрался!!!
