Примеры программ в bascom

В некоторых 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 . Скорость, биты, четность и стоп биты указывать как обычно.

Using Bascom AVR for Arduino board

Пример команды конфигурации на передачу 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, светодиод, кнопку и пару резисторов. Соберём простую схему:

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

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

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

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

Источник: bestschemes.ru

tutorial bascom

Примеры программ в bascom

В процессе написания программы часто необходимо проверить правильность работы алгоритма – глянуть на состояние регистров, узнать значение переменных или состояние портов вывода. Хотя сам для этих целей и использую Proteus , бывало такое, что его нет под рукой. И поэтому выручает симулятор, который включен в Bascom — AVR .

Читайте также:
Лучшая программа для путевых листов

В качестве примера для симуляции взял программу с модуля дистанционного управления, описанного в прошлой статье. По алгоритму программа должна обрабатывать нажатие кнопки, висящей на прерывании INT 1. При нажатии на кнопку изменяется (увеличивается) значение переменной Flag , значение которое может принимать эта переменная от 1 до 7, при достижении значения 8 переменная обнуляется. Пока переменная больше 0, на выводе Port D .4 находится высокий уровень напряжения (логическая единица).

Также по задумке, при значении переменной Flag больше 0, на одном из выходов Port B будет единичка. При каждом нажатии кнопки и увеличении переменной, эта единичка должна сдвигаться вправо – то есть при значении Flag =1 единица будет на Port B .7 , при Flag =2 единица будет на Port B . 6 и так далее, пока нажимая кнопку мы не достигнем значения Flag =8 ; а как писал выше, достигнув этого значения, переменная обнуляется и состояние выходов Port D .4 и Port B сбрасываются в ноль. При последующих нажатия кнопки все повторяется. Для понятия алгоритма можно посмотреть видео со статьи озвученной выше.

Итак, алгоритм есть, код написан и теперь необходимо проверить соответствие кода алгоритму — переходим к симуляции внутренними средствами Bascom — AVR.

Но есть один нюанс: для того чтобы симулятор нормально начал работать с программой, в нее необходимо добавить строку $sim. Она добавляется после директив типа: $regfile или $crystal.

После компиляции программы нажимаем кнопку F 2, открывается окно симулятора:

В активной вкладке Variables (та, что подсвечена желтым) выбираются переменные, за которыми хотим понаблюдать, значения переменных будут отображаться в десятичном, шестнадцатеричном и двоичном представлении, в общем, все что нужно уже под рукой. Тут могут быть записаны не только переменные, но и порты, состояния которых нам интересны. В синей части окна, можно смотреть, что контроллер отправляет по UART во внешний мир, а также посылать ему команды, если такая функция предусмотрена в программе. Ниже, в белой части окна находится сама программа, в процессе симуляции можно наблюдать за выполнением программы по строкам.

В столбце Variable выбираем из списка или пишем вручную имена переменных:

окно симулятора Bascom-AVR

Записали переменную и необходимые порты:

окно симулятора Bascom-AVR

Теперь нас интересует вкладка Interrupts :

окно симулятора Bascom-AVR

Здесь можно вручную создавать условия прерывания, такие как внешние прерывания INT 0 и INT 1; прерывания по таймерам ( OVF 0 и OVF 1 для Timer 0 и Timer 1 соответственно); прерывания по UART ( URXC — когда приходит символ, UDRE — когда символ из буфера данных переписан в буфер отправки, UTXC – возникает когда контроллер передал последний символ); прерывание от встроенного компаратора ( ACI и OC 1 A ); прерывание для захвата значения таймера ( ICP ).

Читайте также:
Vba excel как запустить программу

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

В зависимости от того какие прерывания задействованы в программе активными будут только кнопки отвечающие за эти прерывания.

В программе, которую взял для примера задействовано внешнее прерывание кнопкой на INT 1. А вот почему активным стоит еще и прерывание от Timer 0 — OVF 0? Дело в том, что Timer 0 и его прерывание используется при работе инфракрасного датчика TSOP для организации стандарта RC 5, чтобы ловить сигнал и генерировать необходимые тайминги.

Запустим симуляцию программы, нажимаем « Run program » или F 5 и вызовем прерывание INT 1, симитировав нажатие кнопки:

симулятор Bascom-AVR

Перейдем во вкладку Variables и посмотрим значение переменной и портов вывода:

симулятор Bascom-AVR

Переменная Flag увеличилась и стала равна 1. На ноге PortD .4 появилась единичка (теперь пока переменная не обнулится единичка так и будет на этой ноге). На ноге PortB .7 также появился высокий уровень. Снова переходим во вкладку Interrupts и жмем кнопку прерывания INT 1, смотрим как изменилась переменная и состояния портов:

симулятор Bascom-AVR

Значение переменной Flag увеличилось на 1, единичка на PortB сдвинулась вправо, а на ноге PortD .4 так и осталась единица. Двигаемся дальше а именно, жмем кнопку прерывания INT 1 еще 5 раз пока переменная не примет значения 7:

симулятор Bascom-AVR

На PortB единица сдвинулась до первого бита, а на ноге PortD .4 по-прежнему осталась единица. Все четко как и задумывалось. Теперь по сценарию финальный штрих: жмем кнопку прерывания еще один раз: переменная Flag обнулится, на портах PortB и PortD также будут нули:

Симулятор Bascom-AVR

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

Помимо этого Bascom способен засимулировать работу с алфавитно-цифровым жк-дисплеем, аналого-цифровым преобразователем, матрицей светодиодов, внутренним компаратором, матричной 4х4 клавиатурой и даже со сторожевым псом. Очень даже неплохо для бесплатной версии компилятора.

Источник: avrproject.ru

Bascom — язык для микроконтроллеров ATMEL. Самый легкий вход в программисты.

Расскажу, как самому быстро написать простейший код для микроконтроллера. Зачем это надо? У каждого бывает случай, когда нужно сделать работающее устройство с простейшим алгоритмом. Есть вариант: использовать логику и нагромоздить кучу микросхем. Наш способ попроще: один микроконтроллер и прошитый код.

Код будем писать на Basic, адаптированном под микроконтроллеры, он хорош своей наглядностью. Можно, конечно, начать с C, но это если Вы планируете зарабатывать на этом. Вариант с Arduino тоже хорош, однако C-подобный язык и зависимость от чужих скетчей ограничивают полёт творческой фантазии.
Ниже опишу самый легкий вход в программирование микроконтроллеров.

Читайте также:
Программа для того чтобы набрать вес

Для старта необходимы три вещи:
1. Интегрированная среда разработки Bascom-AVR;
2. Плата для опытов с любым микроконтроллером;
3. Программатор USBASP.

По первому пункту: скачиваем с официального сайта Freeware версию (бесплатная с ограничением на код 4 кБ). После установки оставляем всё по умолчанию, кроме выбора программатора. Заходим в Options/Programmer, выбираем USBASP и жмем ОК.

По второму пункту: выбираем самый простой модуль MiniTiny с ATTiny13 на борту. Здесь имеется разъем для подключения программатора, кнопка и светодиод. Такой минимальный набор для начала. Имеются два джампера, при отключении которых можно освободить порты для своих целей.

И, наконец, программатор USBASP, цена на который варьируется от 150 р. на Али или в ближайшем радиомагазине. Драйвера к нему в зависимости от операционной системы скачиваем в сети и устанавливаем.

Теперь, когда всё есть, можем написать код первой программы «Hello Word»:

$regfile = «attiny13.dat» ‘
$hwstack = 32
$swstack = 8 ‘
$framesize = 16
$crystal = 9600000

Первые пять строчек для настройки среды разработки под наш микроконтроллер. Здесь ничего не меняем, оставляем всё как есть.
Далее инициализируем порт, на котором у нас висит светодиод. На плате МиниТини это Пин 3 или Portb.4.

Config Portb.4 = Output : Led Alias Portb.4 : Led=0

Настраиваем наш пин на выход, даём ему имя Led. Потенциал на выводе приравниваем к нулю (светодиод не горит).

Запускаем бесконечный цикл Do/Loop.

toggle led
Wait 1
Loop

Оператор «toggle» меняет состояние пина, к которому подключен светодиод; оператор Wait 1 создает задержку в работе программы на одну секунду.

После этого компилируем готовую программу. Вот ее полный текст:

$regfile = «attiny13.dat»
$hwstack = 32
$swstack = 8
$framesize = 16
$crystal = 9600000
Config Portb.4 = Output : Led Alias Portb.4 : Led=0
Begin:
Do
toggle led
Wait 1
Loop

Для компиляции нажимаем F7. Если нет ошибок, подключаем модуль МиниТини к программатору, а программатор, в свою очередь, к USB порту компьютера.

Открываем окно программирования (F4) и нажимаем кнопку «Erase and program chip».

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

Я учился по книжке «Учебник Bascom AVR» где все описано доступно и подробно.

Источник: www.drive2.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru