Программирование, радиоэлектроника,
саморазвитие и частичка из моей жизни здесь...

Как подключить AVR микроконтроллер к программатору

Научимся искать информацию по разным моделям AVR микроконтроллеров, разберемся c чтением PDF документов в операционной системе Linux. Узнаем как подключить микроконтроллер к программатору используя интерфейс ISP при помощи нескольких проводников.

Содержание:

  1. Несколько рекомендаций
  2. Чтение PDF документов в Linux
  3. Подключение AVR микроконтроллера к программатору
  4. Заключение

Несколько рекомендаций

Чтобы правильно подключить микросхему-микроконтроллер к программатору нужно разобраться где у него и какие выводы. Для получения исчерпывающей информации о интересующем нас микроконтроллере качаем на официальном сайте даташит (datasheet) на интересующий нас чип - Даташиты по микроконтроллерам ATMEL.

На первой страничке даташита приводится подробное описание возможностей микроконтроллера, а далее приведена распиновка микросхем под каждый из типов корпусов. Каждый даташит по AVR чипу содержит массу подробной информации на английском языке, к примеру даташит на микроконтроллер ATmega8 содержит 326 страниц!

Не знаете английского? - старайтесь понемногу изучать, без него сейчас очень трудно в современном мире радиоэлектроники и компьютерной техники, это универсальный международный язык. А пока что, если не знаете что означает какое-то слово или предложение - переведите его через сервис машинных переводов translate.google.com.

Чтение PDF документов в Linux

Как правило, все даташиты на микросхемы поставляются в формате PDF (Portable Document Format) - формат электронных документов для использования на разных платформах, разработан фирмой Adobe Systems.

Под Windows есть множество разных программ для чтения и работы с документами формата PDF. В операционной системе Linux формат PDF тоже имеет отличную программную поддержку.

Программы в Linux что умеют читать PDF:

  • Okular - универсальная и мощная программа для просмотра документов, входит в окружение рабочего стола KDE;
  • Qpdfview - простая и легковесная программа для просмотра документов в формате PDF, DjVu и PS;
  • Evince (Document Viewer) - очень быстрый и легковесный просмотрщик документов PostScript (PS), EPS, DJVU, DVI, PDF;
  • Xpdf - высокопроизводительный просмотрщик PDF-файлов.

Какую программу выбрать для просмотра PDF под Linux? - очень хорошо справляются со своими задачами программы Okular и Evince.

Если у вас установлена рабочая среда KDE то скорее всего что программа Okular уже присутствует в системе. Если Okular не установлен то исправить это можно командой:

sudo apt-get install okular okular-extra-backends

Если же у вас рабочая среда отличная от KDE - GNOME, XFCE, UNITY то более экономичным решением будет установить Evince, поскольку установка в данных средах программы Okular потребует некоторые компоненты от рабочей среды KDE.

Evince Linux

Рис. 1. Универсальный просмотрщик документов Evince под Linux - средство для листания PDF документов по микроконтроллерам.

Просмотрщик документов Evince очень хорошо открывает огромные документы и справляется иногда с такими что не под силу прочитать для Okular. Установка Evince в Linux:

sudo apt-get install evince

Думаю что у вас теперь не возникнет проблем с чтением документов в формате PDF под ОС GNU Linux .

Подключение AVR микроконтроллера к программатору

Выше было рассказано что для подключения микроконтроллера к программатору нужно соединить выводы ISP: VCC, GND, MISO, MOSI, SCK, RST. Выводы с данными названиями присутствуют у всех микроконтроллеров, так что даташит нам в помощь.

распиновка микроконтроллера ISP

Рис. 2. Распиновка микроконтроллера ATmega8 и подключение его к ISP (USB ASP).

У программатора USB ASP на коннекторе ISP предусмотрено напряжение +5В (VCC), так что для программирования чипа можно воспользоваться питанием от программатора, а вернее от USB порта к которому он подключен.

В рассмотреных раньше программаторах, что используют COM и LPT порты, нет вывода VCC, а это значит что с использованием этих программаторов на выводы GND (-) и VCC (+) микроконтроллера нужно подать напряжение питания 5В от внешнего источника.

Подключения микроконтроллера к программатору USB ASP на беспаечной макетной панели очень просто реализовать при помощи перемычек (проводники со штырьками на двух концах).

USB ASP ISP

Рис. 3. Подключение к ISP коннектору программатора USB ASP на беспаечной макетной панели.

USBASP atmega8 breadboard

Рис. 4. Программатор USBASP подключен к микроконтроллеру ATmega8 (увеличение рисунка по клику).

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

Заключение

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

В следующей статье рассмотрим программное обеспечение для работы с AVR микроконтроллерами под ОС GNU Linux, а также кратко рассмотрим разные среды для разработки и написания кода.

Начало цикла статей: Программирование AVR микроконтроллеров в Linux на языках Asembler и C.

Комментарии к публикации (2):
Annur #1Annur
30 Март 2020 09:45

Доброго времени суток. Все подключил по схеме прошивка удалась, но светодиод не светиться. Начал изучать программирование языка си, все вроде делаю правильно программатор usbasp, пишу в атмел студио, мк атмега 8A-PU, прошиваю avrdude, вот код
int main(void)
{
DDRC = 0b0000001;
while (1)
{
PORTC = 0b0000001;
}
}
нет на ножке 5 вольт, мультиметр показывает 0,12 вольт.

0
ph0en1x #2ph0en1x
30 Март 2020 14:24

Здравствуйте.

Скомпилировал ваш простой пример в Линукс и в AVR Studio. Внимательно ознакомьтесь, возможно увидите какой-то упущенный момент.

Проверка связки "микроконтроллер - программатор USBASP":

avrdude -c usbasp -p m8 -P usb

Пример вывода в консоль данных из программы avrdude при успешной связке:

avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s
avrdude: Device signature = 0x1e9307 (probably m8)
avrdude: safemode: Fuses OK (E:FF, H:D9, L:E1)
avrdude done.  Thank you.

Код программы, которая должна установить в "1" самый младший (0-й) бит в регистре порта DDRC:

#include <avr/io.h> 

int main(void)
{
    DDRC = 0b0000001;
    while (1)
    {
     PORTC = 0b0000001;
    }
}

Изменив нулевой бит в регистре порта DDRC на "1" мы тем самым установим высокий уровень на соответствующем этому порту и биту выводе микроконтроллера - ножке под номером 23 у микросхемы ATmega8.

Поместим программный код на языке Си в файл test.c и сохраним его.

Команды в Linux для компиляции кода программы, получения HEX-файла и его прошивки в микроконтроллер:

avr-gcc -mmcu=atmega8 -Os test.c -o test.o
avr-objcopy -j .text -j .data -O ihex test.o test.hex
avrdude -c usbasp -p m8 -P usb -U flash:w:test.hex

Вот вывод последней команды:

avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e9307 (probably m8)
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: reading input file "test.hex"
avrdude: input file test.hex auto detected as Intel Hex
avrdude: writing flash (68 bytes):

Writing | ################################################## | 100% 0.09s

avrdude: 68 bytes of flash written
avrdude: verifying flash memory against test.hex:
avrdude: load data flash data from input file test.hex:
avrdude: input file test.hex auto detected as Intel Hex
avrdude: input file test.hex contains 68 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 0.06s

avrdude: verifying ...
avrdude: 68 bytes of flash verified

avrdude: safemode: Fuses OK (E:FF, H:D9, L:E1)

avrdude done.  Thank you.

После прошивки светодиод, подключенный к пину ATmega8 с номером 23, сразу же засветился.

Узнаем контрольную сумму файла (по алгоритму MD5), делаем это командой (для Linux):

md5sum test.hex

Вывод в этом случае для данного файла:

5131bc77cfb4fc93c77bd0ed61f6f192  test.hex

Эта строчка из символов  - это уникальный отпечаток содержимого файла test.hex, если в этом файле изменить хоть один бит, и пересчитать сумму командой "md5sum", то строчка будет иметь полностью отличающийся вид.

Эту методику я использую для сравнения полученных HEX-файлов одной и той же программы на Си, собранных из консоли в Linux и из программы AVR Studio под MS Windows.

Перед следующим экспериментом я на всякий случай прошил в микроконтроллер другой код, где PORTC не задействован.

Теперь попробуем скомпилировать ту же самую программу и получить HEX-файл в AVR Studio (у меня английская, 4-я версия) , по пунктам, для чипа Atmega8:

  1. New Project;
  2. Project Type = AVR GCC, Project name = test;
  3. Нажимаем NEXT;
  4. Select debug platform and device: Debug platform = AVR Simulator, Device = Atmega8;
  5. Нажимаем Finish;
  6. Откроется окно с открытым для редактирования кода файлом test.c - вставляем туда код программы;
  7. Компилируем программу - нажимаем комбинацию клавиш ALT+F7 или в меню Build - Compile;
  8. Теперь в папке проекта (там где лежит файл test.c, в подпапке default) появился файл test.o;
  9. Для получения HEX-файла нажимаем клавишу F7 или в меню Build - Build;
  10. В папке проекта появился файл test.hex.

Перенеся файл test.hex в Linux, с помощью команды "md5sum test.hex" я получил точно такую же контрольную сумму - это означает что файлы полностью идентичны. И это не удивительно, ведь компиляторы что в консоли Линукс, что в AVR Studio используются одинаковые - AVR GCC.

Прошиваем файл test.hex в микроконтроллер:

avrdude -c usbasp -p m8 -P usb -U flash:w:test.hex

Светодиод снова зажегся.

Почему может не работать эта простейшая программа, собранная для микроконтроллера в AVR Studio и прошитая с помощью AVRdude:

  • При создании проекта в AVR Studio забыли выбрать тип микроконтроллера (на основе выбранного типа программа устанавливает значения констант, специфичные для каждой модели МК);
  • При компиляции и сборке программы возникли какие-то ошибки или замечания, которых вы не заметили;
  • Светодиод ошибочно подключен не к тому выводу микросхемы;
  • Если светодиод включен без гасящего резистора, то есть вероятность что подгорел силовой ключ порта PORTC внутри микроконтроллера.
0