Схемы на attiny2313 своими руками. Подключаем кнопку к микроконтроллеру ATtiny2313, простая программа. Компиляция и прошивка программы в МК

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

Первым делом нам нужен программатор, разновидностей программаторов много, какой программатор выбрать?
Есть обычные программаторы в который нужно вставлять микроконтроллер, прошивать, вынимать микроконтроллер и потом вставлять его в нашу плату, чтобы увидеть результат и эту последовательность придется делать первое время сотни раз, этот вариант на мой взгляд не удобный.
Наш микроконтроллер ATtiny2313 поддерживает функцию внутрисхемного программирования ISP (In-System Programming) через SPI порт, этот вариант использования внутрисхемного программирования ISP на мой взгляд самый удобный и быстрый, т.к. микроконтроллер из нашей платы вынимать не нужно после каждой прошивки, можно программировать микроконтроллер сотни раз и сразу же не отключая программатор от компьютера и платы, видеть результат после прошивки микроконтроллера, процесс отладки программного обеспечения радиолюбительского устройства заметно упрощается и сокращается затрачиваемое на это время.
Внутрисхемный программатор ISP можно сделать самому, в интернете есть множество простых схем как это делается через LPT,COM порт, например программатор PonyProg в интернете можно найти схемы как его сделать.

В данной статье будет рассматриваться работа с внутрисхемным ISP программатором для микроконтроллеров AVR (PX-400) он работает через COM порт.
Если у вас нет COM порта в компьютере, нужен будет еще переходник с USB порта на COM порт, переходников таких тоже много разновидностей, я рекомендую переходник с которым я работал: UCON-232S USB to Serial port converter board
Фото программатора PX-400 , переходника UCON-232S USB , Datasheet ATTiny2313

Разберем подробнее все детали данной схемы:
(На всякий случай, все детали, программатор, переходик (с USB на COM порт) я покупал в chipdip.ru)

1 - PBD-20 гнездо на плату 2.54мм 2х10 прямое - Это я сделал для удобства, чтобы проще было проверять сигналы с выводов микроконтроллера, этот пункт можно было не делать.
2 - SCS-20 DIP панель 20 контактов - панель припаиваем к плате, чтобы была возможность заменить микроконтроллер в плате если потребуется,
ATtiny2313-20PU, DIP20, МCU, 5V, 1K-Flash, 12MHz - Микроконтроллер вставляем в DIP панель.
3 - Кварцевый резонатор 4.000 МГц (усечен.) HC-49S - Кварцевый резонатор 4 МГц
4 - Керамический конденсатор К10-17Б имп. 22пФ NPO,5%,0805 - Два керамических конденсатора по 22пФ
5 - 78M05 (+5В, 0.5А) TO220 - Стабилизатор напряжения 5В, подает на микроконтроллер стабилизированное питание не более +5В, в данном случае у меня получилось 4,4В, этого вполне хаватает.
6 - NP-116 штекер питания 1.3х3.4х9.5мм MP-331 (7-0026c) - Штекер питания припаял к старому зарядному устройству от мобильного телефона DC 5.7V/800mA
7 - DS-213 гнездо питания на плату - гдездо питания для штекера NP-116, для удобства подключения питания
8 - IDC-10MS (BH-10), вилка прямая - Вилка для подключения внутрисхемного ISP программатора
9 - Резистор постоянный 0,25Вт 150 Ом - Три резистора по 150 Ом на выводы MISO,SCK,MOSI
10 - Резистор постоянный 0,25Вт 47 Ом - Один резистора 47 Ом на вывод RESET
11 - Кнопка тактовая h=5мм, TC-0103 (TS-A2PS-130) - Кнопка сброса RESET, после нажатия на кнопку программа в микроконтроллере запускается с начала, кнопку можно было не делать.
12 - Светодиод зеленый d=3мм, 2.5В, 2мА - Выполняет функцию индикатора, этот пункт можно было не делать.
13 - Резистор постоянный 0,25Вт 110 Ом - Резистор для светодиода, чтобы на светодиоде было 2В, этот пункт можно было не делать
14 - Два провода подключенные к светодиоду, для проверки сигналов с выводов микроконтроллера, этот пункт можно было не делать
15 - Дип-Рм печатная макетная плата 100х100мм

Пункты 3 и 4 Работают как единое целое, как внешний тактовый генератор,эти пункты можно не делать, если вы не предъявляете высоких требований к точности и стабильности внутреннего RC-Генератора, внутренний RC-Генератор имеет погрешность около 10% и на точность может влиять изменение температуры.

Итак, вы скачали и установили Atmel Studio :
Запускаем Atmel Studio и напишем простейшую программу на языке Си мигание светодиодом:
Нажимаем: New project... \ AVR GCC \ C \ C Executable Project
Указываем папку где сохранить проект и название проекта например Test1 и нажимаем ОК.
Из списка выбираем наш микроконтроллер ATtiny2313 и нажимаем ОК.
Стираем все что появилось в окне и вставляем наш код программы который ниже:

#define F_CPU 4000000L //Указываем частоту нашего внешнего кварца 4 МГц
#include
#include
int main(void)
{
//Устанавливаем все выводы PORTB как выходы
DDRB=0xFF;//Регистр направления передачи информации (1-выход, 0-вход)
while(1)
{
//Регистр данных PORTB (используется для вывода информации)
PORTB=0b00000001;//Подаем 1 на 12 порт МК PB0 - включаем светодиод
PORTB=0b00000000;//Подаем 0 на 12 порт МК PB0 - выключаем светодиод
_delay_ms(1000);//Задержка 1 сек.
}
}

Заходим в меню Build \ Configuration manager \ Active solution configuration \
Выбираем Release , нажимаем Close
Это мы сделали для того, чтобы у нас появилась в проекте папка Release , о которой я расскажу ниже.

Нажимаем F7 , готово, наше приложение откомпилировалось!
Для прошивки микроконтроллера ATtiny2313 нам нужен только один файл с расширением HEX
Он находится в папке нашего проекта: ...
Обратите внимание, файл Test1.hex нуно взять именно из папки Release !
Не перепутайте, т.к. папке Debug лежит тоже файл Test1.hex , но в этом файле еще содержится отладочная информация и из-за этого вы прошить этим файлом не сможете т.к. он обычно бывает большого размера и не поместится в памяти МК.

Файл.hex нашли, теперь нужна программа для прошивки микроконтроллера ATtiny2313, программ таких много, но мы воспользуемся программой: Avr-Osp II
Скачать:

Подключаем программатор к нашей схеме, на схему обязательно подаем питание!

Запускаем программу Avr-Osp II , указываем в разделе FLASH путь к файлу...\Test1\Test1\Release\Test1.hex ,устанавливаем галочки в программе и нажимаем кнопку Program вот и все, микроконтроллер ATtiny2313 прошит!

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

Вопросы и комментарии оставляйте пожалуйста на нашем форуме

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 934)

Устройство этой статьи - работа с SD картами. Тема стара и порядочно заезженная, но применение SD карт стоит того, чтобы об этом написать еще раз.
Вообще SD карты (SDC, SD Card) имеют много достоинств и их очень просто и удобно применять в небольших встраиваемых проектах. Этому способствует ряд факторов:
- очень простой интерфейс взаимодействия с картой (реализуется посредством SPI);
- большая скорость работы (микроконтроллер способен перегонять данные с SD карты со скоростью близкой к 10 Мбит/с);
- низкое энергопотребление (буквально пару миллиампер - не больше);
- небольшие размеры;
- доступность и дешевизна.
У SD карт практически нет недостатков (окромя, разве что, процедуры их инициализации:)).

1 Введение.

Устройство, описанное в этой статье, я назвал SD Card Talking Device. Немного пафосно;) , но зато по названию понятно, что это говорящее устройство. Оно предназначено для озвучивания Ваших проектов. Если кратко, то работает оно следующим образом: на SD карту записываются пронумерованные звуковые файлы, которые устройство проигрывает по Вашей команде. Сфера применения довольно широка - системы оповещения, игрушки, роботы, умный дом и т.д. Габариты устройства довольно скромные (можно и меньше, но я сознательно выбрал микроконтроллер ATtiny2313 который подешевле и полегче достать). Основной упор я пытался делать на простоту и максимальную функциональность.
Забегая вперед, смотрим, что должно получиться в итоге:

Пригодится такое устройство? Тогда собираем!

2 Карта памяти.

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

SD карта прошла довольно длинный путь эволюции и имеет несколько вариантов ее реализации (MMC - как вариант SD карты, SD ver1, SD ver2, SDHC, SDXC). Процедура общения с картой проста и универсальна для всех типов карт, а вот запуск в работу (инициализация карты) довольно неоднозначный и запутанный процесс, с ритуальными «передергиваниями» карты, посылкой пустых «dummy» команд и прочими непонятными вещами (короче, танцы с бубнами обязательны:)). Сама спецификация на SDC протокол описывает процесс инициализации довольно пространно, оно и понятно, производителей карт тьма, у каждого свое железо, со своими особенностями… К чему я это веду? - Я попытался сделать процедуру инициализации максимально универсальной, но будьте готовы к тому, что некоторые карты «не пойдут». Поэтому если у Вас чего-то не ладится с устройством, попробуйте другую карту памяти - может причина в этом.

В данном устройстве поддерживаются SD карты размером до 2 Гб, включительно. Все что выше (SDHC и SDXC) - не поддерживается.
Для устройства нет разницы в каком форм-факторе карта (SD, MiniSD или MicroSD), но Вы должны правильно ее подключить, согласно распиновки карты.

3 Файловая система.

В устройстве работают карты, имеющие файловую систему FAT16. Эта система как нельзя лучше подходит для устройств подобных нашему, так как проста и легко реализуемая (FAT12 и FAT32, в принципе, тоже не сложно реализовать, но это нецелесообразно, в виду отсутствия каких либо достоинств по сравнению с FAT16).

Нет особых требований по форматированию карты - ее можно отформатировать в любом доступном устройстве. Стандартное форматирование Windows вполне подходит для этих целей.

Для корректной работы устройства звуковые файлы, расположенные на SD карте, должны соответствовать определенным требованиям:
а) Формат файла должен быть - несжатым WAV.
Параметры файла следующие:
- Битрейт - частота дискретизации (Frequency) - 32000 Гц;
- Количество каналов (Channels) - 1 (mono);
- Размерность (Sample size) - 8 бит.
Еще возможно такое сокращение - WAV PCM 8U

b) Файл должен быть назван особым образом. Для того чтобы устройство знало какой файл первый, второй, третий и т.д. первый символ имени файла должен быть заглавной буквой латинского алфавита (остальная часть названия, как и расширение файла - игнорируется).
Например, корректными будут следующие названия файлов:
А_Лай_собаки.wav - первый трек
B-Это второй трек.wav - второй трек
С Warning! Error!.wav - третий трек

c) Для использования дополнительных возможностей устройства, файлы могут располагаться в двух папках с именами «1» и «2». Устройство имеет переключатель для выбора активной папки, то есть одна и та-же команда запуска воспроизведения может запускать треки из папки «1» или «2», в зависимости от уровня на переключающем входе (своего рода выбор звуковой схемы - очень полезная вещь!). Если одной из папок (или сразу обеих) не существует, файлы воспроизводятся из корневого каталога.

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

d) Ввиду малого объема SRAM у ATtiny2313 невозможно создать буфер для предварительного чтения данных, поэтому данные из файла напрямую выдаются на воспроизведение. Соответственно, нет возможности (не хватает времени) выполнять поиск фрагментов файла по таблице FAT. Другими словами, файлы, записанные на карту, должны быть не фрагментированы.

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

4 Схема. Печатная плата.

Схема устройства максимально проста. Фактически, кроме самого микроконтроллера и SD карты, в ней ничего нет. Для себя я сделал печатку под SMD компоненты, так как планируется применить данный девайс в ограниченном по габаритам месте. Если для Вас габариты не критичны можно собрать схему на макетке в DIP варианте. В случае макетки, сборка устройства займет у Вас, от силы, 15 минут. Допустимое напряжение питания для SD карты от 2.7 до 3.6 вольт. В этом промежутке нормально работает и микроконтроллер, поэтому нет необходимости применять какие либо согласующие компоненты. Я проверял работу всего устройства и при питании в 5 вольт - все работало нормально, но не рекомендую так делать на постоянной основе, так как разные карты могут на превышение напряжения реагировать по разному. В качестве кардхолдера для microSD я использовал адаптер, подпаявшись прямо к его контактам. Если нужны габариты поменьше лучше использовать настоящий кардхолдер для microSD.

Для прошивки микроконтроллера используется тот-же разъем, что и для SD карты, поэтому придется подумать как к нему подключить программатор (я специально сделал переходник).

После того как плата спаяна - можно прошивать микроконтроллер.

Небольшая галерея готового устройства:




Небольшой нюанс по схеме.
При установке SD карты в кардхолдер (подключении карты к источнику питания) создается скачек тока и, соответственно, просадка напряжения в схеме (похоже, в карте в это время заряжаются значительные емкости). Просадка настолько значительная, что происходит сброс микроконтроллера. Я это использую для начала процедуры инициализации карты (установка карты перезапускает микроконтроллер и первое что делает прошивка это поиск и инициализация карты). Если у Вас при установке карты не происходит сброса МК (мощный источник питания или большие сглаживающие емкости), то Вам нужно позаботиться о кнопке сброса в схеме для ручного сброса микроконтроллера (это если планируется «горячая» смена карт).

5 Работа устройства.

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

5.1 Кнопки устройства, их действие.

Я попытался сделать устройство максимально функциональным, поэтому очень много ножек микроконтроллера задействованы под переключатели режимов работы (от этого устройство напоминает ежика:)). Если Вам какая функция не нужна - просто оставьте «висеть» ногу в «воздухе».
Действие переключателей:
- “Monster” - позволяет замедлить (в 2 раза) воспроизведения трека - создавая эффект низкого голоса. Переключатель работает «на лету» - скорость изменяется по факту переключения;
- “Helium” - ускоряет воспроизведение трека (на 1/3) - создавая эффект высокого голоса. Переключатель работает «на лету»;
- “Repeat” если этот переключатель замкнут на землю, то выбранный трек будет бесконечно (до момента размыкая переключателя) воспроизводиться. Это может быть полезным, например, если нужно создавать определенный звуковой фон - шум дождя, горение костра, журчание ручья…;
- “Select / Play” кнопка запускающая трек на воспроизведение (описание ниже);
- “Select track”- установка номера воспроизводимого трека (описание ниже);
- “Dir1 / Dir2” - выбор звуковой схемы (описание ниже).

5.2 Запуск воспроизведения.

Запустить воспроизведение определенного трека можно тремя способами:
- послав по UART заглавную букву латинского алфавита - сразу начинается воспроизведение файла, содержащего эту букву в начале названия;
- если при помощи “Select track” выбран номер файла (двоичным кодом 0001=”A”, 0010=”В”, и т.д. 1- нога замкнута на землю, 0 - «висит» в «воздухе»), то кнопка “Select / Play” запустит соответствующий файл на воспроизведение;
- если при помощи “Select track” ничего не выбрано (0000 - ноги «висят» в «воздухе»)), то нажимая кнопку “Select / Play” определенное количество раз, запускаем соответствующий трек (1 раз=”A”, 2 раза=”В”, и т.д.).

5.3 Звуковые схемы.

Очень полезной функцией является функция выбора одной из двух звуковых схем. Это значит, что переключателем “Dir1 / Dir2” выбирается папка на карте, из которой будет воспроизводиться трек.

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

Например, Вам нужно, чтобы ваше устройство умело общаться мужским и женским голосом. Реализуется это так:
- создаем два комплекта сообщений, соответственно, в женском и мужском варианте;
- нумерацию файлов для обоих вариантов делаем одинаковую. Не забываем, что устройство «видит» только первую букву в названии файла, поэтому для себя Вы можете имена сделать более понятными, например «С_Ожидаю команду_муж.wav» и «С_Ожидаю команду_жен.wav» вполне корректны;
- комплект мужских сообщений копируем в папку «1», а женских в папку «2».
Теперь в зависимости от состояния переключателя “Dir1 / Dir2” по одной и той-же команде будут воспроизводиться треки из «мужской» или «женской» папки.

5.4 Индикация работы устройства.

Так как у тини2313 очень мало ног, и почти все задействованы на переключатели, мне пришлось пожертвовать нормальной индикацией, а взамен приделать нечто НЕ нормальное. Для индикации разных режимов работы используется всего одна нога микроконтроллера, к которой подключены два светодиода - красный и зеленый (ну или какие Вам больше нравятся). Различные режимы работы устройства отображаются определенным цветовым кодом:
- мигает красный светодиод - отсутствует SD карта или ее тип не поддерживается устройством;
- горит красный светодиод - SD карта поддерживается и удачно проинициализировалась, но карта отформатирована не в FAT16;
- горит зеленый светодиод - SD карта удачно проинициализировалась, найдена нужная файловая система и устройство готово воспроизводить трек - ожидание команды;
- мигает зеленый светодиод - устройство воспроизводит трек;
- горит зеленый, кратковременно загорается красный, опять горит зеленый - не найден трек;
- горит зеленый, кратковременно тухнет и вновь загорается зеленый - нажата клавиша выбора трека.

5.5 Отладочная информация.

Для облегчения поиска проблемных мест (в случае если устройство не хочет работать) я каждый этап инициализации в программе продублировал сообщениями по UART. После каждого успешного шага в UART отправляется соответствующий символ:
- “S” - (Start) периферия микроконтроллера проинициализирована нормально;
- “C” - (Card Init) SD карта проинициализирована нормально и поддерживается;
- “F” - (FAT Init) FAT система поддерживается;
- “1” - (No 1 Dir) нет папки «1» чтение будет осуществляться с корневой директории;
- “2” - (No 2 Dir) нет папки «2» чтение будет осуществляться с корневой директории;
- “R” - (Ready) устройство полностью готово - ожидает команды запука трека;
- Кроме того, при каждом запуске трека, в UART передается заглавная буква имени трека.

6 Треки для озвучивания Ваших устройств.

6.1 Конвертирование треков

Если в библиотеке выше ничего подходящего не нашлось, то заполучить необходимые треки можно в сети (есть много специальных сайтов для музыкантов и видео монтажа, где уже собраны большие библиотеки звуков), в инсталляциях игр (зачастую звуки игрового процесса разделены по трекам и сложены в отдельную папку). Еще можно вырезать звуковые эффекты из фильмов и музыкальных композиций. Найденые треки нужно переконвертировать в формат который поддерживает устройство. Напоминаю, формат файла должен быть - несжатым WAV. 32000 Гц, 1 канал, 8 бит (WAV PCM 8U)
Для конвертации в такой формат подойдет любой музыкальный редактор, или, если нужно просто преконвертировать трек без его правки -

Во многих устройствах бытовой техники и промышленной автоматики сравнительно недавних лет выпусков установлены механические счетчики. Они продукцию на конвейере, витки провода в намоточных станках и т. п. В случае выхода из строя найти аналогичный счетчик оказывается непросто, в отремонтировать невозможно ввиду отсутствия запасных частей. Автор предлагает заменить механический счетчик электронным. Электронный счетчик, разрабатываемый на замену механическому, получается слишком сложным, если строить его на микросхемах малой и средней степени интеграции (например, серий К176, К561). особенно если необходим реверсивный счет. А чтобы сохранить результат при выключенном питании, необходимо предусмотреть резервную батарею питания.

Но можно построить счетчик всего на одной микросхеме - универсальном программируемом микроконтроллере, имеющем в своем составе разнообразные периферийные устройства и способном решать очень широкий круг задач. Многие микроконтроллеры имеют особую область памяти - EEPROM. Записанные в нее (в том числе во время исполнения программы) данные, например, текущий результат счета, сохраняются и после отключения питания.

В предлагаемом счетчике применен микроконтроллер Attiny2313 из семейства AVR фирмы Almel. В приборе реализован реверсивный счет, вывод результата с гашением незначащих н

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

Схема счетчика представлена на рисунке. Шесть линий порта В (РВ2- РВ7) и пять линий порта D (PDO, PD1, PD4-PD6) использованы для организации динамической индикации результата счета на светодиодный индикатор HL1. Коллекторными нагрузками фототранзисторов VT1 и VT2 служат встроенные в микроконтроллер и включенные программно резисторы, соединяющие соответствующие выводы микроконтроллера с цепью его питания.

Увеличение результата счета N на единицу происходит в момент прерывания оптической связи между излучающим диодом VD1 и фототранзистором VT1, что создает нарастающий перепад уровня на входе INT0 микроконтроллера. При этом уровень на входе INT1 должен быть низким, т. е. фототранзистор VT2 должен быть освещен излучающим диодом VD2. В момент нарастающего перепада на входе INT1 при низком уровне на входе INT0 результат уменьшится на единицу. Другие комбинации уровней и их перепадов на входах INT0 и INT1 результат счета не изменяют.

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

Как уже сказано, детектором снижения напряжения питания служит встроенный в микроконтроллер аналоговый компаратор. Он сравнивает нестабилизированное напряжение на выходе выпрямителя (диодного моста VD3) со стабилизированным на выходе интегрального стабилизатора DA1. Программа циклически проверяет состояние компаратора. После отключения счетчика от сети напряжение на конденсаторе фильтра выпрямителя С1 спадает, а стабилизированное еще некоторое время остается неизменным. Резисторы R2-R4 подобраны так. что состояние компаратора в этой ситуации изменяется на противоположное. Обнаружив это, программа успевает записать текущий результат счета в EEPROM микроконтроллера еще до прекращения его функционирования по причине выключения питания. При последующем включении программа прочитает число, записанное в ЕЕРРОМ, и выведет его на индикатор. Счет будет продолжен с этого значения.

Ввиду ограниченного числа выводов микроконтроллера для подключения кнопки SB1, обнуляющей счетчик, использован вывод 13, служащий инвертирующим аналоговым входом компаратора (AIM) и одновременно - «цифровым» входом РВ1. Делителем напряжения {резисторы R4, R5) здесь задан уровень, воспринимаемый микроконтроллером как высокий логический При нажатии на кнопку SB1 он станет низким. На состояние компаратора это не повлияет, так как напряжение на входе AIN0 по-прежнему больше, чем на AIN1.

При нажатой кнопке SB1 программа выводит во всех разрядах индикатора знак «минус», а после ее отпускания начинает счет с нуля. Если при нажатой кнопке выключить питание счетчика, текущий результат не будет записан в EEPROM, а хранящееся там значение останется прежним.

Программа построена таким образом, что ее легко адаптировать к счетчику с другими индикаторами (например, с общими катодами), с другой разводкой печатной платы и т. п. Небольшая коррекция программы потребуется и при использовании кварцевого резонатора на частоту, отличающуюся более чем на 1 МГц от указанной.

При напряжении источника 15 В измеряют напряжение на контактах 12 и 13 панели микроконтроллера относительно общего провода (конт.10). Первое должно находиться в интервале 4…4.5 В, а второе - быть больше 3,5 В, но меньше первого. Далее постепенно уменьшают напряжение источника. Когда оно упадет до 9… 10 В, разность значений напряжения на контактах 12 и 13 должна стать нулевой, а затем поменять знак.

Теперь можно установить в панель запрограммированный микроконтроллер, подключить трансформатор и подать на него сетевое напряжение. Спустя 1,5…2 с нужно нажать на кнопку SB1. На индикатор счетчика будет выведена цифра 0. Если на индикатор ничего не выведено, еще раз проверьте значения напряжения на входах AIN0.AIN1 микроконтроллера. Первое должно быть больше второго.

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

Сегодня мы попробовать воспользоваться более простым микроконтроллером 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 и установить правильно фьюзы. Так как у нас нет кварцевого резонатора, то мы устанавливаем фьюзы именно так




Top