Описание устройства:Есть 50 столиков и одна барная стойка. Клиент, сидящий за столиком №3, нажимает на кнопку передатчика. У бармена, любым удобным для меня способом, появляется сигнал о том, что официанта вызывает столик №3.
У меня есть готовая конструкция такого устройства. В конструкции один большой недостаток. Если на столике №2 и №3 одновременно нажали на кнопку, то к бармену поступит только один сигнал, второй потеряется или вообще не поступит ни один сигнал, так как передатчики работают на одной частоте и могут перекрыть друг друга.
Я решил поступить иначе. Буду использовать кнопки с обратной связью. Допустим, столик №3 нажал кнопку, и столик №2 нажал кнопку. Устройство у бармена постоянно по очереди опрашивает все кнопки. Если кнопка №2 была нажата, то при опросе этой кнопки она незамедлительно передаст код. Тем временем кнопка №3 то же была нажата, но пока на неё не поступит её же код, идентификация, она не передаст в эфир свой код обратно на приёмник.
Из всего проекта я не могу решить только одну проблему, о которой я и пишу ниже. Надеюсь на Вашу помощь.
Проект пишу на языке С, он мне достаточно хорошо знаком.
Опишу свою задачу:
1) Цель проекта.
2) Аппаратура.
3) Проделанная работа.
4) Полученный результат.
5) Вопрос.
Цель проекта: Необходимо по радиоканалу (433.92 МГц) передать сигнал в COM порт компьютера с предварительным редактированием данных.
Аппаратура: Передатчик – набор брелков от гаражных ворот, автосигнализаций, и ещё от чего то, с частотой 433.92 Мгц.
Приёмник – микросхема RX5000 с преобразователем уровня с 3 вольт до 5 вольт и подключённая к Atmega 8 к UART.
Принципиальная схема:
Проделанная работа:1) Создал проект в CVAVR с именем UART. Сгенерировал первоначальные настройки
Программа сгенерировала код в который я вставил в бесконечный цикл только вот эту строку:
Код
while (1) //бесконечный цикл
{
putchar(getchar()); // Вывод данных в терминал
};
2) Скомпилировал код программы, стёр микроконтроллер, прошил скомпилированный файл. Прошил фузы и Лок биты:
Lock bits:
LB1=1
LB2=1
BLB01=1
BLB02=1
BLB11=1
BLB12=1
Fuse bit:
CKSEL0=1
CKSEL1=0
CKSEL2=1
CKSEL3=1
SUT0=1
SUT1=1
BODEN=1
BODLEVEL=1
BOOTRST=1
BOOTSZ0=1
BOOTSZ1=1
EESAVE=1
CKOPT=1
WDTON=1
RSTDISBL=1
Включил терминал на ПК, настроил COM порт согласно настройкам МК – 9600, 8N1. В терминал сразу же стал передаваться «мусор» шум эфира. Как только я нажимал кнопки различных передатчиков, в терминал поступали упорядоченные символы. При доскональном рассмотрении ситуации я нашел конец и начало передаваемой передачи кода.
Вернусь немного назад. У меня есть рабочая прошивка устройства, на которой я проверял работу всех имеющихся у меня пультов. Правда схема МК немного отличалась от моей схемы. Отличие состояло в том, что выход приёмника подключен не на вход UART, а к выводам PD2(INT0) и PD3(INT1) через сопротивления. Ниже привожу часть схемы.
С этой рабочей прошивкой и этой схемой я принимал на терминал вот такие сигналы в ASCII
0001A46F>
0001A46F>
0002867E<
02C467CE>
02C467FE>
0001A46F>
0001A46F>
И вот такой сигнал я принял в HEX стандарте.
30 0 30 31 41 34 36 46 3E 0D 0A
Полученный результат.Вернёмся к моему варианту. Как я уже говорил, при включении МК у меня в терминал выводился «мусор» И после нажатия на кнопки различных передатчиков я принимал упорядоченный набор символов. Но этот упорядоченный набор меня ввёл в тупик. Вот он в HEX стандарте при передаче вот этого кода 0001A46F>
F8 F8 F8 C0 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 C0 C0 C0 C0 C0
F8 F8 F8 C0 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 C0 C0 80 C0 C0
F8 F8 F8 C0 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 C0 C0 C0 C0 C0
F8 F8 F8 80 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 F8 C0 80 C0 C0 C0
Я не могу дать объяснение этому сигналу и соответственно сделать какие то выводы.
Вопросы:1) Что я в своём проекте мог сделать не так?
2) Как мне организовать проект, что бы я выход приёмника смог подключить к любому входу МК, кроме входа UART, а с выхода UART мог передать полученный сигнал от приёмника в терминал?
3) Смогу ли я при решении вопроса №2 предварительно записать принятый с приёмника сигнал в переменную и сделать с ним необходимые мне вычисления?
4) Как мне определить начало и конец посылки сигнала? Я представляю себе определение начала и конца сигнала по стартовому и стоповому биту. Так как они равны 0 то я могу из всего переданного сигнала программой написанной для ПК выделить только один, нужный мне сигнал.
5) Какие есть способы получения нужного мне сигнала из всей повторяющейся посылки?
Прошу всех желающий откликнутся и привести в пример рабочий кусок кода с описанием. Это мой первый проект с AVR, не считая включения светодиодов и кнопок.