USART "Эхо" под Attiny2313 AVR для проверки работы устройств с использованием протокола
Данную программу я часто использую при отладке устройств работающих с протоколом USART, в частности даже при тестировании модуля конвертера уровней RS-232/TTL на MAX232 я применял эту программу.
Алгоритм работы программы:
Программа выполняет прием символов и их немедленную отправку на выход, то есть данная программа своеобразная заглушка.
Давайте несколько подробней рассмотрим участки программы.
USART_Init( 47 ); - тут число "47" это значение регистра ubrr, выбрано из следующих соображений.
Для понимания нам необходимо открыть документацию на микроконтроллер Attiny2313 на странице содержащей таблицу скоростей работы по протоколу USART в зависимости от внешнего кварцевого генератора.
Где цифры 1..4 означают:
1 - скорость на которой мы планируем работать,
2 - значение величины ubrr,
3 - столбик с величиной ubrr для режима работы двойной скорости (U2X=1),
4 - частота нашего внешнего кварцевого генератора.
По скорости передачи данных могу сказать что нет никакой разницы какую выбирать, будь то 9600 бит/сек или 115,2кбит/с, стабильность работы и там и там высокая.
С удвоением скорости советую просто раз и навсегда определиться и всегда работать с удвоенной скоростью или в обычном режиме, чтобы избежать путаницы в будущем. Разницы в работе я не почувствовал что в режиме U2X=1 что в U2X=0.
По выбору кварцевого генератора могу сказать что необходимо учесть что по специфике своей работы порт USART имеет некоторое значение ошибки, которое в некоторых случаях может достигать больших значений и соответственно негативно влиять на качество передачи данных, что приводит к сбоям в работе. Для избежания таких сбоев советую остановиться с выбором на следующих величинах кварцевого генератора:
1. 1,8432Мгц
2. 3,6864МГц
3. 7,3728МГц
4. 11,0592МГц
5. 14,7456Мгц
Некоторые довольно сложно достать, хоть на дворе и 21-й век и Китай так их клепает что аж гудит в гаю, но все же факт есть факт. Мне повезло найти кварц 7,3728МГц, им сейчас и пользуюсь.
Выбор именно этих величин кварцевого генератора обусловлен отсутствием ошибок в данных при работе с USART, все значения взяты из datasheet на микроконтроллер attiny2313, колонка error.
Вот собственно и сам код USART "Эхо" для ATtiny2313:
#include <avr/io.h> //Перечисляем прототипы функций void USART_Init( unsigned int baudrate ); //Функция инициализации модуля USART unsigned char USART_Receive( void ); //Функция приема данных по протоколу USART void USART_Transmit( unsigned char data ); //Функция передачи данных по протоколу USART int main( void ) //Главная функция { USART_Init( 47 ); //Скорость соединения 19200 бит/с для микроконтроллера ATtiny2313 for (;;) //Вечный цикл { USART_Transmit( USART_Receive() ); //Отправка принятого символа назад } } void USART_Init( unsigned int baudrate ) //Функция инициализации USART { UBRRH = (unsigned char) (baudrate>>8); UBRRL = (unsigned char) baudrate; UCSRA = ( 1<<U2X); //Устанавливаем удвоение скорости UCSRB = (( 1<<RXEN)|(1<<TXEN)); //Разрешение на прием и на передачу через USART UCSRC = (1<<USBS)|(3<<UCSZ0); } unsigned char USART_Receive( void ) //Функция приема данных { while (!(UCSRA & (1<<RXC))); //Ожидание приема символа return UDR; //Возврат содержимого буфера приема символа } void USART_Transmit( unsigned char data ) //Функция отправки данных { while (!(UCSRA & (1<<UDRE)) ); //Ожидание опустошения буфера приема UDR = data; //Начало передачи данных }
Скачать проект для AVR studio с прошивкой.
Для работы с COM портом персонального компьютера рекомендую пользоваться программой Terminal RS232
Подскажите настройки tiny2313
Подскажите настройки tiny2313 для работы от внутреннего осцилятора.
Настройки тут: Фьюз биты
Настройки тут: Фьюз биты ATtiny2313