В данной статье рассмотрим подключение модуля 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 передаёт нам большой привет.
Результат

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





























![[ New original authentic] ATMEGA16A-AU ATMEGA16A](https://ae01.alicdn.com/kf/HTB19pHtKpXXXXXUXXXXq6xXFXXXp/-New-original-authentic-ATMEGA16A-AU-ATMEGA16A.jpg_220x220.jpg)
![[ New original authentic] ATMEGA16A-PU ATMEGA16A](https://ae01.alicdn.com/kf/HTB1nx52KpXXXXb7XVXXq6xXFXXXZ/-New-original-authentic-ATMEGA16A-PU-ATMEGA16A.jpg_220x220.jpg)


























