14. Использование блютуз-модулей HC-05/06

14. Использование блютуз-модулей HC-05/06

Сообщение VVZ » 26 апр 2015, 00:15

Тема о вариантах использования модулей HC-05/06 и близких к теме вопросов.

Содержание темы :

1. Связь по каналу Bluetooth смартфона с микроконтроллером через модуль HC-06.
2. Связь по каналу Bluetooth смартфона с микроконтроллером через модуль HC-05.
3. Изменение параметров модуля HC-06 с помощью смартфона.
4. АТ – команды модуля HC-05.
5. Компьютер и режим AT команд модулей HC-05/HC-06.
6. Канал Bluetooth - MASTER и SLAVE.
7. Cвязь между двумя микроконтроллерами через канал Bluetooth.
7-1. Для ATtiny2313a.
7-2. Для ATtiny13a.

=====================

1. Связь по каналу Bluetooth смартфона с микроконтроллером через модуль HC-06.

Для организации этой связи необходимо установить на смартфон программу (п. 1-2) и на макетке - три проводные перемычки.

На фотографиях несколько примеров использования модуля HC-06, у которого 4-х контактный выходной разъём (VCC; GND; TxD; RxD) :

Изображение

Изображение

Изображение

Изображение

В этих случаях и других подобных модуль используется “как есть”, то есть, с его “заводскими” установками – скорость 9600 (8N1). То есть, после покупки он устанавливается в нужное место и работает !

В наших примерах связь осуществляется только в одном направлении (например, передача данных со смартфона на UART микроконтроллера внешнего устройства; сам модуль может обеспечивать двухстороннюю связь) и в этом случае достаточно установить всего три перемычки; подать питание (VCC=5v и GND) и соединить выход TxD модуля с RxD входом микроконтроллера. При этом, UART микроконтроллера должен быть настроен на скорость 9600 и режим 8N1 (восемь бит, без контроля чётности, один стоп-бит).

Изображение

На правой фотографии виден красный светодиод - это индикатор состояния модуля. Если связь не установлена, то он часто мигает, если связь установлена, то он светится постоянно.

1-2. Текущая версия программы для смартфона под Андроид (<--- ссылка для скачивания) :

Изображение

1-3. Дополнительную информацию о модулях HC-05/06 можно найти по ссылкам на сайтах :
lobotryasy.net ; habrahabr.ru ; easyelectronics.ru .

1-4. Где купить ?

Как вариант на Aliexpress.
VVZ
 
Сообщений: 589
Зарегистрирован: 28 апр 2011, 09:44

Re: 14. Использование блютуз-модулей HC-05/06

Сообщение VVZ » 27 апр 2015, 13:26

2. Связь по каналу Bluetooth смартфона с микроконтроллером через модуль HC-05.

Для построения связи между смартфоном и внешним микроконтроллером вместо модуля HC-06 можно использовать и модуль HC-05. У HC-05 больше полезных рабочих функций (которые пригодятся в последующем) и это отразилось на добавлении двух выводов на выходном разъёме модуля (смотрите изображения).

Изображение

Если на модуле HC-05 вывод KEY соединить с GND, то при заводских установках модуль HC-05 можно использовать аналогично модулю HC-06.

Изображение
VVZ
 
Сообщений: 589
Зарегистрирован: 28 апр 2011, 09:44

Re: 14. Использование блютуз-модулей HC-05/06

Сообщение VVZ » 03 май 2015, 03:29

3. Изменение параметров модуля HC-06 с помощью смартфона.

Для изменения параметров модуля (смены имени, пароля, скорости и так далее) необходимо использовать режим АТ-команд. Для этого необходимо: программа-терминал и устройство, которое обеспечит связь с линиями RXD, TXD модуля.

В случаях с ПК такой программой может быть Termite, Terminal и устройство-преобразователь USB-UART, а в случае со смартфоном - программа SENA BTerm (в конце сообщения ссылка для скачивания программы ToothCommandSender_v1.01) и один из аналогичных модулей HC-06. Но в случае со смартфоном есть ограничение, подобная пара модулей работает только на одной скорости. На следующем изображении вариант соединения модулей при работе от смартфона :

Изображение

Напряжение питания на макетке 5 вольт. С помощью программы SENA BTerm на смартфоне устанавливается соединение с одним из модулей HC-06 и на второй модуль HC-06 передаются-принимаются AT-команды.

Изображение

3-1. Подготовка HC-06 для работы с HC-05 в режиме AT-команд.

Так как модули HC-05 в режиме AT-команд работают на скорости 38400, то можно один из модулей HC-06 подготовить специально для работы с модулями HC-05 (совместно со смартфоном); для этого в модуле HC-06 необходимо установить скорость передачи данных 38400.

Порядок действий :

- соберите на макетке сборку из двух моделей HC-06 (см. изображение). Оба модуля необходимо короткими перемычками соединить с линиями питания (VCC, GND) и правильно соединить линии RXD/TXD модулей.

Изображение

- с помощью программы SENA BTerm на смартфоне устанавливается соединение с одним из модулей HC-06;
- для проверки связи ! со смартфона отправляется команда - AT. Внимание ! Команда отправляется без символов CR-LF (смотрите таблицу в пункте 2 этой темы). Ответ должен быть : ОК.
- со смартфона отправляется команда AT+BAUD6. Команда отправляется без символов CR-LF. Ответ должен быть : ОК38400.
- чтобы отличать модули, на втором модуле HC-06 маркером сделайте пометку – 38400.

Ссылка для скачивания: ToothCommandSender_v1.01
VVZ
 
Сообщений: 589
Зарегистрирован: 28 апр 2011, 09:44

Re: 14. Использование блютуз-модулей HC-05/06

Сообщение VVZ » 04 май 2015, 00:39

4. АТ – команды модуля HC-05.

Ещё раз ! Важно обратить внимание, что в отличие от модулей HC-06, AT-команды модулей HC-05 должны иметь в окончании символы CRLF. В режиме AT-команд в модулях разные скорости передачи – 9600 у HC-06 и 38400 у HC-05. Далее в таблице приведены основные AT-команды для модулей HC-05 :

Изображение

Далее архив для распечатки с исходным разрешением таблиц AT-команд для модулей HC-05; HC-06.
HC-AT.zip
Архив с файлами
(1.95 MiB) Скачиваний: 2969
VVZ
 
Сообщений: 589
Зарегистрирован: 28 апр 2011, 09:44

Re: 14. Использование блютуз-модулей HC-05/06

Сообщение VVZ » 05 май 2015, 03:33

5. Компьютер и режим AT команд модулей HC-05/HC-06.

Для изменения параметров модуля (смены имени, пароля, скорости и так далее) необходимо использовать режим АТ-команд. Для этого необходимо: программа-терминал и устройство (например, USB-UART), которое обеспечит связь с линиями RXD, TXD модуля.

В случаях с ПК такой программой может быть Termite и устройство-преобразователь USB-UART (например, вот этот, стоимостью около 40 рублей). На изображении вариант сборки на макетке :

Изображение

5-1. Проверка работоспособности модуля USB-UART :

- выводы RXD-TXD модуля USB-UART соедините между собой для того, чтобы отправленную информацию с ПК можно было тут же принять (в этом и заключается проверка);
- к модулю USB-UART подключите кабель USB от ПК :

Изображение

- После его соединения на ПК должен появиться дополнительный COM-порт (при необходимости следует установить-обновить драйвер) :

Изображение

- установите программу Termite . Запустите её, возможный вид окна после запуска :

Изображение

- нажмите Settings и выполните соответствующие настройки (!!! номер COM-порта у каждого свой) :

Изображение

- в строке ввода введите что-нибудь и нажмите Ввод

Изображение

- в главном окне терминала должны появиться "Посылка и Ответ" :

Изображение

Если перемычку снять, то после отправки команды ответа не будет.

==========

5-2. Работа с модулями HC- 05/06 (далее HC).

К USB компьютера подключается модуль USB-UART; через его контакт +5V запитывается и схема на макетке. Данное решение не требует ещё дополнительного питания, но требует предельной осторожности !

Сборка схемы (соединения перемычками; для HC-06 – шесть перемычек, для HC-05 – семь перемычек) :

- контакт +5V и GND (USB-UART) - с линиями питания на макетке, соответственно c красной и синей (GND) шинами питания;
- контакты VCC и GND (HC) - с линиями питания на макетке, соответственно c красной и синей (GND) шинами питания;
- контакт TXD (USB-UART) - RXD (HC), а TXD (HC) - RXD (USB-UART);

Изображение

- !!! для HC-05 – контакт KEY (HC) - 3.3v (USB-UART);
- ВСЯ сборка внимательно проверяется !

- к разъёму USB модуля USB-UART подключается кабель от ПК;
- запускается программа Termite; в зависимости от модуля выполняется настройка программы :

- установки в программе Termite для HC-05 (скорость 38400, есть CR-LF, !!!номер COM-порта у каждого свой) :

Изображение

- установки в программе Termite для HC-06 (скорость 9600, без CR-LF, !!!номер COM-порта у каждого свой) :

Изображение

- производится настройка модулей HC-05/06 с помощью AT команд.

Примеры ввода команд и приёма с отображением в окне терминала для модулей HC-05 :

Изображение

Примеры ввода команд и приёма с отображением в окне терминала для модулей HC-06 :

Изображение
VVZ
 
Сообщений: 589
Зарегистрирован: 28 апр 2011, 09:44

Re: 14. Использование блютуз-модулей HC-05/06

Сообщение VVZ » 07 май 2015, 00:48

6. Канал Bluetooth - MASTER и SLAVE

Для организации связи по каналу Bluetooth необходимо два модуля – один HC-05 (в режиме MASTER), второй HC-05 или HC-06 (в режиме SLAVE). Далее приводится порядок изменения настроек для модуля MASTER, настройки модуля SLAVE изменять не требуется. Скорость передачи данных для обоих модулей остаётся 9600 (*).

Порядок действий :

6-1. Выполните пункт 5-2 (предыдущего сообщения), результатом которого является установка связи с модулем HC-05 в режиме AT команд (правая сборка на изображении) :

Изображение

В продолжение этого этапа модуль HC-05 с помощью AT - команды следует перевести в режим MASTER :

Изображение

6-2. Сборка для связи MASTER – SLAVE.

- отключите USB кабель и на макетке установите модуль SLAVE (на следующем изображении HC-06);
- контакты VCC и GND модуля перемычками соедините с линиями питания на макетке, соответственно c красной и синей (GND) шинами питания;
- выводы RXD и TXD модуля HC-06 короткой перемычкой соедините между собой. Через эту связь данные, передаваемые с ПК, возвращаются на него же (собственно это и проверяется);
- к выводу LED модуля HC-05 (MASTER) подключите светодиод (катодом к GND) с токоограничивающим сопротивлением 1 кОм. Назначение светодиода - если он светится, то между двумя модулями установилась связь;
- !!! проводник от контакта KEY (HC-05) разъединяется с контактом 3,3v модуля USB-UART и соединяется с GND;
- ВСЯ сборка внимательно проверяется !
- к разъёму USB модуля USB-UART подключается кабель от ПК.

Если всё сделано правильно, то через несколько секунд светодиод должен включиться - это значит, что между двумя модулями установилась связь. Тут важно отметить - в момент включения питания рядом с макеткой не должно быть включённых других аналогичных модулей HC-05/06 !!! Модуль MASTER после соединения сохраняет в своих настройках 12-ти разрядный адрес модуля SLAVE.

Изображение

На данном этапе подключения модуль MASTER может соединиться с любым аналогичным модулем SLAVE. Но тут важно, чтобы MASTER соединился с нужным SLAVE (который на макетке). Чтобы при последующих включениях обеспечивалось только это соединение, необходимо выполнить следующий пункт.

6-3. Настройка MASTER.

- отключите USB кабель и закройте программу Termite;
- !!! проводник от контакта KEY (HC-05) отсоединяется от GND и соединяется опять с контактом 3,3v модуля USB-UART (режим AT команд);
- ВСЯ сборка внимательно проверяется !
- к разъёму USB модуля USB-UART подключается кабель от ПК;
- запустите программу Termite.

Изображение

- в продолжение этого этапа для модуля HC-05 надо ввести несколько AT команд :
- AT - проверка соединения;
- AT+BIND? -проверка адреса;
- AT+CMODE=0 - перевод на режим соединения по фиксированному адресу (см. таблицу команд модуля HC-05, пункт 3 темы).

Изображение

6-3. Проверка связи MASTER - SLAVE.

- отключите USB кабель и закройте программу Termite;
- !!! проводник от контакта KEY (HC-05) отсоединяется от контакта 3,3v модуля USB-UART и соедините с GND (режим передачи данных);
- ВСЯ сборка внимательно проверяется !
- к разъёму USB модуля USB-UART подключается кабель от ПК;

Через несколько секунд светодиод должен включиться - это значит, что между двумя модулями установилась связь.

Изображение

- запустите программу Termite и поменяйте скорость передачи данных с 38400 на 9600 :

Изображение

- проверьте связь !!!!!!

Изображение

Общие рекомендации :

- каждый раз после отключения питания закрывайте программу Termite и запускайте её (при необходимости) только после подачи питания.
VVZ
 
Сообщений: 589
Зарегистрирован: 28 апр 2011, 09:44

Re: 14. Использование блютуз-модулей HC-05/06

Сообщение VVZ » 09 май 2015, 03:23

С Праздником ! Днём Победы !

7. Cвязь между двумя микроконтроллерами через канал Bluetooth

В данном решении приводится вариант связи между двумя микроконтроллерами с использованием модулей HC-05/06, при этом, модуль HC-06 можно заменить на HC-05. Здесь передача данных происходит в одну сторону; состояние переключателей отображается на состоянии светодиодов (если на передающей части любой переключатель замкнут на землю, то на приёме включится соответствующий светодиод). Приводится вариант сборки и варианты кода для WinAVR :

7-1. Сборка передачи-приёма между двумя микроконтроллерами ATtiny2313a :

8-ми позиционные переключатели подключены к разрядам порта В микроконтроллера (PB0-PB7). Подключаемый программатор использует также три разряда порта В (PB5-PB7). И поэтому, не допускается при подключении программатора замыкание на землю трёх переключателей (или кнопок) на PB5-PB7.

Cвязь по UART между двумя микроконтроллерами вначале проверьте до (!) установки модулей HC-05/06, а потом после.

Изображение

Передача. Выход Txd микроконтроллера (вывод 3) подключён к входу Rxd модуля HC-05 через резистивный делитель (для согласования уровней напряжения, здесь сопротивления по 1 кОм). Вход KEY модуля HC-05 подключён к GND (режим Передачи данных), к выводу LED – токоограничивающее сопротивление и светодиод для индикации соединения.

Приём. Выход Txd модуля HC-06 подключён к входу Rxd микроконтроллера (вывод 2).

7-1-1. Передача состояния переключателей (кнопок) :

Программа работает на частоте 8 мГц, соответственно не забудьте снять фьюз-делитель на 8.

Код: выделить все
//мк ATtiny2313a
//F_CPU = 8000000
#include <avr/io.h>
#include <util/delay.h>


int main(void) {
    DDRD  = 0b00000010;  //вывод PD1-TXD выход
    PORTB = 0b11111111;  //установка внутренних сопротивлений для порта В (переключателей-кнопок) 

    UBRRL = 51;          // скорость - 9600 бод при 8 мГц
    UCSRB = 0b00001000;  // работа на передачу

    while(1){
        _delay_ms(20);   // пауза 20 мс
        UDR = ~PINB;     // чтение состояния кнопок и запись в регистр передатчика
    }
}

7-1-2. Приём с отображением на светодиодах :

Программа работает на частоте 8 мГц, соответственно не забудьте снять фьюз-делитель на 8.

Код: выделить все
//мк ATtiny2313a
//F_CPU = 8000000

#include <avr/io.h>
#include <avr/interrupt.h>

// обработчик прерывания при получении байта по UART

ISR(USART_RX_vect) {
    PORTB = UDR;              //запись принятого байта в порт В
}

int main(void) {
    DDRB  = 0b11111111;     // выходы порта B на выход
    PORTB = 0b11111111;     // состояния выходов порта В при включении

    UBRRL = 51;             // скорость - 9600 бод при 8 мГц
    UCSRB = 0b10010000;     // работа на прием, разрешение прерываний при получении байта

    sei();
    while(1){}
}


После подачи питания все светодиоды на приёмной части включаются. Через 2-3 секунды происходит соединение между модулями HC, начинается передача данных и светодиоды отображают состояния переключателей.
VVZ
 
Сообщений: 589
Зарегистрирован: 28 апр 2011, 09:44

Re: 14. Использование блютуз-модулей HC-05/06

Сообщение VVZ » 29 окт 2016, 19:02

7-2. Односторонняя беспроводная связь для 4-х линий управления.

Связь реализована на двух микроконтроллерах ATtiny13a (передача и приём) и двух блютуз-модулях HC-05 и HC-06. Формат данных соответствует формату данных UART. Так как в ATtiny13a нет аппаратного UART, то передача и приём байта данных реализовано программно. Один микроконтроллер передаёт информацию о состоянии четырёх кнопок на блютуз-модуль HC-05, второй - принимает данные с блютуз-модуля HC-06, и информация о состоянии кнопок отображается на четырё светодиодах. В байте передаваемых данных используются четыре младших бита.

Для реализации и проверки данного решения необходимо собрать схему, запрограммировать микроконтроллеры, используя *.hex файлы из архивов в конце сообщения и подготовить модуль HC-05 (сделать его Мастером), используя информацию в начальных сообщениях данной темы. Модуль HC-06 используется с заводскими установками. Скорость передачи данных 9600 бит/сек.

7-2-1. Сборка на макетке :

Изображение

7-2-2. Электрические схемы :

Передача. К выводам PB0-PB3 подключены кнопки K1-K4. Вывод PB4 микроконтроллера подключён к входу Rxd модуля HC-05 через резистивный делитель R2/R3 (для согласования уровней напряжения). Вход KEY модуля HC-05 подключён к GND (режим Передачи данных), к выводу LED – токоограничивающее сопротивление R4 и светодиод VD для индикации соединения.

Изображение

D1 – ATTiny13a; R2-R4 – 1 кОм; R1 – 10 кОм, C1 – 0,1 мкФ.

Приём. Выход Txd модуля HC-06 подключён к выводу PB4 микроконтроллера. К выводам PB0-PB3 через сопротивления R1-R4 подключены светодиоды индикации VD1-VD4.

Изображение

D1 – ATTiny13a; R1-R4 – 1 кОм; R5 – 10 кОм, C1 – 0,1 мкФ.

7-2-3. Общие рекомендации:

- Для записи в микроконтроллеры *.hex файлов пользуйтесь любым доступным способом. Как вариант: “Плата-переходник для ATtiny13” и “Программатор USBasp с программой SinaProg”.

- После записи программ в микроконтроллеры предварительную проверку связи между микроконтроллерами можно выполнить без установки модулей HC-05 и HC-06. Для этого необходимо напрямую соединить длинной перемычкой выводы 3 обоих микроконтроллеров.

- Вместо одного из микроконтроллеров в качестве передатчика или приёмника информации можно использовать программу “ToothCommandSender_v1.01 для смартфонов с Андроид”; смартфон как управляющее устройство передаёт байт информации через блютуз-модуль на микроконтроллер или смартфон может принимать информацию через блютуз-модуль от микроконтроллера. В обоих случаях необходимо записать программу только в один микроконтроллер, а модуль HC-06 или HC-05 используются с заводскими установками.

Изображение

Как видно на изображении 2 в программе есть возможность наблюдать принимаемым байт и передавать байт.

- В крайних случаях (ошибок в приёме) или проведения экспериментов по передаче-приёму байта код программы предполагает два варианта подстройки; в программе можно использовать константу DISP или регистр OSCCAL микроконтроллера. По работе с регистром OSCCAL можно ознакомиться в “Пример 19. Подстройка частоты RC-генератора и регистр OSCCAL” из темы “Примеры для ATtiny13”.

7-2-4. Программа. Передача состояния переключателей (кнопок) c PB0-PB3:

Программа работает на частоте 9,6 мГц, соответственно не забудьте снять фьюз-делитель на 8.

Код: выделить все
//мк ATtiny13a
//F_CPU = 9600000

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

//Объявление типа unsigned char новым названием uchar (для дальнейшего использования в коде)
typedef unsigned char uchar;

#define TX PB4
#define SPEED 9600      //Скорость передачи
#define DISP 0          //Подстройка скорости; -30/+30

#define SEND_LOW  PORTB &= ~(1 << TX)      //Послать нуль
#define SEND_HIGH PORTB |= (1 << TX)      //Послать единицу

#define ENABLE_TIMER \
   TCCR0B &= 0b11111000 ;\
   TCCR0B |= 0b00000010;             
   
#define UNENABLE_TIMER \
   TCCR0B &= 0b11111000; \
   TCNT0 = 0;

uchar uart_buf = 0;
uchar bit_count = 0;

void send_byte(uchar byte);
static void send_bit(void);

//Обработчик прерывания таймера по совпадению
//ISR_BLOCK - блокирует глобальный флаг разрешения прерываний во время выполнения обработчика
ISR(TIM0_COMPA_vect, ISR_BLOCK) {
   send_bit();
}

int main(void) {
   DDRB = 0b00010000;
   DDRB |= (1 << TX);         //TX - выход (установка бита TX в регистре DDRB в 1)
   PORTB = 0xFF;

   //OSCCAL = 107; //???????????
   
   TCCR0A = 0b00000010;      //Режим - сброс по совпадению (CTC)
   TCCR0B = 0b00000000;
   TIMSK0 = (1 << OCIE0A);    //Разрешение прерывания по совпадению с OCR0A
   OCR0A = (F_CPU/8) / SPEED - 1 + DISP;
   
   sei();
    while(1) {
        _delay_ms(20);
       send_byte(~PINB & 0x0F);
   }
}
void send_byte(uchar byte) {
   ENABLE_TIMER;
   SEND_LOW;         //Стартовый бит
   uart_buf = byte;   //Буфер для отсылки байта
   bit_count = 0;      //счетчик отправленных битов
}
void send_bit(void) {
   if(bit_count == 8) {
      UNENABLE_TIMER;
      SEND_HIGH;      //Стоповый бит
   }
   else {
      if(bit_is_set(uart_buf, 0))
         SEND_HIGH;
      else
         SEND_LOW;
      uart_buf >>= 1;
      bit_count++;
   }
}

Tx_WinAVR.zip
Aрхив для WinAVR
(21.66 KiB) Скачиваний: 1537
Дмитрий Лиман (студент НИЯУ МИФИ)

7-2-5. Программа. Приём с отображением состояния PB0-PB3 на светодиодах :

Программа работает на частоте 9,6 мГц, соответственно не забудьте снять фьюз-делитель на 8.

Код: выделить все
//мк ATtiny13a
//F_CPU = 9600000

#include <avr/io.h>
#include <avr/interrupt.h>

//Обьявление типа unsigned char новым названием uchar (для дальнейшего использования в коде)
typedef unsigned char uchar;

#define RX PB4         //RX - для приема
#define SPEED 9600      //Скорость передачи
#define DISP 0          //Подстройка скорости; -30/+30

/*
*   Начать передачу с отсчета до половины периода.
*   TCCR0B |= 0b00000010; - включить таймер с предделителем на 8
*   PCMSK &= ~(1 << RX);  - запретить прерывания PCINT для RX на время передачи
*/
#define RECEIVE_START \
   OCR0A = ((F_CPU/8) / SPEED - 1 + DISP)/2; \
   TCCR0B &= 0b11111000; \
   TCCR0B |= 0b00000010; \
   PCMSK &= ~(1 << RX);

/*
*   Завершить передачу, отключить таймер, и включить прерывания PCINT на RX
*/
#define RECEIVE_END           \
      TCCR0B &= 0b11111000; \
      TCNT0 = 0;           \
      PCMSK |= (1 << RX);

static void bit_received(void);
static void byte_received(uchar data);

ISR(PCINT0_vect, ISR_BLOCK) {
   if(bit_is_clear(PINB, RX))      //описать в тексте
      
      RECEIVE_START;
}

//Обработчик прерывания таймера по совпадению
//ISR_BLOCK - блокирует глобальный флаг разрешения прерываний во время выполнения обработчика
ISR(TIM0_COMPA_vect, ISR_BLOCK) {
   bit_received();
}

int main(void) {
    DDRB =  0b00001111;         //PB1-PB4 - выходы
    PORTB = 0b11110000;
   GIMSK = (1 << PCIE);
   PCMSK = (1 << RX);         //PCINT на RX
   
   //OSCCAL = 59;              //?????????

   TCCR0A = 0b00000010;      //Режим - сброс по совпадению (CTC)
   TCCR0B = 0b00000000;
   TIMSK0 = (1 << OCIE0A);    //Разрешение прерывания по совпадению с OCR0A
   
   sei();
   while(1) {}
}

void bit_received(void) {
   static uchar bit_count = 0;         //счетчик полученных битов
   static uchar buf = 0;            //буфер для записи полученной информации

   if(bit_count == 0) {            //Стартовый бит
      if(bit_is_clear(PINB, RX)) {   //Проверка, точно ли это был статовый бит
         buf = 0;
         bit_count++;
         OCR0A = (F_CPU/8) / SPEED - 1 + DISP;
      }
      else {                     //Если все же помеха, то закончить прием
         RECEIVE_END;
         bit_count = 0;
      }
   }
   else if(bit_count == 9) {         //Стоповый бит, конец передачи байта
      RECEIVE_END;
      bit_count = 0;
      byte_received(buf);            //Обработка полученного байта
   }
   else {                        //Один из информационных битов
      buf >>= 1;
      if(bit_is_set(PINB, RX))
         buf |= 0b10000000;
      bit_count++;
   }
}

void byte_received(uchar data) {
   sei();
    PORTB &= 0b111100000;
    PORTB |= 0b00001111 & (data);
}

Rx_WinAVR.zip
Aрхив для WinAVR
(20.28 KiB) Скачиваний: 1660
Дмитрий Лиман (студент НИЯУ МИФИ)
VVZ
 
Сообщений: 589
Зарегистрирован: 28 апр 2011, 09:44


Вернуться в Микроконтроллеры - Оборудование (программаторы, схемы с МК)

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1