Программирование ATmega


Предыдущая | Следующая

Программирование микроконтроллеров ATmega просто, если у вас настроена вся инфраструктура и на борту микрокомпьютера Raspberry Pi установлено специаль­ное программное обеспечение. Для программирования можно использовать плату Arduino IDE. Чтобы соединить Arduino IDE с Raspberry Pi и Gertboard, нужно будет сделать несколько небольших изменений: установить дополнительные пакеты и осуществить правку файлов конфигурации Arduino. Надо отметить, что эта работа была проведена Гордоном Хендерсоном (см. разд. 6.1.3).

Итак, сначала устанавливаем Arduino IDE:

sudo apt-get install arduino

Теперь загрузим и установим модифицированный пакет avrdude:

cd /tmp

wget http://project-downloads.drogon.net/gertboard/avrdude 5.10-4 armhf.deb sudo dpkg -i avrdude 5.10-4 armhf.deb sudo chmod 4755 /usr/bin/avrdude

Далее скачаем и выполним сценарий для изменения некоторых системных файлов:

cd /tmp

wget http://project-downloads.drogon.net/gertboard/setup.sh chmod +x setup.sh sudo ./setup.sh

Следующий шаг — сообщить Arduino IDE о процессоре ATmega на нашей плате Gertboard. Для этого подменяем в Arduino IDE файлы boards.txt и programmers.txt, добавив в них соответствующую информацию:

cd /tmp

wget http://project-downloads.drogon.net/gertboard/boards.txt wget http://project-downloads.drogon.net/gertboard/programmers.txt cd /usr/share/arduino/hardware/arduino sudo mv boards.txt board.txt.bak sudo mv /tmp/boards.txt .

sudo mv programmers.txt programmers.txt.bak sudo mv /tmp/programmers.txt .

Прежде чем начать программировать ATmega, следует инициализировать чип. Но сначала надо подключить Gertboard к Raspberry Pi и установить четыре перемычки от GPIO Raspberry Pi к порту программатора ATmega ISP следующим образом (рис. 6.33):

* GPIO контакт 8 ^ ISP контакт 5 (сброс);

* GPIO контакт 9 ^ ISP контакт 1 (MISO);

* GPIO контакт 10 ^ ISP контакт 4 (MOSI);

* GPIO контакт 11 ^ ISP контакт 3 (SCLK).

Теперь запустим скрипт для инициализации процессора ATmega:

avrsetup

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

На следующем шаге нужно настроить среду IDE для работы с платой Gertboard. Перейдите к настройке: Tool | Board и выберите опцию Gertboard с тем типом

микросхемы, который установлен на плате, — это могут быть ATmega168 или ATmega328, они чаще всего используются совместно с платой Gertboard (рис. 6.35).

Затем перейдите в меню Tools | Programmer и выберите Raspberry Pi GPIO (рис. 6.36). микросхемы, который установлен на плате, — это могут быть ATmega168 или ATmega328, они чаще всего используются совместно с платой Gertboard (рис. 6.35).

Затем перейдите в меню Tools | Programmer и выберите Raspberry Pi GPIO (рис. 6.36). в мире Arduino номера контактов чипов не соответствуют номерам их функций. Вместо этого есть некоторые абстрактные обозначения цифровых и аналоговых выводов, которые не зависят от номеров выводов самих физических устройств. Это позволяет коду, написанному для одного устройства Arduino, успешно работать на другом устройстве Arduino, которое может иметь чип с другой раскладкой выво­дов. В табл. 6.3 показано соответствие выводов платы Gertboard с Arduino IDE.

Теперь можно приступить к написанию скетча (программы для Arduino). Примем за основу программу Blink из примеров к Arduino IDE (File | Examples | Basics | Blink). Чтобы загрузить скетч в чип Arduino IDE, выполните команду меню File | Upload Using Programmer (рис. 6.37).

Это займет некоторое время, необходимое для компиляции и загрузки, а затем ваш скетч заработает на микроконтроллере. Чтобы наглядно увидеть работу скетча (изменение состояния на входе PB5 разъема J25 с периодичностью 1 сек.), подсоеди­ним светодиод 1 перемычкой с PB5 на BUF1, и он станет мигать.

Иногда при загрузке скетча может возникнуть ошибка (рис. 6.38). Чаще всего это происходит по двум причинам:

* загрузка осуществляется командой Upload (т. е. File | Upload), а правильно при­менить команду Upload Using Programmer (File | Upload Using Programmer);

* нет перемычки для подключения питания 3,3 В (2 верхних контакта на разъе­ме J7).

По умолчанию Gertboard использует для GPIO последовательный порт AMA0. Однако Arduino IDE не воспринимает устройство /dev/ttyAMA0 как последователь­ный порт, поэтому мы переназначим порт на устройство /dev/ttyS1:

sudo ln /dev/ttyAMA0 /dev/ttyS1

Связывание делаем постоянным:

sudo nano /etc/init.d/link serial Заносим в файл iink_seriai следующий код:

#!/bin/bash

ln -s /dev/ttyAMA0 /dev/ttyS1

И далее:

sudo chmod 755 /etc/init.d/link serial update-rc.d link serial defaults

Теперь при запуске Arduino IDE появится порт /dev/ttyS1 (рис. 6.39).

Проверяем, так ли это. Пишем небольшой скетч (листинг 6.18), загружаем его в Gertboard на ATmega, открываем монитор последовательного порта — и видим вывод данных скетча в последовательный порт (рис. 6.40).

Листинг 6.18. Скетч для вывода данных в последовательный порт

void setup()

{

Serial.begin(9600);

}

void loop()

{

Serial.print("millis="); Serial.println(millis()); delay(1000);

}