""

Светодинамическая установка на мк attiny2313

AVR Урок 30. Подключаем дисплей 16×2 к МК ATtiny2313

Урок 30

Подключаем дисплей 16×2 к МК ATtiny2313

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Теперь, установив всё именно так, нажимаем кнопку “Программирование” и прошиваем фьюзы.

Затем возвращаемся на первую вкладку, выбираем проект и прошиваем его

Смотрим результат нашей работы

Всё работает прекрасно!

Таким образом, не прилагая особых усилий. мы переработали проект, предназначенный для одного контроллера линейки AVR, в проект для совсем другого контроллера, подготовив данный контроллер к следующему занятию по подключению его к контроллеру ATmega8 по шине SPI.

Программатор и дисплей можно приобрести здесь:

Смотреть ВИДЕОУРОК (нажмите на картинку)

Отладочную плату делаем сами. Часть 2 (Вариант с ATtiny2313).

Итак, в прошлой части статьи была описана сборка важной части нашей отладочной платы – схемы питания. Стоит сказать, что блок питания не всегда обязательно должен быть на любой отладочной или макетной плате. Если уже имеется готовый блок питания в виде готовой конструкции, то можно использовать и его. Широкое распространение получили и так называемые “лабораторные” блоки питания, имеющие одно или несколько стандартных выходных напряжений, часто регулируемых. Подобный блок питания также можно собрать самому или приобрести готовый. Тогда не потребуется каждый раз собирать схему питания для тестовых конструкций.

Продолжим собирать нашу отладочную плату. На этот раз мы установим на неё микроконтроллер, подключим несколько светодиодов и запустим на ней первую программу.
Первым делом подготовим необходимые детали:

В качестве основы возмём AVR-микроконтроллер ATtiny2313. Не смотря на свой скромный вид и название, этот микроконтроллер способен решать очень многие задачи. Можно также применить и любой другой микроконтроллер. С примером использования AVR-микроконтроллера ATmega8 на нашей отладочной плате можно ознакомиться в другом варианте этого текста по ссылке: Отладочную плату делаем сами. Часть 2 (Вариант с ATmega8).

Первым делом после выбора детали, нужно ознакомиться с расположением её выводов и основными характеристиками. Вся необходимая информация для ATtiny2313 содержится в её справочном листке. Помните, почти все выводы микроконтроллера могут иметь несколько функций. Эти функции можно выбирать при написании программы для µC. И на это следует обращать внимание уже на этапе составления принципиальной схемы. Кроме того, уже в процессе составления схемы удобно использовать условное обозначение деталей с “живой” распиновкой, то есть, при обозначении детали на схеме, чертить выводы так, как они расположены на самом деле. Тогда размещение компонентов и на схеме, и на плате будет происходить проще, понятнее и с меньшим количеством ошибок. (Почти во всех редакторах схем есть возможность нарисовать своё собственное условное обозначение детали.)

Кварцевый резонатор Q1 с конденсаторами С1 и С2 образуют источник тактового сигнала для микроконтроллера µC1. Это очень чувствительная к помехам часть схемы, поэтому проводники для нее следует выбирать минимальной длины, а к проводнику между С1, С2 и десятой ножкой µC1 (утолщённая линия на схеме) ничего больше не присоединять. Резистор R1 и конденсатор С3 образуют цепочку сброса для микроконтроллера. Резисторы R2-R5 необходимы для ограничения тока через светодиоды LED1-LED4. В цепи питания стоит блокировочный конденсатор С4. В качестве источника питания используем стабилизатор, собранный в первой части статьи. (Список всех возможных замен расположен в конце этой страницы.)

Проводники для программирования следует подключить к одноимённым проводникам программатора. Эти проводники удобно подключить к ответной части разъёма имеющегося программатора с помощью стандартной вилки для установки на плату IDC-10MS (Рис. 3). Точное расположение выводов на этой вилке необходимо обязательно сверить с имеющимся программатором!

Расположим все детали на будущей отладочной плате в соответствии со схемой. Сначала одну за другой установим детали в отверстия, откусим бокорезами или кусачками излишнюю длину выводов у элементов и запаяем. После этого можно провести соединения проводами. В той части схемы, которая не будет меняться в дальнейшем, соединения лучше производить с нижней стороны платы. Панельку (ещё говорят “кроватку”) для микроконтроллера можно запаять пустой, а потом вставить в неё микроконтроллер. При этом нужно не забывать о “ключе” панельки и самого микроконтроллера. В нашей схеме, например, соединения кварца, соединения с программатором и соединение микроконтроллера с питанием изменяться в будущем не будут. А соединения со светодиодами мы, скорее всего, будем изменять для разных экспериментов.

Проводники питания лучше всего взять какого то другого цвета: для плюсового провода можно взять красный, для минуса – синий или чёрный цвет. При разведении соединяющих проводников с обратной стороны платы не забываем о “зеркальности”!
Ровненько установить светодиоды можно следующим образом: продев небольшую полоску картона между выводами светодиодов, установить в отверстия платы, с обратной стороны отрезать лишнюю длину выводов и запаять их. После пайки ножек полоску картона можно вынуть, Рис. 6.

Перед включением ещё раз проверим правильность соединений, а самое главное – правильность подсоединения проводников питания к микроконтроллеру!
Если при подключении питания зелёный сигнальный светодиод в схеме стабилизатора светится и ничего не нагревается, значит схема собрана правильно.
Теперь можно себя поздравить, мы только что получили собранную своими руками настоящую отладочную плату!
Сразу же загрузим в микроконтроллер простейшую программу мигания светодиодами: tn2313_4leds_1.zip. После загрузки прошивки в микроконтроллер светодиоды начнут поочерёдно мигать. Время свечения и паузы будут приблизительно равны одной секунде:

Видео 1. Работа тестовой прошивки.

Читайте также:  Usb управляемая розетка

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

Возможные замены в схеме с микроконтроллером ATtiny2313 Рис. 2:

  • Кварцевый резонатор Q1 можно применить на частоту от 2 до 8 Мегагерц. Тестовая прошивка (мигание светодиодами) будет работать медленнее или быстрее.
  • Конденсаторы С1 и С2 должны быть одинаковой емкости от 18 пФ до 27 пФ.
  • Ёмкость конденсаторов С3 и С4 может быть от 0,01мкФ до 0,5 мкФ.
  • Резистор R1 может быть заменён на другой, сопротивлением от 10 до 50 кОм.
  • Токоограничительные резисторы R2-R5 могут иметь сопротивление от 680 Ом до 1 кОм.
  • Светодиоды LED1-LED4 могут быть любого цвета и размера.
  • Основной микроконтроллер может иметь следующие обозначения: ATtiny2313V-10PI, ATtiny2313V-10PU, ATtiny2313-20PI, ATtiny2313-20PU. Главное, чтобы он был в корпусе DIP или PDIP.

Дополнения:

Смелых и Удачных Экспериментов.

Переходим от AT90S2313 к Attiny2313

Микроконтроллер AT90S2313 фирмы Atmel снят с производства, поэтому найти его сейчас крайне трудно.На смену ему пришел Attiny2313, который продается на каждом углу.Тем не менее, проекты под AT90S2313 присутствуют в интернетах и старой литературе по AVR.Чтобы переделать прошивку МК под attiny нужно внести некоторые изменения в программу.В этой статье мы рассмотрим эти самые изменения, так сказать «как перетащить на более новый контроллер сферический проект в вакууме»©Lifelover.

Внешне эти микроконтроллеры отличаются только надписью с названием, выпускаются они в одинаковом корпусе, следовательно, линейные размеры у них одни и те же.

Список главных изменений, требующих корректировки в программе и схеме устройства под AT90S2313:
-Фьюзы(FUSE). — включают в себя еще ряд новых фишек, речь о них пойдет ниже.
-Новые значения рабочего напряжения МК.
-Изменены названия некоторых регистров.
-Изменен порядок работы с прерываниями.
-Изменения в работе таймеров.

Прежде всего, нам потребуется библиотека под новый МК.Как правило, во всех более-менее современных компиляторах эта библиотека уже имеется.Подключаем ее в программе в первую очередь:

или в зависимости от названия библиотеки

Теперь обо всем поподробнее.
Первое нововведение, оно же является наиболее важным + с ним нужно проявлять наибольшую осторожность — фьюзы(они нужны для управления всякими фичами МК).В AT90S2313 их было всего 2, и трогать их практически не приходилось, так как один из них отвечал за время старта МК, а второй за возможность программировать контроллер.Как видно, функции очень специфические, поэтому используются редко.
В новом МК фьюзов стало на 15 больше, спектр их действия расширился, поэтому при работе с Attiny встречи с ними уже не избежать.
В каждом программаторе есть раздел настройки FUSE. В Uniprof это кнопка FUSE вверху:

Нажав на нее, мы увидим табличку с фьюзами и lock-битами:
Я уже писал, что с фьюзами надо быть поосторожнее.Убить МК можно, неправильно выставив фюьзы RSTDISBL и SPIEN.Как раз тот самый, что мы не трогали в At90S2313.Впрочем, говорят, что SPIEN у attiny сбросить через последовательный программатор нельзя, но я не проверял и никому не советую.RSTDISBL, проще говоря, отвечает за роль 1ой ноги микросхемы и влияет также на возможность программирования.
Биты, находящиеся в таблице в колонке low отвечают за задержку перед запуском программы в МК и за использование встроенного тактового генератора.Это, кстати еще одно важное нововведение, у Attiny2313 есть встроенный тактовый генератор(4/8 МГц/128 кГц).Схема готового устройства может стать компактнее, паять туда кварц не надо, конечно, если не нужна более низкая/высокая частота.При изменении частоты нужно обязательно проверить частоту в проекте, при неверно выставленной частоте девайс может работать не так, как вы хотите.Возможно использовать и кварц как обычно, нужно только выставить биты по-другому.Кстати, по умолчанию включено деление тактовой частоты на 8(CKDIV8), в большинстве случаев ненужная опция, если вы ее специально включили, наверное, знаете, что делаете 🙂
Биты из колонки high(помимо RSTDISBL и SPIEN, о которых уже было сказано) отвечают за управление такими штуками, как отладочный провод, собачий таймер(watchdog — перезагружает МК, если не получает от него ответ, за некоторое время), защита от низкого напряжения(не дает включится МК при напряжении ниже заданного), защита EEPROM.
Lock-биты управляют защитой от копирования прошивки МК(нужны, наверное, только если вы продаете девайс)).
Удобно рассчитывать фьюзы с помощью этого калькулятора.Только обратите внимание на то, что обозначает поставленная галочка в вашем программаторе.Например, в PonyProg она означает совсем не то, что она означает в Uniprof:

Что касается рабочего напряжения:
Для старого контроллера оно составляет 2,7-6,0 вольт.
Для Attiny оно ниже: 1,8-5,5.

Изменения претерпели названия регистров и некоторых битов.При переходе на новый МК надо изучить программу на наличие обращений к этим регистрам и битам и свериться со следующей таблицей.
Биты поменяли имена, но их адреса и функции остались прежними.

То же самое можно сказать и про эти регистры:

Если в проекте использовались прерывания, нужно свериться с данной таблицей:

Она показывает изменения векторов прерывания и новые векторы прерывания, которых не было в AT90S2313Следовательно, заменяем в программе векторы прерывания в соответствии с таблицей.

В работе таймеров также произведены изменения.
В таймере TCNT1 в режиме ШИМ неиспользуемые разряды теперь автоматически сбрасываются в ноль, в результате чего исключается счет до 0хFFFF там, где он не запланирован.
Очистка OCR1xH в режиме ШИМ в Attiny происходит в соответствии с разрядностью режима, а не сбрасыванием 6 значащих знаков.
Функция сброс по результату сравнения в новом МК проходит по другому алгоритму, т.е. не по первому совпадению значений, а по последнему.
OCR1x = 0x02 с разрешенным предделением на 8(расстановка флагов).
Для AT90S2313:
Для Attiny2313:

UART в новой серии микроконтроллеров заменен на USART, поддрживающих передачу данных на удвоенной скорости и работающий, как регистр FIFO(First In, First Out «первым пришёл — первым ушёл»).Включение/отключение FIFO, кстати, управляется конфигурационным битом S8515C.

Владеющим английским языком полезно будет ознакомиться с даташитом AVR091, что-то вроде подробного чейнджлога на эти микросхемы.

В общем, старался, как мог интерпретировать атмеловские рекомендации и дополнить их своими пояснениями.Надеюсь хоть что-нибудь из этого кому-нибудь пригодится…

Восстановление конфигурации Fuse-битов ATtiny13

В радиолюбительской практике наибольшее распространение получили последовательные (SPI – Serial Peripheral Interface) программаторы, имеющие ряд достоинств: их схемы, как правило, проще, чем у параллельных программаторов (в крайнем случае, можно обойтись даже пятью проводниками и двумя резисторами); имеется множество вариантов как самих программаторов, так и управляющих программ под различные ОС; для подключения программатора можно выбрать практически любой порт компьютера – существуют схемы как LPT и СОМ, так и USB-программаторов. К тому же, такой программатор позволяет “прошить” МК, не выпаивая его из устройства (ISP – In System Programmable).

Тем не менее, SPI-режим программирования является, все-таки, урезанным; и некоторые возможности полноценного параллельного программирования в нем не доступны. Наиболее распространенной проблемой последовательного программирования считается невозможность произвести какие-либо действия с МК, если определенные fuse-ячейки этого МК были изменены относительно значений по умолчанию, – в таком случае чип “объявляет забастовку”, и не выходит на связь с компьютером: его уже нельзя ни прочитать, ни “прошить” последовательным программатором. И он кажется вышедшим из строя, при этом программа PonyProg, например, выдает такое вот сообщение об ошибке: “Device missing or unknown device (-24), хотя в конечной схеме этот МК может работать вполне нормально.

Причиной такой “необщительности” может быть, к примеру, установка в ноль (а ноль в fuse-битах у AVR означает, что данный бит запрограммирован) бита RSTDISBL – что приводит к отключению внешнего входа сброса и превращению его в обычную линию ввода-вывода; а без внешнего сброса МК не сможет войти в SPI-режим программирования, и будет недоступен для ПК. Еще одна причина, по которой МК становится “невидимым” для SPI-программатора – отсутствие тактирования: fuse-биты, управляющие тактовым генератором (CKSEL0-3), могут быть установлены таким образом, что МК отключит внутренние цепи тактирования и будет требовать внешнего генератора – источника тактовых импульсов; а без тактирования SPI-программирование невозможно.

Причем, неправильно “зашитые” fuse- байты могут быть следствием не только невнимательности или незнания – вполне вероятны также и аппаратные сбои при “прошивании”, особенно если “шьют” через одну из вариаций на тему “пяти проводков” – поэтому, от “впавших в кому” МК, лежащих на полке и ожидающих чудесного исцеления, не застрахован никто (а если верить интернету, то через это прошел чуть ли не каждый второй любитель AVR – причем, не обязательно из новичков).

Если же такая неприятность все-таки произошла, и МК перестал устанавливать связь с компьютером, то исправить неправильно выставленные fuse-байты с помощью последовательного программатора уже не удастся. Тем не менее, вовсе не обязательно делать или приобретать новый параллельный программатор (или, тем более, отладочный комплект) только для того, чтобы “вылечить” пару “коматозных” МК, тем более, если старый SPI- программатор вполне устраивает – для этого удобнее воспользоваться простым устройством, схема которого приведена на сайте www.radiochipi.ru

Прибор предназначен для “лечения” МК ATtiny2313, но может быть переделан и для любой другой модели AVR – как Tiny, так и Меда – для чего прилагается хорошо закомментированный “исходник” микропрограммы, что дает возможность переписать ее применительно к тому МК, которому в данный момент требуется “скорая помощь”. Суть работы такого устройства заключается в том, “пациента” в режим параллельного программирования, и эмулировать на его линиях те сигналы “настоящего” программатора, которые отвечают за изменение состояния fuse-ячеек; а затем записать в этот МК значения fuse-ячеек по умолчанию.

Данное устройство выставляет заводские значения для всех fuse-байтов: старшего, младшего и дополнительного; а вдобавок еще и стирает у “пациента” память программ и данных – в результате чего он приобретает состояние “чистой” микросхемы. В радиолюбительской литера-туре и интернете уже описывались подобные устройства (под названиями Fuse Doctor, AVR Doctor, AVR Reanimator, AVR Айболит и т.п.), но данное обладает несколькими особенностями, делающими работу с ним немного приятнее. Во-первых, во всех известных автору конструкциях “доктор” и “пациент” подключались друг к другу, практически, “нога к ноге” (за исключением некоторых выводов, которые у “доктора” и “пациента”, согласно схеме, не должны соединяться).

Читайте также:  Блок питания для домашней лаборатории

То есть, линии РВ0-РВ7 – к линиям РВ0-РВ7, линия PD6 – к линии PD6 и Т.Д- Что, в случае сборки схемы печатным способом, значительно усложняло монтаж – требовалось множество перемычек, или же двухсторонняя разводка (правда, некоторые авторы предлагали просто устанавливать микросхемы друг на друга, отгибая не соединяемые выводы в сторону и паяя на них резисторы/проводники; но надежность контакта при такой вот “микроконтроллерной камасутре” ставится под сомнение; а к чему приводит отгибание-загибание выводов у микросхем, мы все прекрасно знаем). Здесь же микросхемы расположены как бы “бок об бок”, “валетом”, что делает разводку печатной платы очень простой.

В авторском варианте, который приведен на рис.2, она во многом повторяет принципиальную схему, и содержит всего три небольшие перемычки. Размер платы – 60×60 мм. Во-вторых, некоторые устройства требовали двух напряжений: 5 В – для питания МК, и 12 В – на линию reset “пациента”, для ввода в режим программирования. Этой схеме требуется только одно напряжение, которое может иметь разброс в достаточно широких пределах – главное, чтобы оно было не менее 12 В. В-третьих, большинство описанных устройств не допускают “горячей” замены “пациентов” в случае, если нужно “вылечить” несколько МК подряд – после каждого “прошивания” у них нужно отключить питание, заменить “больного”, затем включить питание вновь и т.д. Данное устройство устанавливает все выходы в лог.

О после каждого “прошивания”, что позволяет “лечить” микросхемы “конвейером” – подключил питание, установил “пациента”, нажал на кнопку “старт”, посмотрел результат “лечения” по HL1, снял, вставил нового “пациента”, нажал, глянул HL1, снял, вставил и т.д. И все это без отключения питания (хоть “палатку” на радиорынке открывай!). Ну и, в-четвертых, часто в подобных устройствах отсутствует верификация записанных fuse- битов и индикация результата “лечения” (по типу “удачно/неудачно”).

В данной конструкции верификация предусмотрена, а для индикации ее результатов служит светодиод HL1, который может иметь три состояния:

  1. Горит непрерывно – программирование “пациента” прошло
    успешно, прочитанные fuse-байты соответствуют записанным;
    устройство ожидает очередного “пациента”;
  2. Мигает с частотой 2Гц – ошибка в
    программировании “пациента”:
    прочитанные fuse-байты не совпадают с записанными; “пациент” не вошел в режим программирования, не установлен или неисправен (в
    программе предусмотрена проверка на наличие “пациента” – исправный AVR устанавливает лог.1 на линии BSV/RDY (вывод 3 для ATtiny2313) при вхождении в режим параллельного программирования); устройство ожидает очередного
    “пациента”;
  3. Не ГОРИТ – идет процесс программирования и верификации. Программирование исправного “пациента” длится менее секунды, и это состояние светодиода в нормальных условиях не должно быть заметно. Если же светодиод находится в погашенном состоянии относительно долго, то, скорее всего, процесс “прошивания” зациклился из-за того, что неисправный “пациент” завис в режиме записи и не выставляет сигнал готовности BSY/RDY, ожидаемый “доктором”.

Как уже было сказано, устройство является достаточно универсальным, и применимо для “лечения” практически любого МК серии AVR. При этом вовсе не обязательно изготавливать по отдельному экземпляру устройства для различных микроконтроллеров, отличающихся числом и расположением выводов – достаточно просто добавлять, по мере необходимости, переходники под цоколевку очередного “заболевшего”, и переписывать соответствующим образом управляющую программу. Переходник представляет собой панельку DIP-20, которая вставляется своими “ножками” в панель для “пациента” на плате устройства. Сверху к такой панельке (к контактам для выводов микросхемы) подпаивают (или просто вставляют) проводники в тех местах, в которых подходят линии питания и управления к “пациенту” на плате.

Другими концами эти проводники припаиваются к выводам второй панельки – под тот МК, которому требуется “лечение” – в соответствии с расположением его управляющих линий, которое можно уточнить в фирменном даташите. Получается своеобразный разъем, штекер (просто панелька DIP-20) которого вставляется в панельку DIP-20 для “пациента” на плате, а уже в его гнездо (еще одна панелька) вставляется новый “пациент”. Что же касается программы, то ей может потребоваться коррекция, т.к. разные модели МК AVR часто требуют различных действий как для входа в режим программирования, так и для изменения fuse-байтов. К тому же и сами fuse-байты (в т.ч. и их количество) у разных моделей МК различны – более подробную информацию можно получить в [Л. 1,2,3], или в фирменной документации.

А чтобы было проще разобраться в исходной программе, я снабдил ее подробными комментариями. В качестве “доктора” в данном устройстве используется такой же, как и “пациент”, микроконтроллер ATtiny2313 – он так же устанавливается на панельке, чтобы после восстановления всех “заболевших” микросхем его можно было бы снять и использовать в других проектах. Для работы в этом устройстве все fuse- биты “доктора” должны быть такими, какие установлены в нем по умолчанию (с завода); единственное – для более стабильной работы (особенно при нестабильном напряжении питания), в “докторе” можно включить систему BOD, настроив на уровень 2,7 В (установкой fuse-бита BODLEVEL1 в ноль).

Внешний кварц “доктору” не требуется, он работает от встроенного RC-генератора. Микросхему DA1 (78L05) можно заменить отечественным аналогом КР1157ЕН502, либо более мощной 7805 – но она гораздо дороже, а ее мощность для данной схемы не требуется. Транзистор VT1 здесь работает в ключевом режиме, и может быть любым, структуры NPN – например, КТ315, 2SC1815, 2SC9014, 2SC1749S и др.; но для некоторых моделей придется изменить разводку платы. Предохранительный диод VD1 может быть любым, на ток не менее 150 мА. его задача – защитить схему от случайной переполюсовки питания. Все резисторы в схеме – малогабаритные, 0,125 Вт – их номинал может отличаться от указанного в довольно широких пределах. Светодиод HL1 – любой, индикаторный.

И в заключение, хочется рассказать об интересной особенности поведения некоторых экземпляров МК ATtiny2313 при их SPI-программировании с помощью программы PonyProg2000 (возможно, также ведут себя и другие модели МК, в т.ч. и с другими программами – но автору пока еще не доводилось поэкспериментировать с чем-либо, кроме связки ATtiny2313-PonyProg2000).

Суть проблемы состоит в следующем: иногда, при попытке прочесть или записать МК, программа PonyProg выдает сообщение об ошибке “Device missing or unknown device (-24)” – и это притом, что никакие fuse-биты в данном МК не изменялись – более того, микросхема может быть даже новой, ни разу еще не “прошитой”! “Лечение” при помощи описанного выше устройства никаких результатов не дает – при повторной попытке чтения/записи сообщение об ошибке появляется вновь.

МК кажется вышедшим из строя, причем – ни с того, ни сего. Но если в данном сообщении нажать кнопку “Ignore”, тем самым заставив “Пони” проигнорировать отсутствие ответа МК. и все равно попытаться прочитать/записать микросхему, то этот МК нормально прочитается или “прошьется”. После такой вот принудительной “прошивки” большинство “прикидывающихся мертвыми” МК будут вполне нормально работать, притом без каких- либо сбоев (кроме описанного выше сообщения при попытке установить связь с ПК)!

По видимому, дело здесь в том, что некоторые экземпляры МК не генерирует корректное подтверждение в ответ на запрос программатора, в результате чего PonyProg делает вывод об их неисправности; при этом остальные команды программатора эти МК воспринимают нормально и выполнят корректно. Вполне возможно, что это является особенностью (а точнее сказать, “болезнью”) МК AVR (не просто же так в PonyProg включили такую кнопочку – “Ignore”) – у автора данной статьи три из десяти МК вели себя подобным образом, причем чаще начиналось это не сразу, а спустя несколько “прошивок”.

А может быть, виной всему статическое напряжение, имеющееся на человеческих руках. Но, как бы там ни было, в ответственных конструкциях (вроде устройств зажигания, автоматов отопления, полива, сигнализациях и т.п.) такие ‘подорвавшие доверие” МК использовать, все-таки, не желательно. А вот в игрушках, елочных гирляндах, дверных звонках и других вспомогательных устройствах (вроде описанного выше ©) они вполне проработают много лет – и притом без каких-либо проблем.

Прошивка для микроконтроллера – fuse-reanimator-for-avr (9 КБ).

SPI для ATtiny2313

Во всех микроконтроллерах семейства Mega имеется аппаратный модуль SPI. Он очень прост в своём использовании. После настройки и инициализации модуля нужно записать в регистр SPDR передаваемый байт данных — это запустит генератор тактового сигнала SPI, данные начнут передаваться от Master к Slave и обратно. После установки флага окончания передачи в SPDR будет находиться принятый байт. В общем всё просто. Да и по моему мнению SPI самый лёгкий в освоении и использовании интерфейс, к тому же достаточно скоростной. Однако в некоторых контроллерах семейства Tiny аппаратного SPI нет — там установлен модуль USI, например в очень распространённой и применяемой ATtiny2313. На различных форумах я встречал неоднократные вопросы по поводу использования USI в качестве SPI, т.е. у народа возникают некоторые трудности. �?, хотя, USI, может быть, чуть сложнее SPI, но особых трудностей при разборе его работы возникнуть не должно. Основные части USI — это сдвиговый 8-ми разрядный регистр (для передачи/приёма данных) и 4-х разрядный счётчик (для определения окончания передачи). В тонкости построения USI я углубляться не буду — кто захочет разобраться подробнее тот раскурит даташит. Главное отличие работы USI в режиме SPI от аппаратного SPI семейства Mega — то, что синхроимпульсы для передачи/приёма формируются не аппаратно, а, или программно, или от внешнего источника, или по прерыванию таймера 0. Кроме того, сдвиговый регистр и 4-х разрядный счётчик можно тактировать от разных источников, что позволяет построить на основе USI некоторые дополнительные модули.
В даташите на ATtiny2313 есть программные примеры на ассемблере для работы USI в качестве SPI. Я их переписал на Си, сохранив логику работы один к одному, и успешно использую в своей работе.
Для демонстрации работы USI в качестве SPI, я возьму микроконтроллерные модули с ATtiny2313 и ATmega8, клавиатуру, в которой использую только одну кнопку и ЖК�?.
Опыт №1. 2313-я MASTER 8-я SLAVE.
Скачиваем архив. В нём две папки. В папке USI_SPI — проект для ATtiny2313, а в папке SPI — для ATmega8A. Внимательно просмотрите исходники каждого проекта — там написано, что нужно раскомментировать и что нужно закомментировать для настройки MASTER/SLAVE (Подсказка: там два варианта главной функции). Также в каждом проекте подключены заголовочный и Си-шный файлы для работы с ЖК�? HD44780. Они необходимы для отображения принятых символов. Откомпилируйте проекты, чтобы 2313-я выступала в качестве MASTER, а 8-я — SLAVE и прошейте контроллеры. По разделу defane посмотрите назначение выводов, и, соответственно им соберите макет (Подсказка: для подключения ЖК�? (он подключается к SLAVE), что в 2313-й, что в 8-й используется порт D. PD0 — PD3 МК — DB4 — DB7 ЖК�?, PD4 — RS, PD5 — EN). Кнопка (подключается к MASTER) тоже вешается одинаково — на PD1.
Собрали макет. Подали питание. На ЖК�? должна высветиться надпись ОК — значит , по крайней мере: 1) ЖК�? подключён правильно; 2) компиляция и прошивка SLAVE прошла успешно. Нажимаем кнопку и наблюдаем на ЖК�? SLAVE приём символов (я использовал десятичные цифры. Вот фотка где 2313 — MASTER.
Опыт №2. 2313-я SLAVE 8-я MASTER.
Теперь компилируем проекты, чтобы 2313-я выступала в качестве SLAVE, а 8-я — MASTER и соответственно прошиваем. ЖК�? подключаем на 2313-ю, а кнопку — на 8-ю. Не забудьте ПОМЕНЯТЬ местами соединители с MISO на MOSI для 8-й. Повторяем действия из опыта №1. Убеждаемся в чёткой работе. Фотку демонстрировать не вижу смысла, т.к. она ничем не отличается, кроме подключения проводов.
В данной реализации SPI, что для ATtiny2313, что для ATmega8A, я не использовал прерывания, а также различные варианты тактирования для 2313. Всё это в Ваших руках, вернее в головах. Целью данной статьи было показать простейшие способы реализации интерфейса SPI. Для tiny, точно так, как и в даташите, есть два варианта функций передачи данных. Я замерял частоту тактовых сигналов «быстрого» варианта с кварцем 20 МГц — реально вышло 10 МГц!
Готовые исходники, я думаю, пригодятся Вам в дальнейшем творчестве. Всем удачи.

Читайте также:  Кварцованный передатчик на 433 мгц 10 мвт

27 комментариев на «SPI для ATtiny2313»

Спасибо, очень полезная инфа.

Здравствуйте.
У меня вопрос по SPI. В даташитах для ATiny2313, Atiny25 приводится рисунок модуля, из котого следует, что если выбрать внешний тактовый сигнал и в качестве такового, в свою очередь, выбрать USITC, то он поступает на вход 4-х разрядного счетчика и на вывод USCK, но на сдвигающий регистр USIDR не поступает. Как в таком случае происходит сдвиг информации?

Уважаемый maks50! Свой вопрос Вы поместили в раздел «записи», а нужно было в комменты, что я и сделал за Вас )))
Теперь отвечаю на вопрос. Тактирование в таком случае осуществляется программно, сбросом/установкой бита USICLK регистра USICR. Этот случай в исходнике указан (там две функции SPI_WR_M). Удачи Вам в освоении МК!

Бегущие огни на ATtiny2313

В этой статье мы сделаем акцент на портах ввода/вывода МК ATtiny2313 и заставим их работать на выход. То есть ножка микроконтроллера (МК) будет выдавать сигнал либо логической единички, либо нуля. Приказывать, что выдавать на ножку, будем мы сами, а точнее, программа, которую мы с вами разработаем.

Все начинали изучать AVR c мигания светодиода. Мы даже делали целую гирлянду из 4 светодиодов в этой статье. Но что, если 4 светодиодов нам мало, и мы хотим чего-то большего? Ну раз хочется, то давайте сделаем!

Выбор микроконтроллера

“Подопытным кроликом” у нас будет старый добрый МК ATtiny2313

Долго не думая, находим в интернете на него даташит и смотрим цоколевку

Так как я хочу навесить на него кучу светодиодов и сделать из них что-то подобие бегущей дорожки, для нас важно рассмотреть, какие пины (выводы МК) позволят мне это сделать. Что мне здесь надо найти? Это, конечно же, порты ввода/вывода. В ATtiny2313 их три группы: порт А, порт В и порт D. В группе порта А у нас три пина – это PA0, PA1,PA2. В группе порта В их уже восемь (PB0…PB7) и в группе порта D семь пинов (PD0…PD6). Итого в сумме 18 пинов, на каждый из которых можно навесить по светодиоду. То есть теоретически, наш МК может управлять 18 светодиодами, которые могут светится независимо друг от друга. Про порты ввода/вывода можно подробно прочитать на сайте easyelectronic по этой ссылке.

Характеристики светодиодов

Не забываем, что светодиоды делятся на индикаторные и осветительные. Индикаторные светодиоды обладают слабым свечением и используются для индикации каких-либо процессов, происходящих в электронной цепи. Для них характерно слабое свечение и малый ток потребления

Ну и осветительные светодиоды – это те, которые используются в ваших китайских фонариках, а также в LED-лампах

В нашей статье мы будет использовать индикаторные светодиоды. Светодиод – это токовый прибор, т.е. для его нормальной работы требуется номинальный ток, а не напряжение. При номинальном токе на светодиоде падает некоторое напряжение, которое зависит от типа светодиода (номинальной мощности, цвета, температуры). Ниже табличка, показывающая какое падение напряжения бывает на светодиодах разных цветов свечения при номинальном токе:

Поэтому подключать их напрямую к МК с питанием в 5 Вольт запрещено. Для них это обернется летальных исходом. В первую очередь сгорят те, кто требует для своей работы небольшого напряжения: красные, желтые и оранжевые светодиоды. Сгореть могут как светодиоды, так и выход МК. Чтобы такого не произошло, надо последовательно со светодиодом ставить токоограничивающий резистор. Лучше всего такой резистор подобрать с помощью магазина сопротивления, либо с помощью потенциометра, включенного по схеме реостата. После того, как мы добились умеренного свечения светодиода, замеряем наше сопротивление и ставим постоянный резистор близкий к измеренному номиналу.

Если такой возможности нет, то делаем простейший расчет.Например, у вас в арсенале имеются желтые светодиоды. Питание нашего МК 5 Вольт, следовательно, напряжение логической единички также 5 Вольт. Так как на желтом светодиоде у нас падение напряжения составляет примерно 2 Вольта, значит, на токо-ограничивающем резисторе должно упасть 3 Вольта. Ток через светодиод берем в среднем 15-20 мА. Исходя из закона Ома высчитываем значение сопротивления: I=U/R —–> R=U/I=3/15=0,2 килоома или 200 Ом. На практике, резистора, номиналом в 200-500 Ом, хватает за глаза.

Способы подключения светодиода на порт МК

1) Это прямой способ, при котором включение светодиода происходит при наличии высокого логического уровня, то есть единички на выходе порта МК:

2) Инверсный способ, при котором светодиод загорается только тогда, когда на выходе порта будет низкий логический уровень, то есть ноль.

Умеренно-светящийся светодиод потребляет силу тока в 15-20 мА. То есть если запитать одновременно все светодиоды с помощью нашего МК, то скорее всего он не выдержит такого издевательства и испустит белый дымок сгоревшего кремния. Значит, если мы сразу зажжем 18 светодиодов и каждый будет кушать по 15-20 мА, то у в сумме наш МК должен выдать 360 мА. В даташите на него пишут, что максимум, что с него можно “выжать” – это 200 мА (строка в самом низу)

Индикаторные светодиоды, в зависимости от исполнения (SMD или штырьковые), потребляют при номинальном свечении ток от 2-3 мА и до 20-30 мА. Поэтому, все зависит от того, какие светодиоды мы выберем для нашего эксперимента. Но помните, что сумма токов питания светодиодов не должна превышать максимальное значение МК. В нашем случае это 200 мА. Ну а так для повышения надежности долговременной работы радио-электронной аппаратуры (РЭА) рекомендуется использовать нагрузку по мощности 70% от номинала, а по напряжению и току – 80% от номинала. Поэтому, если номинальный ток светодиода 20 мА, то мы будем его пытать на токе 0.7 * 20 = 14 мА. Применимо к МК – это 160 мА вместо 200 мА.

Управление мощной нагрузкой с помощью МК

Если не терпится и хочется поджигать лампочки накаливания, либо мощные осветительные светодиоды, то можно поставить транзисторные ключи на биполярных транзисторах. В этом случае +Uпит может быть больше, чем напряжение питания МК.

Почти та же схема, но включение происходит при логическом нуле на выходе МК. Здесь обратите внимание на то, что при таком инверсном включении +Uпит не должно превышать напряжение питания МК.

Важный момент применимый к обеим схемам – питание нагрузки. Если питаемся от напряжения МК, то схема примитивна: в базовой цепи один резистор (RБ). Если же нагрузку питаем от внешнего источника питания, например 40 Вольт, то еще добавляем в схему резистор Rбэ . Чаще всего его номинал берут в 1 кОм.

Расчет резистора базы для режима насыщения

Как же рассчитать примерно значение резистора базы? Есть нехитрые формулы. Для того, чтобы их разобрать, рассмотрим вот такую схемку:

Для начала можно найти ток базы:

IБ – это базовый ток, в Амперах

kНАС – коэффициент насыщения. В основном берут в диапазоне от 2-5. Он уже зависит от того, насколько глубоко вы хотите вогнать ваш транзистор в насыщение. Чем больше коэффициент, тем больше режим насыщения.

IK – коллекторный ток, в Амперах

β проще всего измерить с помощью транзисторметра.

Ну а дальше дело за малым

Это самый простой расчет без всяких заморочек. Более подробно читайте в этой статье.

Для управления какой-либо мощной нагрузкой, можно применить схему с транзистором и реле:

О фьюзе RSTDISBL

Ножка PA2 может выполнять функцию не только вывода порта А, но и также участвует при программировании МК. Если с помощью фьюза “RSTDISBL” мы разрешим этому выводу “притвориться” выходом, то потом не сможем перепрограммировать данный МК с помощью ISP программатора, а другой программатор, я к сожалению, пока еще не приобрел. Но если вы собираетесь делать эту конструкцию навека, то можете без проблем поставить галочку на фьюз “RSTDISBL” и повесить на этот вывод светодиод). Поэтому, я не буду задействовать эту ножку МК как выход. То есть в сумме у меня будет 17 светодиодов, вместо 18. Жертвуя одни светодиодом, я даю себе право использовать многократно свой МК, не прибегая к помощи другого программатора.

Пишем программу для чайников

Далее открываем программу AtmelStudio 6 и начинаем писать программу. Эта программа специально написана для новичков, чтобы они уловили суть всего процесса.

Рейтинг
( Пока оценок нет )
Загрузка ...
×
×
Adblock
detector