UART и crс

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
CS16AMX
Нашел транзистор. Понюхал.
Сообщения: 195
Зарегистрирован: Вт ноя 30, 2010 00:50:40

UART и crс

Сообщение CS16AMX »

столкнулся с проблемой зашумлённости эфира диапозона 433.92мгц ,хочу использовать модули приёмник и передатчик на их макс скорости 4800 ,но при включении модулей приёмных на 135мгц , 433.92мгц
433 сразу шумит 50гц+ за минуту набираются всякие пакеты и циклически 1,23 мин повторяется ещё необычный пакет .
135 молчит ,иногда шумит но чаще из за питалова
мне посоветовали систему CRC но у меня проблемы с приёмом UART все коды что я находил обычно содержат условие на конкретное число,а мне модули нужны для пересылки 3 переменных с ацп для подставления формулы , может у кого есть наработки в етой области , если не трудно,то поделитесь плиз приёмным куском)
заранее спасибо) :)
Реклама
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: UART и crс

Сообщение urry »

процедура вычисления контрольной суммы должна быть и в приемнике и в передатчике.
Т.е вместо 3 байтов передаете 4, последний - кс.
В приемнике принимаете 4 байта и снимаете опять сумму 3 байтов и сравниваете с 4 - сошлось, информации верить.

Код: Выделить всё

unsigned char calc_crc (unsigned char *mas)
{
unsigned char i,data,crc,fb,st_byt;
st_byt=0;
crc=0;
	do{
data=mas[st_byt];
     for (i=0;i<8;i++)// счетчик битов в байте
        	{
       		fb =crc  ^ data;
      		fb&=1;
        	crc >>= 1;     
        	data >>=1;
      		if (fb == 1)crc^=0x8c;// полином, м
      		}
	st_byt++;
	}while  (st_byt != 3);// счетчик байтов в массиве
return crc;
} 
//---------------------------------------------------
Реклама
CS16AMX
Нашел транзистор. Понюхал.
Сообщения: 195
Зарегистрирован: Вт ноя 30, 2010 00:50:40

Re: UART и crс

Сообщение CS16AMX »

надеюсь при полёте не случится касяка с тем что информация полоностью будет послана куда подальше , а за принцип огроменное спасибо) теперь буду учится выцеплять посылки из принимаемой мишуры пока фигня выходит , даж мусора нету(
s64
Потрогал лапой паяльник
Сообщения: 321
Зарегистрирован: Пн окт 18, 2010 21:18:21

Re: UART и crс

Сообщение s64 »

я бы вот эту строчку
while (st_byt != 3);// счетчик байтов в массиве
исправил на
while (st_byt <= 3);// счетчик байтов в массиве

малоли чего бывает
Реклама
Эиком - электронные компоненты и радиодетали
CS16AMX
Нашел транзистор. Понюхал.
Сообщения: 195
Зарегистрирован: Вт ноя 30, 2010 00:50:40

Re: UART и crс

Сообщение CS16AMX »

я над этим думал) сейчас на другом завис, хрен с етим приёмом,надо придумать как разделить 3 переменные , тогда посылку лучше 4 байта делать и сумму следом посылать.
наверно для приёма нужно чтото типа захват по букве из буфера, далее crc и подстановка в необходимую формулу,как ето долго будет делатся ,я уже представил)
Реклама
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: UART и crс

Сообщение urry »

С Вашего сообщения мало что понял, код в студию, в общем, будем разбираться.
Реклама
CS16AMX
Нашел транзистор. Понюхал.
Сообщения: 195
Зарегистрирован: Вт ноя 30, 2010 00:50:40

Re: UART и crс

Сообщение CS16AMX »

вобщем вот передатчик 3 ацп автоматом почему то переводятся в ACII но посылка главное выходит.
тут всё понятно)
Вложения
юарт.rar
(351.35 КБ) 249 скачиваний
CS16AMX
Нашел транзистор. Понюхал.
Сообщения: 195
Зарегистрирован: Вт ноя 30, 2010 00:50:40

Re: UART и crс

Сообщение CS16AMX »

а вот на радиостарикашке я нашёл кусок приёмной части http://radioded.ru/content/view/27/62/
if (buf==0x38)
ADCSRA=0b11011111;
if (buf==0x37){
vikl=0;
ADCSRA=0b11011111;
}

if (buf==0x30){
printf("Opisanie klavish:");
putchar(0x0D);
printf("1-6 - vibor kanala");
putchar(0x0D);
printf("9 - vikluchit");
putchar(0x0D);
printf("8 - odno preobrazovanie");
putchar(0x0D);
}

if (buf==0x31){
ADMUX=0;
num_ch=1;
}
if (buf==0x32){
ADMUX=1;
num_ch=2;
}
if (buf==0x33){
ADMUX=2;
num_ch=3;
}
кусок кода где я заметил что в буфер информация попадает и он по условию её применяет , но тогда как поймать любой сигнал и вывести на жк ? по условию типа Y замечен в посылке ,всё что после записать в переменную и в формулу, подобный вариант реален?
или мне придётся типа сказать канал и следующим письмом его содержание посылать?
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: UART и crс

Сообщение urry »

посмотрел. Неопределенность усилилась. Ну и где передатчик ? Что сейчас используете ? Что должно быть ?
CS16AMX
Нашел транзистор. Понюхал.
Сообщения: 195
Зарегистрирован: Вт ноя 30, 2010 00:50:40

Re: UART и crс

Сообщение CS16AMX »

пока хочу отладить в симуляторе , а так приёмник: rcr-433-mpr,передатчик:rct-433-utr
моя проблема с получением пакета чтоб вывести на лсд , тупо нужна хотяб туда вывести ,дальше сам буду прописывать формулы для 4х шимов
CS16AMX
Нашел транзистор. Понюхал.
Сообщения: 195
Зарегистрирован: Вт ноя 30, 2010 00:50:40

Re: UART и crс

Сообщение CS16AMX »

схема передатчика ,если у кого нету желания возится с протэусом
Вложения
Безымянный.JPG
(69.48 КБ) 549 скачиваний
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6318
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: UART и crс

Сообщение Jack_A »

urry писал(а):процедура вычисления контрольной суммы должна быть и в приемнике и в передатчике. Т.е вместо 3 байтов передаете 4, последний - кс.
Заметим, что CRC-8 можно использовать только для не очень серьезных устройств -- велика вероятность пропуска необнаруженной ошибки. Я в своих поделках использовал исключительно CRC-16, т.к. цена вопроса была немаленькой.
CS16AMX
Нашел транзистор. Понюхал.
Сообщения: 195
Зарегистрирован: Вт ноя 30, 2010 00:50:40

Re: UART и crс

Сообщение CS16AMX »

ну вобщем нашёл время опишу для чего хочу всё слепить.
захотелось квадрокоптер как модную игрушку , естественно та что продаётся для iphone отстой как и сам iphone .
там коллекторники+ременная передача одним словом гадость
стал прекидывать на бесколлекторниках что потребуется и стал потихоньку затариватся всячиной)
т.к. все советуют гироскоп который стоит как набор движков и контроллеров вместе взятых ,а он того совсем не стоит, я достал акселерометр всем извесный, как для начинающих описанный в статьях 3х осевой http://www.avrlab.com/node/122 плату уменьшил ,обточил покрыл клеем от всякой влаги)
работать с ним приятно ацп скачет от 150-760 думаю для выравнивания хватит
разница с гироскопом как я понял , гироскоп сам выравнивает обороты движков обычно не более 2х
пока есть в наличии только движок,остальное застряло на таможне
контроллеры есть с разными параметрами управления в CD приводе я движок гонял серво сигналом с мк 400нс-3000нс на частоту 125000 сигнал слабый ,но такой микре хвотало,тут почитал про те что обычно для полётов делают
предпочитают: 1-2мс (0-100%)
тоесть шим придётся делать многошаговой и в этих пределах
на 4 движка 8 формул (4 норма 4 верх тормашками)
J-(газ) А-(гориз) D-верт (xyz)аксель
1-3; 2-4 диагональ

PWM1=(J+h+а)
if (a<>512) 512 типо если не ровно то наклонить туда и отключить стабилизатор
if (a=0);
if (x<400)h++;(x>420) h--стабилиз

PWM2=(j+h...)

PWM3=(j+hh +аа)
if (x<400)hh--;(x>420) hh++
.........
PWM4=(j+....)

if z >400 формулы перевернуть для дисбаланса чтоб определить куда развернутся быстрее , если только не зажат поворот куда либо
PWM1=(J+h+а)
if (x<400)h--;(x>420) h++ дестаб

вот я прошу помощи с приёмом пакета данных об ацп
как её правильно прописать?
насчёт crc призадумался если он будет браковать посылки ,то стабилизатор вовремя не сработает и раскокошу дорогущие авио заапчасти , хотя полигон для эксперементов есть :kill:
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: UART и crс

Сообщение urry »

немного потасовал код, это передатчик.
Вложения
kot_uart.zip
(185.13 КБ) 238 скачиваний
CS16AMX
Нашел транзистор. Понюхал.
Сообщения: 195
Зарегистрирован: Вт ноя 30, 2010 00:50:40

Re: UART и crс

Сообщение CS16AMX »

уххх) красиво причёсон)
только частота приёмо передатчика не более 4800(
сметрю пакеты типа 5А ето приём ,далее посылка в нех которую придётся декодировать и удивляет режим остановки,почему мк не циклирует? а только с толкача
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: UART и crс

Сообщение urry »

ну поставь для 4800
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: Off
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 4800
UCSRA=0x00;
UCSRB=0x08;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x67;
5а - маркер пакета, потом идут 3 2 -х байтовые значения ацп и контрольная сумма - всего 8 байт
Точки останова в проте убери - будет непрерывно.
CS16AMX
Нашел транзистор. Понюхал.
Сообщения: 195
Зарегистрирован: Вт ноя 30, 2010 00:50:40

Re: UART и crс

Сообщение CS16AMX »

про перемену скоростей я вкурсе) спасибо)
теперь как я понял маркер ставится в условие и раздербанивается 3 2х битных сигнала ацп
мне интересен сам принцип приёма ,хотяб в том же виде что в терминале )
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: UART и crс

Сообщение urry »

по таймеру, скажем, через 20 мс обнуляется счетчик принятых байтов. При приеме байта в прерывании проверяется, соответствует ли нулевому счетчику принятый байт маркеру пакета, если нет, отбрасывается, да - счетчик инкрементируется, байт ложится в массив, таймер сбрасывается, чтоб не обнулил. Когда счетчик досчитал до 8 байт, происходит проверка контрольной суммы массива с принятой. Все.
CS16AMX
Нашел транзистор. Понюхал.
Сообщения: 195
Зарегистрирован: Вт ноя 30, 2010 00:50:40

Re: UART и crс

Сообщение CS16AMX »

всегда задумывался над задачей ,а как составляется таблица по которой определённому символу приравнивают какой то периуд сигнала ? 1 ware библиотека уже содержит набор символов и привязок ,а тут тоже чтото включается или надо писать в ручную?
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: UART и crс

Сообщение urry »

"мы снова говорим на разных языках" (С) В.С.Высоцкий.
Пауза (отсчет таймера) нужна для самосинхронизации принятого пакета. Биты в пакете передачи идут непрерывно, скорость 4800 бод, т.е. за 10 бит - старт, информационные 8 бит, стоп =10 - скорость выдачи 1 байта, грубо - 480 Герц или чуть больше 2 мс. Если в течении, скажем, 4 мс прерывание по приему байта не происходит, мы имеем дело с паузой, т.е. можно смело обнулять счетчик принятых байт и переходить в режим поиска маркера. Нашли - через каждые 2 мс, пока идут прерывания по принятому очередному байту, сбрасываем таймер, который настроен на 4 мс и предназначен для обнуления счетчика байт.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»