Подключение радиомодуля TB387 к ATmega16

В данной статье рассмотрим подключение модуля 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+ATmega16/ATmega32 Подключение радио модуля (TB387)

По умолчанию скорость TB387 равна 9600. Если нужна другая скорость, подключаем CMD к земле и меняем скорость. Как это сделать, смотрим на странице UART Радиомодуль TB387 20dBm 2.4GHz — передатчик/приёмник.
Прошивку для ATmega16 написал на C в Atmel Studio 6. Для программирования контроллера использовал программатор STK500, а программу — AVR Studio 4, очень удобный инструмент.
AVR Studio 4, Схема подключения радиомодуля TB387 к ATmega16
Ниже привёл пример прошивки. Не буду вдаваться в деталях, я всегда руководствуюсь по даташиту. Будет время напишу статью на эту тему.

Пример программы в 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 передаёт нам большой привет.

Результат
Terminal, Схема подключения радиомодуля TB387 к ATmega16

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

Купить ATmega16A на Aliexpress


Купить TB387/TB394 на Aliexpress

Похожие записи

Комментарии 44

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *