Ну не нравится мне этот ваш Wiring. А еще он почему-то у меня очень ме-е-едленно компилирует, а потом долго думает перед прошивкой.
Я постараюсь рассказать об альтернативной среде для программирования AVR-контроллеров, которая совмещает в себе редактор кода, компилятор, и отладчик-симулятор. К тому же, в последих версиях среда без лишних телодвижений может использоваться с загрузчиком Arduino(т.е. без переделки платы, перепрошивки загрузчика и т.д.)
![](https://habrastorage.org/r/w780q1/storage2/f33/2ad/a97/f332ada97de9dec2f46f29ed87adcc2d.jpg)
Установка
Идем на Офсайт, или просто переходим по второй ссылке в конце топика — сразу начнет загружаться демо-версия среды(30Мб). Демо всего лишь означает, что она позволит собирать проекты, чей вес в скомпилированном виде не превышает 4Кб. Для большинства проектов этого хватает(ага, особенно для Attiny2313), а если нет — кряк для последний версии на рутрекере придется купить, благо он стоит не очень дорого — 89 евро.
Установка совершенно обычная, если у кого-то не запускается в Win7 и выше — установите режим совместимости с XP. Под вайном работает совершенно нормально. Собственно, можно и не устанавливать — просто скопировать папку, вполне себе portable-версия.
Использование
Основное окно:
![](https://habrastorage.org/r/w780q1/storage2/654/630/58a/65463058a618688cbe6de50683a65289.jpg)
Все кнопки снабжены подсказками, и думаю нет нужны пояснять что и где находится.
В последних версиях ее очень пристойно перевели на русский язык, который можно включить в Options — Environment — IDE — Language — Russian.
Вот у меня завалялась копия платы Arduino Nano, которую я долгое время использовал при отладке, прошивая напрямую, через разъем программатора, из-за нелюбви к Arduino IDE.
![](https://habrastorage.org/r/w1560/storage2/f72/ac4/421/f72ac4421179afb2c76cd58a578db6ca.png)
Попробуем что-нибудь написать для нее. Для начала необходимо установить тип МК — Atmega168, делается это вот такой строкой:
Почему строка такая, думая понятно. Конечно, установить тип контроллера можно и в Настройки — Компилятор — МК, но в тексте удобнее. Посмотреть как называются файлы для разных контроллеров можно в папке с программой(c:\Program Files\MCS Electronics\BASCOM-AVR\*.dat).
Устанавливаем тактовую частоту:
16МГц. Ни на что не влияет, кроме отсчета временных промежутков(waitms). Не устанавливает частоту для контроллера. Ее вы по прежнему должны выставлять сами, программирую Fuse-блок. Впрочем, для Arduino этим можно и не заморачиваться.
Конфигурируем порты:
Никаких номерных пинов, только хардкор. Смотрим в даташит конкретному контроллеру, и видим имена портов:
![image](https://habrastorage.org/getpro/geektimes/post_images/9f2/92c/5b6/9f292c5b6626539ea2c9ede1fa75cc14.gif)
PD1 = portd.1, pb4 = portb.4
Можно и устанавливать каждый порт по отдельности, а просто написать: Config Portb = Output
Запускаем безусловный цикл(можно и без него, тогда программа выполнится только один раз при запуске контроллера)
И внутри него, например, моргаем светодиодом:
Portb.5 это тоже самое что pin 13 в ардуине. Соответствия(если вы привыкли к такому наименованию портов) можно посмотреть здесь:
![image](https://habrastorage.org/r/w1560/getpro/geektimes/post_images/36b/159/da5/36b159da57b542bdda427e610acc80e7.png)
Синтаксис очень простой и напоминает basic. 7 типов переменных: Bit, Byte, Integer, Word, Long, Single, String.
Которые обьявляются в начале программы вот так: Dim A as Single
Очень простое подключение к экранам на контроллере HD44780:
И такой же простой вывод на них текста:
Но несмотря на простоту, есть управление курсором, встроенный редактор символов, поддержка кириллицы.
Простая генерация звука:
Что означает, выдать на PB0 меандр частотой 500гц и длительностью 100мс.
Генерация тонов DTMF:
15-й тон в течении 100мс.
Работа с UART(как с железным, так и программным):
Работа с прерываниями:
С таймерами:
Прошивка Arduino
В последней версии разработчики добавили поддержку загрузчика Ардуины, и нам необходимо только сделать несколько настроек.
Options — Programmer — ARDUINO. После чего указать com-порт, и скорость.
![](https://habrastorage.org/r/w780q1/storage2/eab/2c9/4a1/eab2c94a1f9cef363ca92540f184161f.jpg)
В моем случае скорость надо было обязательно указать именно 19200, иначе плата не прошивалась. Посмотреть параметры всех плат можно в файле по адресу arduino-1.0.1\hardware\arduino\boards.txt
Кстати, там же есть и размер памяти, и частота кристалла:
Альтернативный способ загрузки(мне не нравится встроенный прошивальщик своей медлительностью) — с помощью AVRDUDE, мощнейшего консольного программатора.
Скачиваем последнюю версию вот отсюда , например avrdude-5.11.tar.gz. Распаковываем в папку с программой.
Идем в Options — Programmer — External Programmer, и указываем в после Programm путь до исполняемого файла:
«C:\Program Files\MCS Electronics\BASCOM-AVR\ARVDUDE\avrdude.exe»
А в после ниже — параметры в таком виде:
-C «C:\Program Files\MCS Electronics\BASCOM-AVR\ARVDUDE\avrdude.conf» -p atmega168 -P com2 -c arduino -b 19200 -U flash:w:{FILE}:i
Все понятно из названий, показываем где лежит конфиг, указываем тип контроллера, порт, протокол, скорость, работа с флешем, запись, и файл. Ставим галочку Use HEX file.
Для пущей радости можно отметить и пункт Program after compile — чтоб скомпилировать и прошить одной кнопкой.
При сборке показывается потребление программой доступного флеша:
![](https://habrastorage.org/r/w780q1/storage2/a55/79d/5b1/a5579d5b12f98d025012c87ffcb073fd.jpg)
А потом запускается ARVDUDE:
![](https://habrastorage.org/r/w780q1/storage2/4c4/fc9/dc7/4c4fc9dc72ba19aeb359c47d06221e10.jpg)
Еще сбоку можно включить справку по пинам выбранного контроллера(есть по умолчанию, а если нет, то включается View — Pin Layout):
![](https://habrastorage.org/r/w780q1/storage2/a62/c59/405/a62c5940570f8f8a54e54b53d07acaef.jpg)
При наведении курсора на пин, показывает его имя и описание.
Если этого недостаточно, то можно скачать даташит и включить View — PDF Viewer:
![](https://habrastorage.org/r/w780q1/storage2/d91/43e/c56/d9143ec56cfce5b23f260cd74ef3080a.jpg)
Еще одна классная вещь — встроенный отладчик с симуляцией железа, бреак-поинтами и пошаговым выполнением.
![](https://habrastorage.org/r/w780q1/storage2/743/be0/a16/743be0a163d6758c7fce36053afcfd20.jpg)
Включается нажатием на кнопку с красной микросхемой, конечно, предварительно надо скомпилировать программу.
А на сладкое — код, компилируемый в bascom значительно меньше по размеру и выполняется часто быстрее, чем код от Arduino IDE.
Например, стандартный blink(мигание светодиодом):
Для Arduino:
Компилируется в hex размером 3078(!!!) байт, и дергает пин с частотой 210кГц:
![](https://habrastorage.org/storage2/390/9a7/8c9/3909a78c9d51edf7506df834f7a317fc.gif)
А в Bascom, записанный вот так:
Занимает 553 байта(в пять раз меньше) hex, и мигает уже с частотой 1,6МГц:
![](https://habrastorage.org/storage2/b7f/446/ec0/b7f446ec0d5aceb1640781a06e97487f.gif)
Ссылки:
Я постараюсь рассказать об альтернативной среде для программирования AVR-контроллеров, которая совмещает в себе редактор кода, компилятор, и отладчик-симулятор. К тому же, в последих версиях среда без лишних телодвижений может использоваться с загрузчиком Arduino(т.е. без переделки платы, перепрошивки загрузчика и т.д.)
![](https://habrastorage.org/storage2/f33/2ad/a97/f332ada97de9dec2f46f29ed87adcc2d.jpg)
Установка
Идем на Офсайт, или просто переходим по второй ссылке в конце топика — сразу начнет загружаться демо-версия среды(30Мб). Демо всего лишь означает, что она позволит собирать проекты, чей вес в скомпилированном виде не превышает 4Кб. Для большинства проектов этого хватает(ага, особенно для Attiny2313), а если нет — Установка совершенно обычная, если у кого-то не запускается в Win7 и выше — установите режим совместимости с XP. Под вайном работает совершенно нормально. Собственно, можно и не устанавливать — просто скопировать папку, вполне себе portable-версия.
Использование
Основное окно:![](https://habrastorage.org/storage2/654/630/58a/65463058a618688cbe6de50683a65289.jpg)
Все кнопки снабжены подсказками, и думаю нет нужны пояснять что и где находится.
В последних версиях ее очень пристойно перевели на русский язык, который можно включить в Options — Environment — IDE — Language — Russian.
Вот у меня завалялась копия платы Arduino Nano, которую я долгое время использовал при отладке, прошивая напрямую, через разъем программатора, из-за нелюбви к Arduino IDE.
![](https://habrastorage.org/storage2/f72/ac4/421/f72ac4421179afb2c76cd58a578db6ca.png)
Попробуем что-нибудь написать для нее. Для начала необходимо установить тип МК — Atmega168, делается это вот такой строкой:
$regfile = "m168def.dat"
Почему строка такая, думая понятно. Конечно, установить тип контроллера можно и в Настройки — Компилятор — МК, но в тексте удобнее. Посмотреть как называются файлы для разных контроллеров можно в папке с программой(c:\Program Files\MCS Electronics\BASCOM-AVR\*.dat).
Устанавливаем тактовую частоту:
$crystal = 16000000
16МГц. Ни на что не влияет, кроме отсчета временных промежутков(waitms). Не устанавливает частоту для контроллера. Ее вы по прежнему должны выставлять сами, программирую Fuse-блок. Впрочем, для Arduino этим можно и не заморачиваться.
Конфигурируем порты:
Config Portb.5 = Output
Никаких номерных пинов, только хардкор. Смотрим в даташит конкретному контроллеру, и видим имена портов:
![image](https://habrastorage.org/getpro/geektimes/post_images/9f2/92c/5b6/9f292c5b6626539ea2c9ede1fa75cc14.gif)
PD1 = portd.1, pb4 = portb.4
Можно и устанавливать каждый порт по отдельности, а просто написать: Config Portb = Output
Запускаем безусловный цикл(можно и без него, тогда программа выполнится только один раз при запуске контроллера)
Do
Loop
И внутри него, например, моргаем светодиодом:
Toggle Portb.5
Portb.5 это тоже самое что pin 13 в ардуине. Соответствия(если вы привыкли к такому наименованию портов) можно посмотреть здесь:
![image](https://habrastorage.org/getpro/geektimes/post_images/36b/159/da5/36b159da57b542bdda427e610acc80e7.png)
Синтаксис очень простой и напоминает basic. 7 типов переменных: Bit, Byte, Integer, Word, Long, Single, String.
Которые обьявляются в начале программы вот так: Dim A as Single
Очень простое подключение к экранам на контроллере HD44780:
Config lcd = 16*2
Config lcdpin = PIN, DB4 = PORTB.1,DB5=PORTB.2,DB6=PORTB.3,DB7=PORTB.4,E=PORTB.5,RS=PORTB.6
Config lcdmode = PORT
И такой же простой вывод на них текста:
Lcd "Hello, habr! " ; time
Но несмотря на простоту, есть управление курсором, встроенный редактор символов, поддержка кириллицы.
Простая генерация звука:
Sound, Portb.0, 100, 500
Что означает, выдать на PB0 меандр частотой 500гц и длительностью 100мс.
Генерация тонов DTMF:
Dtmfout, 15, 100
15-й тон в течении 100мс.
Работа с UART(как с железным, так и программным):
Dim Name as String * 10
$Baud = 9600
Input "Hello, print you name", Name
Print "Name: " ; Name
Работа с прерываниями:
On Int0 Button - Имя подпрограммы
Config Int0 = Low Level - Прерывание по низкому уровню
Enable Interrupts - Включить прерывания
Enable Int0
Button:
Incr Cntr
Return
С таймерами:
Config Timer0 = Timer , Prescale = 64 - Настраиваем таймер и предделитель
On Timer0 Pulse: - Имя подпрограммы
Enable Interrupts - Включить прерывания
Enable Timer0
Pulse:
Incr Cntr
Return
Прошивка Arduino
В последней версии разработчики добавили поддержку загрузчика Ардуины, и нам необходимо только сделать несколько настроек.Options — Programmer — ARDUINO. После чего указать com-порт, и скорость.
![](https://habrastorage.org/storage2/eab/2c9/4a1/eab2c94a1f9cef363ca92540f184161f.jpg)
В моем случае скорость надо было обязательно указать именно 19200, иначе плата не прошивалась. Посмотреть параметры всех плат можно в файле по адресу arduino-1.0.1\hardware\arduino\boards.txt
Кстати, там же есть и размер памяти, и частота кристалла:
nano.name=Arduino Nano w/ ATmega168
nano.upload.maximum_size=14336
nano.upload.speed=19200
nano.bootloader.low_fuses=0xff
nano.bootloader.high_fuses=0xdd
nano.bootloader.extended_fuses=0x00
nano.build.mcu=atmega168
nano.build.f_cpu=16000000L
Альтернативный способ загрузки(мне не нравится встроенный прошивальщик своей медлительностью) — с помощью AVRDUDE, мощнейшего консольного программатора.
Скачиваем последнюю версию вот отсюда , например avrdude-5.11.tar.gz. Распаковываем в папку с программой.
Идем в Options — Programmer — External Programmer, и указываем в после Programm путь до исполняемого файла:
«C:\Program Files\MCS Electronics\BASCOM-AVR\ARVDUDE\avrdude.exe»
А в после ниже — параметры в таком виде:
-C «C:\Program Files\MCS Electronics\BASCOM-AVR\ARVDUDE\avrdude.conf» -p atmega168 -P com2 -c arduino -b 19200 -U flash:w:{FILE}:i
Все понятно из названий, показываем где лежит конфиг, указываем тип контроллера, порт, протокол, скорость, работа с флешем, запись, и файл. Ставим галочку Use HEX file.
Для пущей радости можно отметить и пункт Program after compile — чтоб скомпилировать и прошить одной кнопкой.
При сборке показывается потребление программой доступного флеша:
![](https://habrastorage.org/storage2/a55/79d/5b1/a5579d5b12f98d025012c87ffcb073fd.jpg)
А потом запускается ARVDUDE:
![](https://habrastorage.org/storage2/4c4/fc9/dc7/4c4fc9dc72ba19aeb359c47d06221e10.jpg)
Еще сбоку можно включить справку по пинам выбранного контроллера(есть по умолчанию, а если нет, то включается View — Pin Layout):
![](https://habrastorage.org/storage2/a62/c59/405/a62c5940570f8f8a54e54b53d07acaef.jpg)
При наведении курсора на пин, показывает его имя и описание.
Если этого недостаточно, то можно скачать даташит и включить View — PDF Viewer:
![](https://habrastorage.org/storage2/d91/43e/c56/d9143ec56cfce5b23f260cd74ef3080a.jpg)
Еще одна классная вещь — встроенный отладчик с симуляцией железа, бреак-поинтами и пошаговым выполнением.
![](https://habrastorage.org/storage2/743/be0/a16/743be0a163d6758c7fce36053afcfd20.jpg)
Включается нажатием на кнопку с красной микросхемой, конечно, предварительно надо скомпилировать программу.
А на сладкое — код, компилируемый в bascom значительно меньше по размеру и выполняется часто быстрее, чем код от Arduino IDE.
Например, стандартный blink(мигание светодиодом):
Для Arduino:
void setup() {
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH);
digitalWrite(13, LOW);
}
Компилируется в hex размером 3078(!!!) байт, и дергает пин с частотой 210кГц:
![](https://habrastorage.org/storage2/390/9a7/8c9/3909a78c9d51edf7506df834f7a317fc.gif)
А в Bascom, записанный вот так:
$regfile = "m168def.dat"
$crystal = 16000000
Config Portb.5 = Output
Do
Toggle Portb.5
Loop
Занимает 553 байта(в пять раз меньше) hex, и мигает уже с частотой 1,6МГц:
![](https://habrastorage.org/storage2/b7f/446/ec0/b7f446ec0d5aceb1640781a06e97487f.gif)
Ссылки:
- Офсайт
- Последняя версия Bascom-AVR
- Около 100 примеров с подробными схемами и листингами кода
- Замечательный русский учебник от WildCat(стоит перейти по ссылке даже просто ради чтения вступления)
- Еще один учебник на русском. А еще там есть учебник по microC и microPascal написанный многоуважаемой moriam, у которой нет инвайта(да, это намек)
- Русскоязычный сайт с проектами
- Активный русский форум
- Еще кучка статей, книг и проектов
- Тема обсуждения на радиокоте
- Тема обсуждения на cqham
- Не ходите сюда, и тем более ничего не читайте. Сайт «для поисковиков», на котором в примерах куча ошибок. А все для того, чтоб перепродать пару модулей.