|
Прием данных на Атмеге, Как правильно это организовать |
|
|
|
Nov 19 2008, 09:26
|
Частый гость
 
Группа: Участник
Сообщений: 145
Регистрация: 11-01-08
Пользователь №: 34 001

|
Здрастье, есть у меня такая проблема. Атмега, и приемник на 433Мгц ну от сигналки. Вот на ножку чипа приходит сигнал с приемника. Подскажите как выглядеть будет программа что бы просто записать принятые данные в виде единиц и нулей. Пакет приходит так: " Вся передача опирается на элемнтарный отрезок времени названный Те и равный обычно 400мкс. (документацией нормирован разброс от 280мкс до 620мкс). Итак передаваемый пакет: Он состоит из преамбулы (длиться 23Те, и нужна для того, чтоб оторвать приемник сиги от сладостного прослушивания помех), за ней следует заголовок пакета (header) – равен 10Те, и нужен для того чтоб проц в сиге смог определить длительность Те у принимаемого пакета данных… Затем идут собственно данные (66 бит или 198Те), и наконец Guard Time – время для того чтобы сига переварила принятое (39Те). Теперь о передаче данных.. бит передается за время равное 3Те.. В течении 1-го Те передается обязательно высокий уровень (красная часть), 2-е Те это собственно значение передаваемого бита (только инвертированное, те лог1 = низкий уровень, а лог0 соответственно = высокий уровень) – синяя часть.. И наконец в течении 3-го Те передается обязательный низкий уровень (зеленая часть).. " ВОТ! хочется попроще и оптимальный прием пакета
Эскизы прикрепленных изображений
|
|
|
|
|
 |
Ответов
|
Jun 7 2009, 14:09
|
Частый гость
 
Группа: Участник
Сообщений: 145
Регистрация: 11-01-08
Пользователь №: 34 001

|
Здраствуйте, я разбираюсь с одним кодом, задача такая: Получить код от приемника в формате кейлог, и по событию отправить его же (отправка кода происходит при полностью полученном коде), дальше хочу научиться записывать в ячейки полученные коды, для сравнения, но пока передача не проходит, смотрю осцилографом, а передаются только нули (вижу по однотипным импульсам в теле пакета) подскажите в чем дело? CODE #include <mega8.h> //#include <my_lcd.c> #include <stdio.h> #include <delay.h> #include <String.h>
#define TRFreset 0 #define TRFSYNC 1 #define TRFUNO 2 #define TRFZERO 3
#define NBIT 65 #define TE 400 #define HIGH_TO -10 #define LOW_TO 10 #define SHORT_HEAD 20 #define LONG_HEAD 45 #define RFOut PORTC.7 #define RfIn PINB.0 #define Btn PINB.2 typedef unsigned char byte; typedef signed int sbyte; typedef signed long word; #pragma warn- //директива для инициаизации еепрома eeprom byte EprBuf0 [65]; eeprom byte EprBuf1 [65]; eeprom byte EprBuf2 [65];
eeprom byte eep_ring; #pragma warn+ //директива для инициаизации еепрома
byte i; bit RFFull; bit RFBit; int RFcount; byte Bptr,BitCount,RFstate,Buf[9];
void Transmit(byte*b,byte u) { byte g=0,j=0,counts; { for(;u>0;u--) counts = b[9]; for (i = 0; i < 12; i ++) //преамбула { RFOut = 1; delay_us(TE); RFOut = 0; delay_us(TE); } delay_ms(4); // хедер for (i=0;i<8;i++) // цыкл вывода байтов { g = b[i]; // считаем буфер for (j=0;j<8;j++) // цикл вывода битов в байте { RFOut = 1; // вывод бита delay_us(TE); if (g&1) RFOut = 0; delay_us(TE); RFOut = 0; delay_us(TE); g >>= 1; } }
delay_ms(10); // гуард тайм } //end for u } //end Transmi
/////////////// receive ///////////////////////////////// interrupt [TIM0_OVF] void timer0_ovf_isr(void) { TCNT0=135; RFBit=RfIn;
if (RFFull) return; ///////////////////////////////////////////////////////// switch(RFstate) { case TRFUNO: if ( RFBit == 0) { RFstate= TRFZERO; } else { RFcount--; if (RFcount < HIGH_TO) RFstate = TRFreset; } break; ////////////////////////////////////////////////////////// case TRFZERO: if (RFBit) { RFstate= TRFUNO; Buf[Bptr] >>= 1; if ( RFcount >= 0) { Buf[Bptr]+=0x80; } RFcount = 0; if ((++BitCount & 7) == 0) Bptr++; if (BitCount == NBIT) { printf("Reseive signal:"); printf("%02X%02X%02X%02X%02X%02X%02X%02X", Buf[0],Buf[1],Buf[2],Buf[3],Buf[4],Buf[5],Buf[6],Buf[7]); printf("\n\r"); Transmit(Buf,1); RFstate = TRFreset; RFFull = 1; } } else { RFcount++; if ( RFcount >= LOW_TO) { RFstate = TRFSYNC; Bptr = 0; BitCount = 0; } } break; /////////////////////////////////////////////////////////// case TRFSYNC: if ( RFBit) { if ((RFcount < SHORT_HEAD)||(RFcount >= LONG_HEAD)) { RFstate = TRFreset;break; } else { RFcount =0;RFstate= TRFUNO; } } else { RFcount++; } break; ///////////////////////////////////////////////////////////// case TRFreset: default: RFstate = TRFSYNC; RFcount = 0; Bptr = 0; BitCount = 0; break; } // switch ////////////////////////////////////////////////////////////// if(RFFull) { RFstate = TRFreset; RFFull=0; } ///////////////////////////////////////////////////////////// } // receive ////////////////// main ////////////////////////////////////
void main(void) {
PORTD=0x10; DDRD=0x00; PORTB=0x00; DDRB=0x00; PORTC=0x7F; DDRC=0xFF; TCCR0=0x02; TCNT0=0x00;
TIMSK=0x01;
UCSRA=0x00; UCSRB=0x08; UCSRC=0x86; UBRRH=0x00; UBRRL=0x33;
//////////////////////////////////////////////////////////// printf(" WAIT SIGNAL!\n\r"); printf("\n\r"); //////////////////////////////////////////////////////////// #asm("sei") }// main
Причина редактирования: [codebox], хотя нужно использовать приложения
|
|
|
|
Сообщений в этой теме
Vny4ek Прием данных на Атмеге Nov 19 2008, 09:26 Dog Pawlowa Цитата(Vny4ek @ Nov 19 2008, 13:26) Здрас... Nov 19 2008, 09:56 Vny4ek нет проблема не в этом. Хочется просто не догоню к... Nov 19 2008, 09:58 Dog Pawlowa Цитата(Vny4ek @ Nov 19 2008, 13:58) а для... Nov 19 2008, 10:08 Vny4ek ок, если можно по подробней с чего начать, програм... Nov 19 2008, 11:02 vvvvv Идея такая. Настраиваешь вход с радиоканала на пре... Nov 19 2008, 11:03 Vny4ek СПАСИБО большое! То что надо, я потихоньку нач... Nov 19 2008, 11:11 Vny4ek будьте добры ткните носом в апноут, желательно что... Nov 25 2008, 14:14 Vny4ek Уважаемые, подскажите, обязательно ли в данном при... Apr 28 2009, 13:55 SasaVitebsk А что тут непонятного?
Инициализация таймера напри... Apr 29 2009, 08:51 xemul Майкрочип описАл процесс приема Keeloq не в одном ... Apr 29 2009, 09:25 Vny4ek to:SasaVitebsk спасибо большое, я потихоньку начин... Apr 29 2009, 12:39 xemul Цитата(Vny4ek @ Apr 29 2009, 16:39) to:xe... Apr 29 2009, 14:59 Vny4ek Я уже не первый день не могу никак освоить эти тай... May 2 2009, 10:41 Vny4ek Ребят, ну подскажите пожалуйста. May 3 2009, 08:08 rezident Таймер не нужно запускать по перепаду. Таймер долж... May 3 2009, 11:27 Vny4ek А можно пример привести, для кодвижена, принцип я ... May 3 2009, 11:43 rezident Предлагаю сделать наоборот. Вы предоставляете свой... May 3 2009, 11:54 Vny4ek ок, я полностью с вами согласен.
у меня есть приме... May 3 2009, 16:42 rezident Не нужно обрывков. Приводите ваш пример программы ... May 3 2009, 21:38 Vny4ek Вот привожу пример кода, для приема. Насколько мне... May 4 2009, 04:57 Dog Pawlowa Цитата(Vny4ek @ May 4 2009, 07:57) Вот пр... May 4 2009, 09:05 Vny4ek не понятно мне следующее: как отследить изменение ... May 4 2009, 10:02 Dog Pawlowa Цитата(Vny4ek @ May 4 2009, 13:02) не пон... May 4 2009, 10:13 XVR 1. В main нет зацикливания в конце
2. printf в обр... Jun 8 2009, 09:03 Vny4ek да я взял уже работающий пример, прием работает ко... Jun 8 2009, 09:14 Vny4ek Здравствуйте, подскажите плиз. Вообщем я пытаюсь п... Jun 28 2009, 15:34 Vny4ek Ребят, ну подскажите плиз, я понимаю что не лучшее... Jun 29 2009, 17:41 SasaVitebsk Блин. Во что лень делает....
Первый пост ноябрь 2... Jun 29 2009, 18:17 Goodefine Простите что вмешиваюсь, но возникла похожая пробл... Jun 30 2009, 05:49 Vny4ek Goodefine, узнаю в лицо точно! Я с ним ковырял... Jul 1 2009, 07:42 Vny4ek Ребят вот я начал потихоньку тут понимать что прои... Jul 27 2009, 05:41
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|