В данной статье рассмотрим подключение модуля TB387 к ATmega16 (ATmega32/Arduino) и приведем пример программы на C в Atmel Studio 6.
Информации о TB387 в интернете очень мало. Сделан он на базе контроллера STM8S003F3P6. Рабочее напряжение данного аппарата от 3.3В до 5.5В, но лучше подключить к 3.3В если необходимо интенсивно его использовать, ибо он перестаёт работать на неопределённое время, у меня бывало от сутки до несколько.
Подключается он просто, Vcc, GND…, вот только RXD и TXD нужно соединить наоборот: RXD модуля к TXD контроллера и TXD модуля к RXD контроллера. Так же подключаем второй к ПК.
Схема подключения радиомодуля TB387 к ATmega16/ATmega32

По умолчанию скорость TB387 равна 9600. Если нужна другая скорость, подключаем CMD к земле и меняем скорость. Как это сделать, смотрим на странице UART Радиомодуль TB387 20dBm 2.4GHz — передатчик/приёмник.
Прошивку для ATmega16 написал на C в Atmel Studio 6. Для программирования контроллера использовал программатор STK500, а программу — AVR Studio 4, очень удобный инструмент.
Ниже привёл пример прошивки. Не буду вдаваться в деталях, я всегда руководствуюсь по даташиту. Будет время напишу статью на эту тему.
Пример программы в Atmel Studio 6
#define F_CPU 11059200UL #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #define BAUD_RATE 9600 #define UBRR F_CPU/16/BAUD_RATE-1 char message[125] = "Hello! I am ATmega16!"; int n = 125; int i = 0; ISR(USART_UDRE_vect) { if(i == n) { UDR = 13; i++; } else if(i == n + 1) { UDR = 10; _delay_ms(1000); i = 0; } else { UDR = message[i++]; } } int main(void) { n = strlen(message); /* USART init */ /* Set baud rate */ UBRRH = (char)(UBRR>>8); UBRRL = (char)(UBRR); UCSRA = 0; /* Enable receiver and transmitter RXCIE: RX Complete Interrupt [Disable] TXCIE: TX Complete Interrupt [Disable] UDRIE: USART Data Register Empty Interrupt [Enable] */ UCSRB = (1<<RXEN) | (1<<TXEN) | (0<<RXCIE) | (0<<TXCIE) | (1<<UDRIE); /* Set frame format: 8data, 2stop bit URSEL: USART Mode Select [Synchronous Operation] USBS: Stop Bit Select [2-bit] UCSZ1,UCSZ0: Character Size [8-bit] */ UCSRC = (1<<URSEL) | (1<<USBS) | (1<<UCSZ1) | (1<<UCSZ0); sei(); while(1) { } }
После прошивки подключил модули, один к AVR другой к компьютеру, запустил Terminal v1.9b и вуаля, всё работает, микроконтроллер ATmega16 передаёт нам большой привет.
Результат

Если всё правильно сделать, то вы должны получить такой результат, какой мы видим на картинке.