Главная » Микроконтроллеры
Призовой фонд
на октябрь 2020 г.
1. 1500 руб
Сайт Паяльник
2. Тестер компонентов MG328
Сайт Паяльник
3. 150 руб.
От пользователей


Макетная плата МВ102 + блок питания + набор проводов

Урок 14. Программный UART в BASCOM-AVR

В некоторых AVR микроконтроллерах отсутствует аппаратный UART интерфейс связи или по некоторым причинам он не может быть использован. Как же тогда поступить? Можно конечно использовать другой микроконтроллер, но проще и дешевле реализовать программный UART. Его преимущество в том, что программный UART можно реализовать практически на любом AVR микроконтроллере и на любых портах ввода\вывода. Об этом и пойдёт речь в этом уроке.

Программный UART по работе практически ни чем не отличается от аппаратного за исключением того, что для программного нужно чуть больше Flash и RAM памяти чем для аппаратного.

Программная реализация

Чтобы в BASCOM-AVR реализовать программный UART нужно, сначала сконфигурировать порты ввода\вывода на передачу TXD:
Open " порт : скорость , биты , чётность , стоп биты " For Output As #1

И на приём RXD:
Open " порт : скорость , биты , чётность , стоп биты " For Input As #2

Порт необходимо указывать так: com ножка ввода\вывода, например: comb.3 порт на ножку ввода\вывода PB.3 . Скорость, биты, четность и стоп биты указывать как обычно.

Пример команды конфигурации на передачу TXD:
Open "comb.3:9600,8,n,1" For Output As #1

Пример команды конфигурации на приём RXD:
Open "comb.4:9600,8,n,1" For Input As #2

После конфигурации с программным UART можно работать с помощью команд на передачу: Print #1 , данные и на приём: Input #2 , переменная

Стоит помнить что частота, выставленная в BASCOM-AVR командой $crystal должна совпадать с реальной частотой микроконтроллера выставленной фьюз-битами.

Практическая реализация

Теперь попробуем на практике реализовать программный UART. За основу возьмём микроконтроллер без аппаратного UART – ATtiny13, светодиод, кнопку и пару резисторов. Соберём простую схему:

Схема в Proteus

 

Программа для микроконтроллера будет работать по следующему алгоритму: сначала вывод сообщений потом ожидание команд (LED=1 – включить светодиод, LED=0 – выключить светодиод). В BASCOM-AVR программа выглядит так:

$regfile = "attiny13.dat"
$crystal = 9600000                                          
$hwstack = 16
$swstack = 16
$framesize = 16
Open "comb.3:9600,8,n,1" For Output As #1                   
Open "comb.4:9600,8,n,1" For Input As #2                   
Dim Cmd As String * 8
Config Portb.2 = Output
Print #1 , "Program UART for AVR microcontroller Attiny13"
Print #1 , "------"
Print #1 , "Developer: Yakovlev Alexander"
Print #1 , "E-mail: haker.by@mail.ru"
Print #1 , "------"
Print #1 , "Hello http://cxem.net !!!"
Print #1 , "------"
Do
Print #1 , "Command:"
Input #2 , Cmd
If Cmd = "LED=1" Then
Portb.2 = 1
Print #1 , "DONE!"
End If
If Cmd = "LED=0" Then
Portb.2 = 0
Print #1 , "DONE!"
End If
Loop
End

Откомпилируйте программу и прошейте ею микроконтроллер. Фьюз-биты необходимо установить на тактирование микроконтроллера от внутреннего тактового генератора на 9.6 МГц без делителя на 8. Пример установки фьюз-битов в программе SinaProg:

Фьюзы в SinaProg

Для связи с микроконтроллером по UART можно использовать USB-UART переходник (я так и поступил) и программу Terminal Emulator в BASCOM-AVR. После подачи питания на микроконтроллер и запуска программы нажмите кнопку, указанную на схеме для сброса микроконтроллера.

Я собирал схему на макетной плате, вот что получилось:

Фото устройства

Прикрепленные файлы:

Теги:

Опубликована: 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (1) | Я собрал (0) | Подписаться

0
123ksn #
Хочу добавить немного информации к статье.
Попытался написать программу для ATtiny13. Поскольку новичёк, использовал следующие операторы для UART'a:
' Скорость UART
$baud = 4800
'Вывод информации через UART
Print "test"
В результате при компиляции получил ругательства на 1-ю строку программы.
Error : 202 Line : 1 .EQU not found, probably using functions that are not supported by the selected chip [UBRR]
Error : 202 Line : 1 .EQU not found, probably using functions that are not supported by the selected chip [UCR]
никак не связанные с UART'ом (для новичка).
Но эти ошибки вызваны именно операторами аппаратного UART'a, которого у ATtiny13 нет. Жаль, что автор не заострил внимания на разнице в настройке и использовании аппаратного и софтового UART'a с точки зрения Bascom.
Также автор не привел примеров отправки и приема информации в двоичной, десятичной и шестнадцатиричной форме.
Еще автор скромно обошел молчанием "щекотливую" информацию почему у него в программе следующие настройки
$hwstack = 16
$swstack = 16
$framesize = 16
хотя при выборе ATtiny13 Bascom предлагает внести в код совсем другие
$hwstack=120
$swstack=48
$framesize=32
и сам же на них ругается:
"The HW stack, SW stack and frame space may not exceed the chip memory"
Неужели эту информацию надо скрывать от читателей?
И наверное стоило отразить, что в ATtiny13 сторожевой таймер может работать в двух режимах: прерывания и ресета.
В результате чего МК можно отправлять в долгий глубокий сон с пробуждением не от нажатия кнопки или ресета. Что в свою очередь приводит к минимальному потреблению энергии от батарейки.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется напряжение?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Pickit 2 - USB-программатор PIC-микроконтроллеров
Pickit 2 - USB-программатор PIC-микроконтроллеров
Автомобильный GPS-трекер с GSM/GPRS и дистанционным управлением Набор начинающего радиолюбителя
вверх