Главная » Микроконтроллеры
Призовой фонд
на май 2017 г.
1. Тестер компонентов MG328
Паяльник
2. Осциллограф DSO138
Паяльник
3. Регулируемый паяльник 60 Вт
Паяльник
4. 100 руб.
От пользователей

Урок 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-микроконтроллеров
Discovery V8 LC-измеритель LC100-A
вверх