![]() |
![]() |
#11 |
Вступил в клуб
Регистрация: 22.10.2014
Сообщений: 23
|
![]()
Друзья разжуйте подробно прием старлайна пожалуйста, как принять и обработать пакет игнорируя все кроме серийника и кнопки? что то я совсем слаб в программировании.
|
![]() |
![]() |
![]() |
#12 |
Резидент клуба
Регистрация: 16.11.2012
Сообщений: 584
|
![]()
Если кратко, то для приема старлайна слушаем эфир и ищем преамбулу, по длине между фронтов сигнала 1000 мкс, как только пошли сигналы с длиной 250 или 500 - записываем, в соответствии с их длиной, биты посылки, как приняли все 64 бита (8 байт) передаем данные в прогу для обработки.
Пакет нужно принимать полностью, а затем из полученной посылке вытаскивать серийник и кнопку, а затем выполнять свои действия. |
![]() |
![]() |
![]() |
#13 | ||||||||||||||||||||||||||||||||||||||||||
Вступил в клуб
Регистрация: 22.10.2014
Сообщений: 23
|
![]()
Как я понял из вашей программы это как раз прием старлайна:
а вот где взять сам подключаемый библиотеку старлайна если я не ошибся (#define STARLINE 2*4*1 // 0-STARline 1-starLINE) То есть по этой части МК должен принять пакет брелока, а далее я должен пакет разложить и вычленить серийник и кнопку? Добавлено через 45 минут далее записанный из массива пакет я сравниваю по серийнику и коду кнопки и выполняю дальнейшее необходимое действие? Последний раз редактировалось Саша; 24.11.2014 в 21:37. |
||||||||||||||||||||||||||||||||||||||||||
![]() |
![]() |
![]() |
#14 |
Резидент клуба
Регистрация: 16.11.2012
Сообщений: 584
|
![]()
Подключение библиотек это #include <mega168.h>, а #define STARLINE 2*4*1 это определяемые значения, которые при компиляции программы (STARLINE) заменяются на значения (8), просто в моей проге много кодировок и чтобы проще было компилить проект под конкретные кодировки (иногда приходится отцеплять часть кодировок для освобождения места под другие эксперименты) и чтобы знать какая кодировка посылки пришла.
Когда starline.state=3 в массиве starline.data лежит посылка длиной starline.dat_bit. Дальше проверяеш чтобы starline.dat_bit был равен 64, и если он равен, то в массиве starline.data ([4] [5] [6]) лежит серийник, а в starline.data[7] лежит кнопка. Чтобы прием продолжился необходимо обнулить starline.state. |
![]() |
![]() |
![]() |
#15 | |||||||||||||||||||
Вступил в клуб
Регистрация: 22.10.2014
Сообщений: 23
|
![]()
вот здесь уже сильно поплыл без примера, в частности из Вашей программы этот кусок тот что я вырезал это полный цикл приема ?
данный код как я понял уже идет к отсылке полученого пакета? |
|||||||||||||||||||
![]() |
![]() |
![]() |
#16 |
Резидент клуба
Регистрация: 16.11.2012
Сообщений: 584
|
![]()
process_starline - это процедура приема пакета, работает по прерываниям по изменению сигнала на ножке приемника.
send_starline - это процедура передачи сигнала в формате старлайна. Процедура просто посылает сигнал записанный в массиве send_signal[] в кол-ве бит (kb). То есть если в этот массив переписать данные из массива starline.data, и запустить эту процедуру, то в эфир полетит посылка брелка, а для того чтобы тебе послать обратку на твой брел нужно сделать следующее send_signal[0]=starline.data[4]; send_signal[1]=starline.data[5]; send_signal[2]=0xFF; - данные для отображения на экране send_signal[3]=0xFF; - данные для отображения на экране send_signal[4]=0xFF; - данные для отображения на экране send_signal[5]=0xFF; - данные для отображения на экране и отправка обратки send_starline(48); Вообще процу можно упростить до одного стандартного формата Код:
////// процедуры передачи сигнала Starline void send_starline(unsigned char kb) { unsigned char sp, sb; #asm("cli") // RX_OFF; // выключение приемника // цикл повторения посылки for (sb=0; sb<10; sb++) { // отправка преамбулы for (sp=0; sp<8; sp++) { TX_AM=1; delay_ms(1); TX_AM=0; delay_ms(1); } // отправка посылки for (sp=0; sp<kb; sp++) { if ( ((send_signal[sp/8]>>(sp%8))&1)==0 ) { TX_AM=1; delay_us(250); TX_AM=0; delay_us(250); } else { TX_AM=1; delay_us(500); TX_AM=0; delay_us(500); } } } // RX_ON; // включение приемника #asm("sei") } |
![]() |
![]() |
![]() |
#17 |
Вступил в клуб
Регистрация: 22.10.2014
Сообщений: 23
|
![]()
Все, всем спасибо, все получилось, благодаря моему коллеге, за что ему отдельное спасибо!
|
![]() |
![]() |
![]() |
#18 | |||||||||||||||||||||||
Модератор
Регистрация: 27.03.2011
Сообщений: 2,326
|
![]()
Если не затруднит то код дадите посмотреть?
__________________
Правильно поставленный вопрос-на половину полученный ответ;) ++++++++++++++++++++++++++++++++++++++ [url]http://www.youtube.com/watch?v=ktnn-s3ebzw[/url] |
|||||||||||||||||||||||
![]() |
![]() |
![]() |
#19 |
Член клуба
Регистрация: 24.05.2011
Сообщений: 185
|
![]()
А если возможно, то напишите статью или опубликуйте код. Или этот код только для закрытого раздела?
|
![]() |
![]() |
![]() |
#20 | |||||||||||||||||||||||
Модератор
Регистрация: 27.03.2011
Сообщений: 2,326
|
![]()
Я так понимаю-надо из трех переменных [4] [5] [6] данные вложитьв одну переменную и потом ее проверять ?Или проверять последовательно каждую переменную?Объясните как ![]()
__________________
Правильно поставленный вопрос-на половину полученный ответ;) ++++++++++++++++++++++++++++++++++++++ [url]http://www.youtube.com/watch?v=ktnn-s3ebzw[/url] |
|||||||||||||||||||||||
![]() |
![]() |