Attiny2313 подключение. Микроконтроллер Attiny2313

AVR RISC архитектура:

RISC (Reduced Instruction Set Computer). Данная архитектура обладает большим набором инструкций, основное количество которых исполняются в 1 машинный цикл. Из этого следует, что по сравнению с предшествующими микроконтроллерами на базе CISC архитектуры (например, MCS51), у микроконтроллеров на RISC быстродействие в 12 раз быстрее.

Или если взять за базу определенный уровень быстродействия, то для выполнения данного условия микроконтроллерам на базе RISC (Attiny2313) необходима в 12 раз меньше тактовая частота генератора, что приводит к значительному снижению энергопотребления. В связи с этим возникает возможность конструирование различных устройств на Attiny2313, с использованием батарейного питания.

Оперативно — Запоминающее Устройство (ОЗУ) и энергонезависимая память данных и программ:

  • 2 кБ самостоятельно программируемой в режиме Flash памяти программы, которая может обеспечить 10 000 повторов записи/стирания.
  • 128 Байт записываемой в режиме EEPROM памяти данных, которая может обеспечить 100 000 повторов записи/стирания.
  • 128 Байт SRAM памяти (постоянное ОЗУ).
  • Имеется возможность использовать функцию по защите данных программного кода и EEPROM.

Свойства периферии:

  1. Микроконтроллер Attiny2313 снабжен восьми разрядным таймер-счетчиком с отдельно устанавливаемым предделителем с максимальным коэффициентом 256.
  2. Так же имеется шестнадцати разрядный таймер-счетчик с раздельным предделителем, схемой захвата и сравнения. Тактироваться таймер – счетчик может как от внешнего источника сигнала, так и от внутреннего.
  3. Два канала. Существует режим работы быстрый ШИМ-модуляции и ШИМ с фазовой коррекцией.
  4. Внутренний аналоговый компаратор.
  5. Сторожевой таймер (программируемый) с внутренним генератором.
  6. Последовательный универсальный интерфейс (USI).

Особые технические показатели Attiny2313:


  • Idle — Режим холостого хода. В данном случае прекращает свою работу только центральный процессор. Idle не оказывает влияние на работу SPI, аналоговый компаратор, аналого-цифровой преобразователь, таймер-счетчик, сторожевой таймер и систему прерывания. Фактически, происходит только остановка синхронизация ядра центрального процессора и флэш-памяти. Возврат в нормальный режим работы микроконтроллера Attiny2313 из режима Idle происходит по внешнему либо внутреннему прерыванию.
  • Power-down — Наиболее экономный режим, при котором микроконтроллер Attiny2313 фактически отключается от энергопотребления. В этом состоянии происходит остановка тактового генератора, выключается вся периферия. Активным остается лишь модуль обработки прерываний от внешнего источника. При обнаружении прерывания микроконтроллер Attiny2313 выходит из Power-down и возвращается в нормальный режим работы.
  • Standby – в этот дежурный режим энергопотребления микроконтроллер переходит по команде SLEE. Это аналогично выключению, с той лишь разницей, что тактовый генератор продолжает свою работу.

Порты ввода — вывода микроконтроллера Attiny2313:

Микроконтроллер наделен 18 выводами ввода – вывода, которые можно запрограммировать исходя из потребностей, возникающих при проектировании конкретного устройства. Выходные буферы данных портов выдерживают относительно высокую нагрузку.

  • Port A (PA2 — PA0) – 3 бита. Двунаправленный порт ввода-вывода с программируемыми подтягивающими резисторами.
  • Port B (PB7 — PB0) – 8 бит. Двунаправленный порт ввода-вывода с программируемыми подтягивающими резисторами.
  • Port D (PD6 — PD0) – 7 бит. Двунаправленный порт ввода-вывода с программируемыми подтягивающими резисторами.

Диапазон питающего напряжения:

Микроконтроллер успешно работает при напряжении питания от 1,8 до 5,5 вольт. Ток потребления зависит от режима работы контроллера:

Активный режим:

  • 20 мкА при тактовой частоте 32 кГц и напряжении питания 1,8 вольт.
  • 300 мкА при тактовой частоте 1 МГц и напряжении питания 1,8 вольт.

Режим энергосбережения:

  • 0,5 мкА при напряжении питания 1,8 вольт.

(3,6 Mb, скачано: 5 958)

Сегодня мы попробовать воспользоваться более простым микроконтроллером ATtiny2313 и подключить к нему символьный дисплей LCD, содержащий две строки по 16 символов.

Дисплей мы будем подключать стандартным способом 4-битным способом.

Сначала начнём, конечно, с микроконтроллера, так как с дисплеем мы уже очень хорошо знакомы из предыдущих уроков.

Откроем даташит контроллера ATtiny2313 и посмотрим его распиновку

Мы видим, что данный контроллер существует в двух видах корпусов, но так как мне в руки он попал в корпусе DIP, то будем мы рассматривать именно эту версию корпуса, да и в принципе, они и не различаются особо, кроме чем по виду, так как количество ножек одинаково — по 20.

Так как ножек 20 по сравнению с 28 ножками контроллера ATMega8, к которым мы уже на протяжении всего времени занимаемся и ещё будем заниматься, то, соответственно, и возможностей также будет меньше.

В принципе, всё, что было у ATmega8, здесь есть, единственное то, что поменьше лапок портов. Но так как задача перед нами стоит попробовать соединить его по шине SPI с другим контроллеров, то нас это удручает не сильно.

Есть ещё некоторые отличия, но они незначительны и мы с ними познакомимся по мере необходимости.

Соберём вот такую вот схемку (нажмите на картинку для увеличения изображения)

Дисплей подключен к ножкам порта D. PD1 и PD2 — к управляющим входам, а остальные к ножкам модуля дисплея D4-D7.

Проект создадим с именем TINY2313_LCD, перенесём в него всё кроме главного модуля из проекта по подключению дисплея к Atmega8.

Конечно, некоторые вещи надо будет переделать. Для этого нужно внимательно изучить, к какой ножке что подключено. Шина E дисплея подключена к PD2, а шина RS — к PD1, поэтому внесём изменения в файл lcd.h

#define e1 PORTD |=0b000001 00 // установка линии E в 1

#define e0 PORTD &=0b111110 11 // установка линии E в 0

#define rs1 PORTD |=0b0000001 0 // установка линии RS в 1 (данные)

#define rs0 PORTD &=0b1111110 1 // установка линии RS в 0 (команда)

Как мы видим из выделения жирным шрифтом, не такие уж и кардинальные изменения у нас произошли.

Теперь информационные входы. Здесь у нас используются ножки PD3-PD6, то есть на 1 пункт сдвинуты по сравнению с подключением к Atmega8, поэтому исправим ещё и кое что в файле lcd.c в функии sendhalfbyte

PORTD &=0b1 0000 111; //стираем информацию на входах DB4-DB7, остальное не трогаем

Но это ещё не всё. Мы раньше передаваемые данные сдвигали на 4, а теперь нам в связи с вышеуказанными изменениями придётся их сдвигать только на 3. Поэтому в той же функции исправим ещё и самую первую строку

c <<=3 ;

Вот и все изменения. Согласитесь, не так уж они и велики! Это достигнуто тем, что мы всегда стараемся код писать универсальный и пользоваться именно макроподставновки. Если бы мы в своё время не потратили на это время, то нам пришлось бы исправлять код почти во всех функциях нашей библиотеки.

В главном модуле инициализацию порта D мы не трогаем, пусть весь встаёт в состояние выхода, как и в уроке 12.

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

У нас всё прекрасно работает! Вот как можно, оказывается быстро переделать проект для одного контроллера под другой.

Протеус — это очень хорошо, но на настоящие детальки посмотреть всегда приятнее. Схема вся была собрана на макетной плате, так как отладочной платы для данного контроллера я не делал и не собирал. Программатор мы подключим через стандартный разъём вот такой вот

Вот вся схема

Здесь всё стандартно. Подтягивающий резистор на RESET и т.д.

Теперь, прежде чем прошивать контроллер в avrdude, нам неоходимо выбрать контроллер и считать его флеш-память

Затем зайти во вкладки FUSES и установить правильно фьюзы. Так как у нас нет кварцевого резонатора, то мы устанавливаем фьюзы именно так

Итак, у нас есть микроконтроллер ATtiny2313, LPT порт (обязательно нужен железный, никакие USB-2-LPT не работают), несколько проводов (длиной не больше 10 см) и разумеется паяльник. Лучше, чтобы был разъём DB - 25M (папа), с его помощью будет гораздо удобней подсоединять микроконтроллер, но можете обойтись и без него. Припаиваете провода к выводам 1, 10, 17, 18, 19, 20 вашего микроконтроллера. Получится что то вроде этого, как на фотографии:

Затем, в случае если имеется разъём DB-25M, то припаяйте провода к нему в соответствии с таблицей, которая показана ниже. А если отсутствует, тогда просто втыкайте провода в разъём на компе.

Здесь делали без разъёма (просто под рукой были лишь только мамы), и вот что из этого вышло:

Здесь LPT порт был вынесен на стол при помощи кабеля длиной в 1.5 м. Кабель обязательно должен быть экранированный, в противном случае будут наводки, помехи и тогда ничего не выйдет. Схема данного устройства программирования микроконтроллера выглядит вот так:

Лучше конечно сделать «правильный» программатор, поскольку так будет проще и порт целее. В данном случае использовался STK200/300. Затем нужна программа PonyProg2000. После того, как программа запустится она «заржёт» прям как настоящий пони:). Для того, чтобы этот звук впредь не напрягал ваши уши нужно в появившемся окне поставить галочку «Disable sound». Нажмите «ОК». Выскочит окно, которое говорит о том, что необходимо откалибровать программу. Компьютеры же бывают разные, и медленные, и быстрые. Нажмите «ОК». Выскочит ещё одно окно, оно говорит, что необходимо произвести настройку интерфейса (какой программатор и куда подключён). Итак, теперь заходите в меню: Setup -> Calibration. В появившемся окне:

Жмите «YES». Пройдёт пара секунд и программа скажет «Calibration OK». Потом заходите в меню: Setup -> Interface Setup. В появившемся окне настраивайте, как это указано на рисунке.

Теперь заходите в меню: Command -> Program Options. В появившемся окне настраивайте, как это указано на рисунке.

Теперь всё готово для программирования! Итак, этапы действий:

  1. Выберите из списка «AVR micro»
  2. Из другого списка нужно выбрать «ATtiny2313»
  3. Теперь загружайте файл прошивки (File -> Open Device File), выбирайте нужный файл, к примеру «rm-1_full.hex».
  4. Жмите кнопку «Launch program cycle». Когда программирование закончится программа скажет «Program successful»
  5. И в завершении нужно запрограммировать так называемые Фьюзы (fuses). Для этого жмите кнопку «Security and Configuration Bits». В появившемся окошке жмите «Read», затем выставите галочки и нажмите «Write».

    ВНИМАНИЕ! В случае если вы не знаете, что значит тот или иной конфигурационный бит, тогда не трогайте его. Вот теперь наш контроллер ATtiny2313 к работе готов!

    Это всё. Всего вам доброго.

Как производится программирование микроконтроллеров ATtiny2313? Итак, имеем микроконтроллер ATtiny2313, LPT порт (обязательно железный - никакие USB-2-LPT не работают), несколько проводков (длина не более 10см) и конечно же паяльник. Желательно иметь разъём DB-25M (папа), с ним будет удобней подключать микроконтроллер, но можно обойтись и без него. Припаиваем проводки к выводам 1, 10, 17, 18, 19, 20 микроконтроллера. Получаем нечто вроде того, что на фото:


Я делал без разъёма (в наличии были только мамы...), и вот что получилось:


Правда у меня LPT порт вынесен на стол с помощью кабеля длиной 1,5 метра. Но при этом кабель должен быть экранированный, иначе будут наводки, помехи и ничего не получится. Схема этого устройства программирования микроконтроллера вот такая:


Если быть совсем честным, то желательно собрать "правильный" программатор. И потом будет проще и порт целее. Я пользую STK200/300. Далее используем программу PonyProg2000. После запуска программы она "заржет...." как настоящий пони. Чтобы этого больше не слышать в появившемся окне ставим галочку "Disable sound". Жмём "ОК". Выскакивает окошко которое говорит, что нужно откалибровать программу. Компы бывают же разные и медленные и шустрые. Жмём "ОК". Выскакивает ещё одно окошко - это нам говорит, что нужно настроить интерфейс (какой программатор и куда подключен.). Итак заходим в меню: Setup -> Calibration. В появившемся окне:


Жмём "YES". Проходит пара секунд и программа говорит "Calibration OK". Далее заходим в меню: Setup -> Interface Setup. В появившемся окошке настраиваем как у показано на рисунке.


Теперь заходим в меню: Command -> Program Options. В появившемся окошке настраиваем как показано на рисунке.


Всё готово к программированию!... Итак, последовательность действий:


1. Выбираем из списка "AVR micro"
2. Из другого списка выбираем "ATtiny2313"
3. Загружаем файл прошивки (File -> Open Device File), выбираем нужный файл, например "rm-1_full.hex".
4. Жмём кнопочку "Launch program cycle". Когда программирование завершится прога скажет "Program successful"
5. Ну и напоследок надо запрограммировать так называемые Фьюзы (fuses). Для этого жмём кнопочку "Security and Configuration Bits". В появившемся окне жмём "Read", потом выставляем галочки и жмём "Write".

ВНИМАНИЕ! Если Вы не знаете, что означает тот или иной конфигурационный бит, то не трогайте его. Вот теперь у нас готовый к работе контроллер ATtiny2313! На форуме можно скачать программу PonyProg2000 и оригинал статьи с дополнительными рисунками. Материал для сайта Радиосхемы предоставил Ansel73.

Принципиальная схема программатора на LPT порт показана на рисунке. В качестве шинного формирователя используйте микросхему 74AC 244 или 74HC244 (К1564АП5), 74LS244 (К555АП5) либо 74ALS244 (К1533АП5).

Светодиод VD1 индицирует режим записи микроконтроллера,

светодиод VD2 - чтения,

светодиод VD3 - наличие питания схемы.

Напряжение, необходимое для питания схема берёт с разъёма ISP, т.е. от программируемого устройства. Эта схема является переработанной схемой программатора STK200/300 (добавлены светодиоды для удобства работы), поэтому она совместима со всеми программами программаторов на PC, работающих со схемой STK200/300. Для работы с этим программатором используйтепрограмму CVAVR

Программатор можно выполнить на печатной плате и поместить её в корпус разъёма LPT, как показано на рисунках:




Для работы с программатором удобно использовать удлинитель LPT порта, который несложно изготовить самому (к примеру, из кабеля Centronix для принтера), главное "не жалеть" проводников для земли (18-25 ноги разъёма) или купить. Кабель между программатором и программируемой микросхемой не должен превышать 20-30 см.