USART "Эхо" под Attiny2313 AVR для проверки работы устройств с использованием протокола

Данную программу я часто использую при отладке устройств работающих с протоколом USART, в частности даже при тестировании модуля конвертера уровней RS-232/TTL на MAX232 я применял эту программу.

Алгоритм работы программы:

Программа выполняет прием символов и их немедленную отправку на выход, то есть данная программа своеобразная заглушка.

Давайте несколько подробней рассмотрим участки программы.
USART_Init( 47 ); - тут число "47" это значение регистра ubrr, выбрано из следующих соображений.
Для понимания нам необходимо открыть документацию на микроконтроллер Attiny2313 на странице содержащей таблицу скоростей работы по протоколу USART в зависимости от внешнего кварцевого генератора.

Выбор значения ubrr
Где цифры 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:

  1. #include <avr/io.h>
  2.  
  3. //Перечисляем прототипы функций
  4. void USART_Init( unsigned int baudrate ); //Функция инициализации модуля USART
  5. unsigned char USART_Receive( void ); //Функция приема данных по протоколу USART
  6. void USART_Transmit( unsigned char data ); //Функция передачи данных по протоколу USART
  7.  
  8. int main( void ) //Главная функция
  9. {
  10. USART_Init( 47 ); //Скорость соединения 19200 бит/с для микроконтроллера ATtiny2313
  11.  
  12. for (;;) //Вечный цикл
  13. {
  14. USART_Transmit( USART_Receive() ); //Отправка принятого символа назад
  15. }
  16. }
  17.  
  18. void USART_Init( unsigned int baudrate ) //Функция инициализации USART
  19. {
  20. UBRRH = (unsigned char) (baudrate>>8);
  21. UBRRL = (unsigned char) baudrate;
  22. UCSRA = ( 1<<U2X); //Устанавливаем удвоение скорости
  23. UCSRB = (( 1<<RXEN)|(1<<TXEN)); //Разрешение на прием и на передачу через USART
  24. UCSRC = (1<<USBS)|(3<<UCSZ0);
  25. }
  26. unsigned char USART_Receive( void ) //Функция приема данных
  27. {
  28. while (!(UCSRA & (1<<RXC))); //Ожидание приема символа
  29. return UDR; //Возврат содержимого буфера приема символа
  30. }
  31.  
  32. void USART_Transmit( unsigned char data ) //Функция отправки данных
  33. {
  34. while (!(UCSRA & (1<<UDRE)) ); //Ожидание опустошения буфера приема
  35.  
  36. UDR = data; //Начало передачи данных
  37. }

Скачать проект для AVR studio с прошивкой.

Для работы с COM портом персонального компьютера рекомендую пользоваться программой Terminal RS232

Подскажите настройки tiny2313

Подскажите настройки tiny2313 для работы от внутреннего осцилятора.

Настройки тут: Фьюз биты

Настройки тут: Фьюз биты ATtiny2313