8 битный AVR микроконтроллер с 2 КБ программируемой в системе Flash памяти
Характеристики:
- AVR RISC архитектура
- AVR — высококачественная и низкопотребляющая RISC архитектура
120 команд, большинство которых выполняется за один тактовый цикл
32 8 битных рабочих регистра общего применения
Полностью статическая архитектура - ОЗУ и энергонезависимая память программ и данных
2 КБ самопрограммируемой в системе Flash памяти программы, способной выдержать 10 000 циклов записи/стирания
128 Байт программируемой в системе EEPROM памяти данных, способной выдержать 100 000 циклов записи/стирания
128 Байт встроенной SRAM памяти (статическое ОЗУ)
Программируемая защита от считывания Flash памяти программы и EEPROM памяти данных - Характеристики периферии
Один 8- разрядный таймер/счетчик с отдельным предделителем
Один 16-разрядный таймер/счетчик с отдельным предделителем, схемой сравнения, схемой захвата и двумя каналами ШИМ
Встроенный аналоговый компаратор
Программируемый сторожевой таймер со встроенным генератором
USI — универсальный последовательный интерфейс
Полнодуплексный UART - Специальные характеристики микроконтроллера
Встроенный отладчик debugWIRE
Внутрисистемное программирование через SPI порт
Внешние и внутренние источники прерывания
Режимы пониженного потребления Idle, Power-down и Standby
Усовершенствованная схема формирования сброса при включении
Программируемая схема обнаружения кратковременных пропаданий питания
Встроенный откалиброванный генератор - Порты ввода — вывода и корпусное исполнение
18 программируемых линий ввода — вывода
20 выводной PDIP, 20 выводной SOIC и 32 контактный MLF корпуса - Диапазон напряжения питания
от 1.8 до 5.5 В - Рабочая частота
0 — 16 МГц - Потребление
Активный режим:
300 мкА при частоте 1 МГц и напряжении питания 1.8 В
20 мкА при частоте 32 кГц и напряжении питания 1.8 В
Режим пониженного потребления
0.5 мкА при напряжении питания 1.8 В
Блок- схема ATtiny2313:
Общее описание:
ATtiny2313 — низкопотребляющий 8 битный КМОП микроконтроллер с AVR RISC архитектурой. Выполняя команды за один цикл, ATtiny2313 достигает производительности 1 MIPS при частоте задающего генератора 1 МГц, что позволяет разработчику оптимизировать отношение потребления к производительности.
AVR ядро объединяет богатую систему команд и 32 рабочих регистра общего назначения. Все 32 регистра непосредственно связаны с арифметико-логическим устройством (АЛУ), что позволяет получить доступ к двум независимым регистрам при выполнении одной команды. В результате эта архитектура позволяет обеспечить в десятки раз большую производительность, чем стандартная CISC архитектура.
ATtiny2313 имеет следующие характеристики: 2 КБ программируемой в системе Flash память программы, 128 байтную EEPROM память данных, 128 байтное SRAM (статическое ОЗУ), 18 линий ввода — вывода общего применения, 32 рабочих регистра общего назначения, однопроводный интерфейс для встроенного отладчика, два гибких таймера/счетчика со схемами сравнения, внутренние и внешние источники прерывания, последовательный программируемый USART, универсальный последовательный интерфейс с детектором стартового условия, программируемый сторожевой таймер со встроенным генератором и три программно инициализируемых режима пониженного потребления. В режиме Idle останавливается ядро, но ОЗУ, таймеры/счетчики и система прерываний продолжают функционировать. В режиме Power-down регистры сохраняют свое значение, но генератор останавливается, блокируя все функции прибора до следующего прерывания или аппаратного сброса. В Standby режиме задающий генератор работает, в то время как остальная часть прибора бездействует. Это позволяет очень быстро запустить микропроцессор, сохраняя при этом в режиме бездействия мощность.
Прибор изготовлен по высокоплотной энергонезависимой технологии изготовления памяти компании Atmel. Встроенная ISP Flash позволяет перепрограммировать память программы в системе через последовательный SPI интерфейс или обычным программатором энергонезависимой памяти. Объединив в одном кристалле 8- битное RISC ядро с самопрограммирующейся в системе Flash памятью, ATtiny2313 стал мощным микроконтроллером, который дает большую гибкость разработчика микропроцессорных систем.
Сегодня мы попробовать воспользоваться более простым микроконтроллером 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? Итак, имеем микроконтроллер 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.
Итак, у нас есть микроконтроллер 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. В появившемся окне настраивайте, как это указано на рисунке.
Теперь всё готово для программирования! Итак, этапы действий:
- Выберите из списка «AVR micro»
- Из другого списка нужно выбрать «ATtiny2313»
- Теперь загружайте файл прошивки (File -> Open Device File), выбирайте нужный файл, к примеру «rm-1_full.hex».
- Жмите кнопку «Launch program cycle». Когда программирование закончится программа скажет «Program successful»
- И в завершении нужно запрограммировать так называемые Фьюзы (fuses). Для этого жмите кнопку «Security and Configuration Bits». В появившемся окошке жмите «Read», затем выставите галочки и нажмите «Write».
ВНИМАНИЕ! В случае если вы не знаете, что значит тот или иной конфигурационный бит, тогда не трогайте его. Вот теперь наш контроллер ATtiny2313 к работе готов!
Это всё. Всего вам доброго.