Распиновка attiny13 – Сообщества › Электронные Поделки › Блог › Универсальный адаптер для ATtiny13 в SOIC корпусе для прошивки в ARDUINO NANO

ATtiny13A

Микроконтроллер ATtiny13A принадлежит семейству микроконтроллеров AVR фирмы Atmel. ATtiny13A имеет 1кб Flash памяти и по 64 байта SRAM и EEPROM памяти. ATtiny13A может работать на частоте до 20МГц.

ATtiny13A выпускают в корпусах DIP-8, SOIC-8, QFN-10 и QFN-20

Синим цветом на рисунке показаны номера выводов соответствующие Arduino.

Микроконтроллер ATtiny13A имеет

  • 0..5 6 программируемых линий ввода-вывода (DIP-8)
  • 4…5, 2 4 несимметричных каналов 10-разрядных АЦП
  • 0…1 2 выхода с широтно-импульсной модуляцией (ШИМ (PWM))
  • Один 8-разрядный таймер-счетчик
  • 1 кб FLASH памяти программ
  • 64 байта SRAM
  • 64 байта EEPROM
  • 120 команд
  • 9 векторов прерываний
  • 7 внешних прерываний
  • 1 сторожевой таймер
  • 1 аналоговый компаратор
  • 1 встроенный RC-генератор
  • 1 схема BOD

Условные обозначения и описание ножек микроконтроллеров AVR ATtiny и ATmega

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

Далее мы приводим описание аббревиатур, которые Вы можете встретить в datasheet микроконтроллеров.


































PAnn-й разряд порта A
PBnn-й разряд порта B
PDnn-й разряд порта D
(IR)(Выходной контакт с повышенной нагрузочной способностью)
ADCnn-й вход АЦП
AREFВход опорного напряжения для АЦП
AVCCВывод источника питания АЦП
AIN0Положительный вход компаратора
AIN1Отрицательный вход компаратора
INTn Вход внешнего n-го прерывания
PCINTnВход внешнего n-го прерывания по изменению состояния вывода
XTAL1Вход тактового генератора
XTAL2Выход тактового генератора
CKOUTВыход системного тактового сигнала
CLKOВыход системного тактового сигнала
MOSIВход данных при программировании
MISOВыход данных при программировании
SCKВход тактового сигнала при программировании
DIВход данных модуля USI в режиме SPI
DOВыход данных модуля USI в режиме SPI
USCKВход/выход тактового сигнала модуля USI в режиме SPI
SDAВход/выход данных модуля USI в режиме TWI
SCLВход/выход тактового сигнала модуля USI в режиме TWI
RXDВход USART
TXDВыход USART
XCKВход/выход внешнего тактового сигнала USART
RESETСброс
TnВход внешнего тактового сигнала таймера/счетчика Tn
OCnXВыход X таймера/счетчика Tn
ICPВход захвата таймера/счетчика
dWВывод отладочного интерфейса debugWire
GNDОбщий провод
VCCПитание микросхемы

integrator.adior.ru

Прищепка-коннектор для Attiny13 — Tehnopage.ru

2015-09-09 в 21:50

В процессе работы с микроконтроллерами Attiny13 темболее в SOIC корпусе появляется необходимость в ускорении процесса программирования. Раньше это было так: брал контроллер, и подпаивался к необходимым выводам. Процесс подготовки занимал большую часть времени, чем сама заливка программы. Начал поиски способов и решений ускорить это дело. Нашел способ в котором используют слот для PCI карт компьютера. Хорош он тем что шаг контактов такой же как и в SOIC корпусах. Таким способом можно сделать прищепки для контроллеров с различным количеством выводов. Плох он тем что без спец инструмента правильно переделать его будет затруднительно. И я решил просто приобрести готовую прищепку для Attiny13 в SOIC-8 корпусе. Заказал на всем известном аукционе зажим-прищепку для SOIC-8 корпусов. Изначально, у меня пришел с напаянным шлейфом и разъемом ISP-10. Сразу же надо переделать его под распиновку Attiny13.

Исходя из распиновки микроконтроллера и разъема ISP-10 программатора USBASP получается вот такая красивая схема распайки шлейфа.

Получается, что сторона с двумя припаянными контактами будет подключаться к стороне мк где имеется ключ (точка на корпусе).

Должно получиться как у меня.

Рекомендую, шлейф прижимать к разъему таким образом. Это мне кажется будет удобнее.

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

Не пропустите обновления! Подписывайтесь на нашу группу Вконтакте!
Вам понравился наш материал? Поделитесь с друзьями!

Оценка статьи: 5.0 из 5. Уже оценило 1 читатель


Вам может быть это интересно

tehnopage.ru

Прошивка МК Attiny13A — DRIVE2

Приветствую Вас, друзья мои!
Ну вот наконец-то я подошёл к стадии шитья крестиком микросхем.И это моя первая микруха, с которой мне пришлось иметь дело.Ну а теперь по порядку, и к возникшим у меня вопросам =)
Итак, для прошивки у меня имеется купленный в кЕтае, и установленный на ноуте USBasp программатор…Прошивать мне надо было микроконтроллер ATtiny13A-10SSU, а значиЦа нужен адаптер.Изготавливаем платку, печатка позаимствована на драйве, если не ошибаюсь то в одной из тем пользователя himiks, за что ему респект и уважуха =)


Далее встал вопрос распиновки программатора, поисковик нам в помосЧь
По «железной» части вроде разобрались, и встаёт вопрос:»А чем же шить?»
Снова поисковик нам в помосЧь, и решено работать в SinaProg 1.5.5.10 (графическая оболочка для программы AVRdude, включающая в себя простой и функциональный AVR fuse-калькулятор)
Далее слегка помучил вопросами автора делающегося устройства и прошивки sunny-space, ему тоже респект и уважуха =)
Ну и подключаем микроконтроллер
Запускаем прогу, выставляем параметры программатора и МК, нажимаем на «Search» где должно появиться сообщение «Searching … OK»., и заливаем «кекс» в МК
Пару сек и видим надпись ОК.Правда зашилась микруха или нет так и не понял, мож спецы по скрину подскажут =)
Далее надо зашить фьюзы.По дефолту было так как в проге, а надо так как слева…
Выставил фьюзы, жму записать, и…тишина, только полоска бегает с надписью о записи и сё.Пришлось рубануть прогу…После реконнекта младший изменился на х71, который отличался от нужного хF1 только наличием галочкиА отсюда значиЦа возник вопрос:»Фьюзы получаеЦа зашились?»
Ну и резюмируя, вот такой вот он первый опыт вышивания крестиком прошивки микроконтроллеров =)
Ну воть как-то так =)
✔ Всех Вам благ, и ровных дорог!Всем пис peace, и до новых встреч =)

www.drive2.ru

Прошивка ATtiny13 при помощи Arduino UPD 17.03.2016

Итак, уже давненько появился способ программировать маленькие, дешёвые, маложрущие и доступные микрухи ATtiny13A.
Тут я Вам расскажу как можно зашивать Arduino’вские скетчи.
Итак, для начала нам нужно скачать данный архив(взято и доделано отсюда) положить файлы по адресу «\Documents\Arduino\hardware\» должно получится что-то типа «C:\Users\Администратор\Documents\Arduino\hardware\attiny13\avr\
cores\core13″.
Обязательно проверяем правильно ли у нас выбрано «расположение папки со скетчами», (посмотреть можно во вкладке «Файл/Настройки») :

Далее нам нужна сама микруха 🙂 Имеете? отлично. Теперь нам нужно узнать как при помощи Arduino прошить тиньку, более подробней:
Для начала прошьём в дуинку ArduinoISP из примеров Arduino IDE.

Потом подключим тини13 к ардуинке как показано на картинке:

Потом нужно изменить тип программатора на Arduino as ISP как показано на скришонте:


И выбрать нашу тиньку в списке как на скрине:

Частота 1.2 МГц — частота  контролера с завода, можно выбрать частоту и побольше если сильно нужно производительность, но не забываем что рост частоты приведёт за собой рост потребления контроллера, для каких-то там мигалок выполнение 1.2 миллиона инструкций будет с лихвой.
Изменяем частоту следующим образом:
— выбираем нужную нам частоту;
— жмём «Записать загрузчик», среда выставит все фьюзы контроллера таким образом чтобы он работал на нужной частоте.
И после того уже можно шить контролер, больше кнопку «Записать загрузчик» нажимать не нужно, прошиваем скетчи кнопкой «Загрузить с помощью программатора».
Итак, зашили blink — работает, отлично, я Вас поздравляю, «это маленький шаг для человека и большой шаг для человечества» 🙂 Как вы уже заметили скетч стал заметно легче ежели для Arduino Uno, это связано тем что урезаны большинство дуиновских функций.

100% поддерживаются следующие:

  • pinMode()
  • digitalWrite()
  • digitalRead()
  • analogRead()
  • analogReference(INTERNAL) / (EXTERNAL)
  • shiftOut()
  • pulseIn()
  • analogWrite()
  • millis()
  • micros()
  • delay()
  • delayMicroseconds()

Итак как мы ещё увидели доступно всего 1024 байта, но ведь это мало? «Вы есть много кушать» 🙂 большинству радиолюбителей для небольшой задач типа всяких мигалок, простеньких индикаторов или прочей мелочи — более чем достаточно, некоторые даже умудряются вольт-амперметры делать. Чтобы научится экономить рекомендую ознакомится, а ещё лучше изучайте AVR и Cи, я вот когда смогу побороть лень начну 🙂
Если будут какие-то вопросы их задавайте тут, хвастайтесь своими проектами на этой замечательной микрухе, я только за, интересно же.
Вот мой первый проект, там я получил несколько советов по оптимизации кода аля уменьшения размера скетча при той же функциональности.
Вот ещё товарищ подтянулся.
Распиновка из даташита:

Нипаняятна? PB4 это тоже что и pin 4 или просто 4. Аналоговые входы все на которых пишет ADC*, например PB4 это ADC2 или просто A2, ШИМ поддерживают порты 0 и 1.

Вкратце наверное всё 🙂 всем удачи, и удачных проектов.
Для 5 В питания просто идеально подходит линейный стабилизатор 78L05, они просто созданы друг для друга 🙂 тоже такой дешёвый, маленький и доступный.

razniepodelki.blogspot.com

ATtiny13 программатор

Программирование микроконтроллера AVR ATtiny13 в среде Arduino и с помощью программы avrdude.

В качестве программатора микроконтроллера ATtiny13 будем использовать плату Arduino UNO как описано в следующей статье ISP Программатор микроконтроллеров ATtiny из Arduino или самодельный программатор USB программатор своими руками на ATmega8. Для работы с микроконтроллером ATtiny13 в среде разработки Arduino, программу Arduino необходимо настроить, читайте Микроконтроллеры ATtiny в среде разработки Arduino. 

Воспользовавшись описанием микроконтроллера ATtiny13 (datashit) ATtiny13A, нарисуем схему подключения ATtiny13 к программатору:

Подключите программатор ATtiny13 к компьютеру, в среде разработки Arduino выберите меню:

  1. / /
  2. / /
  3. /

Таким образом, вы настроили программу Arduino и уже прошили фьюз биты микроконтроллера ATtiny13. В Arduino установить необходимые параметры микроконтроллера ATtiny13 (фьюзы) можно вручную в файле …arduino/hardware/…/boards.txt

С помощью программы Arduino программу на AVR-C (скетч, прошивку) заливают в микроконтроллер нажатием на кнопку Загрузить с помощью программатора. Нажатие на кнопку Загрузить с помощью программатора в программе Arduino запускает следующие программы командной строки (в Linux):

  1. avr-g++
  2. avr-ar
  3. avr-gcc
  4. avr-objcopy
  5. avrdude

Последняя из перечисленных программ загружает двоичный файл в микроконтроллер ATtiny13.

Загрузка фьюзов и прошивок в м-к ATtiny13 с помощью программы avrdude.

Avrdude — утилита командной строки, предназначенная для загрузки двоичных файлов микропрограмм в микроконтроллер с использованием программатора. Руководство по avrdude: man avrdude руководство пользователя.

С помощью следующей команды Вы установите фьюзы микроконтроллера ATtiny13 в старший 0xFF, 0x7A младший:

avrdude -C/home/dior/ProgramFiles/arduino-1.0.6/hardware/tools/avrdude.conf -v -v -v -v -pattiny13 -cstk500v1 -P/dev/ttyUSB0 -b19200 -e -Uhfuse:w:0xff:m -Ulfuse:w:0x7a:m

Следующая команда загрузит двоичный файл Blink01_ATtiny13.cpp.hex в микроконтроллер ATtiny13:

avrdude -C/home/dior/ProgramFiles/arduino-1.0.6/hardware/tools/avrdude.conf -v -v -v -v -pattiny13 -cstk500v1 -P/dev/ttyUSB0 -b19200 -Uflash:w:/tmp/build481490467907776681.tmp/Blink01_ATtiny13.cpp.hex:i

integrator.adior.ru

Слон и Моська, или подключение LCD к Attiny13A / Хабр

Вновь приветствую читателей «Хабра»!

Присказка.

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

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

Заказал для него стартовый комплект из Digispark’ов и 10-ти ваттных RGB светодиодов, потому что его первой же идеей, стало создание свето-динамической установки. Но проблема пришла откуда не ждали: недостаток задействованных аппаратных ШИМ — стал первой проблемой. А второй — друг захотел управлять одновременно несколькими светодиодами.

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

Сел за Atmel Studio и начал писать многоканальный софт-ШИМ, через 74HC595. За пару дней было написано несколько режимов управления, и реализованы все основные функции для организации многоканальных ШИМ, БАМ, а так же механизмы работы со светодиодными уровнями и семи-сегментными индикаторами.

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

Если у читателей появится огонь желания получить такую статью, я займусь. А без этого, мы же все помним, насколько я ленивый. 🙂

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

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

Итак, начнем:

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

Для работы был выбран сдвиговый регистр 74HC595, ввиду наличия защелки, позволяющей организовать вывод данных по-требованию. Дисплей совместимый с HD44780 (для работы в 4-х битном режиме), и микроконтроллер ATtiny13A.

Такой выбор был обусловлен не отсутствием более мощных микроконтроллеров, а сужением рамок поставленной задачи, количеством выводов, объемами памяти и ОЗУ, и просто — ради спортивного интереса.

Цель: создание кода, способного выполняться на заданном оборудовании, не в ущерб производительности, удобству использования и полноте функционала.

Запуск дисплея.

Первое, что необходимо было организовать, это вывод данных через сдвиговый регистр с приемлемой скоростью, что и было проделано с использованием трех ног «Тиньки».

Изображение описанного подключения таким образом:
Затем была написана функция для вывода данных в формате приемлемом для LCD. Эта функция является своеобразным ядром или драйвером библиотеки, на котором базируется весь последующий вывод. А так же дополнительная (вспомогательная функция), которая организует дробление данных на нибблы (полубайты), и отправляет их в LCD через сдвиговый регистр, вызывая основную функцию передачи данных.

Реализация функциональной части.

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

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


В этот момент, я нашел метод инициализации который никто не использует, но он подробно описан в ДШ фирмы HITACHI (если мне не изменяет память). Заключается он в том, что для переключения разрядности линии данных в LCD, необходимо чтобы первые ДВЕ команды были 4-х битными, и все!

Когда же я изучал вопросы управления LCD, читая различные сайты, там был описан известный многим стандартный режим инициализации.

Результатом стало написание двух функций инициализации, для избежания проблем при работе с LCD других производителей. Режим определяется директивой в начале программы.

После чего был определен сет функций, расширяющий базовый набор функций управления LCD, в который так же вошла функция позиционирования курсора, для двух типов устройств LCD — 1602 и 2004 (переключение типа организовано директивой в начале программы), и функция вывода символов:

Далее был написан вспомогательный набор функций верхнего уровня, для организации вывода на экран данных стандартных типов, как то: байт, слово, байт в HEX-виде, строка и т.п.

Для вывода числовых данных, были написаны функции быстрого деления на 10 и на 100, а так же вспомогательные макросы, которые «выгребают» остаток от соответствующего деления (трюк). Таким образом вместо 5-ти делений для вывода uint16, требуется меньшее количество делений — 4 вместо 8-ми, а для uint8 — 2 вместо 4-ёх. Так же написаны функции определения новых символов, функция перекодировки русского текста для строк в RAM, вывод строк из программной памяти с перекодировкой текста.

Вот этот набор:


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

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

Ну и в заключении, весь этот «винегрет» был расширен самым верхним набором функций,

организующим вывод данных в определенной позиции экрана. Сделано это было так же, через директиву #define:

Представленные выдержки кода показывают, насколько подробно код описан комментариями, чтобы не возникло проблем при его использовании. Итогом оптимизации стала возможность отображения довольно богатого вывода, при очень скромном размере кода, однако скорость его работы меня не впечатляла. А так же, после анализа использования стека и уровней вложенности, было решено переписать функцию ядра вывода, чтобы избавиться от вспомогательной функции (которая принимала 2 параметра), что сильно разгрузило стек, сократило код на 100 байт, но не очень ускорило вывод.

Модернизация аппаратной части.

И в этот момент я наткнулся на пример немцев 10-ти летней давности, которые организовали вывод данных в сдвиговый регистр, с использованием RC-цепочки. Во-первых реализация данного метода позволила освободить одну ногу микроконтроллера, а во-вторых, это подтолкнуло меня к новым размышлениям.

Так, проанализировав протокол передачи данных я понял, что вывод сигнала «Е»-LCD и вывод защелки сдвигового регистра совпадают!

А это значит, что можно освободить одну линию сдвигового регистра, и ускорить вывод данных в ДВА РАЗА!

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

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

Шина данных LCD (4 бита) занимает половину вывода одного сдвигового регистра, вторая половина может использоваться для индикации, что я и показал в демонстрационном примере.

Позже, я наткнулся на упрощенное описание использование RC-цепочки для сдвигового регистра на сайте DIHALT’a — easyelectronics.ru, и хотел разместить весь материал там, но не смог зайти под своим аккаунтом, хотя учетные данные ввел правильно. А может перепутал сайты — основной и сайт сообщества. В общем расстраиваться сильно не стал, DI все-равно привет 🙂

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

В дополнение, информация о подключении и использовании.

Выносить код в отдельную библиотеку я не стал, созданный код легко преобразуется для любой разработки связанной с выводом данных на LCD. К недостаткам можно отнести невозможность переконфигурирования шины данных LCD, сидящей на сдвиговом регистре, она всегда занимает линии с 0 по 3 (правда имеется возможность «отзеркалить» выводы сдвигового регистра, заменив команду левого сдвига «lsl» в функции вывода, на команду правого сдвига «rsl», что «перевернет» назначение выводов сдвигового регистра, и шина данных окажется на выводах с 7 по 4). А вот выводы микроконтроллера могут быть сконфигурированы любые, причем для любого МК, но с оговоркой: линии должны быть на одном порту (опять же, при условии переназначения номера порта в функции вывода, в рассматриваемом варианте порт = 0x16).

Код содержит пару-тройку хитрых трюков, которые могут быть полезны не только для указанной области (например деления на 10 и 100 с остатком).

Код не использует прерывания и другую периферию, кроме аппаратного ШИМ, который изначально был инициализирован для диагностических целей, а впоследствии оставлен для демонстрационного примера (линии порта PB0 — ШИМ, PB1 — инверсный ШИМ, меняется от состояния светодиодов). С помощью этого можно, например, контролировать яркость подсветки дисплея — программно.

Таким образом, это самая маленькая библиотека вывода данных на LCD (и пожалуй самая быстрая, и самая документированная в коде 🙂

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

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

Так же отмечу, что работоспособность проверена для частот МК 9.6 МГц и 4.8 МГц (для последнего необходимо изменить сопротивление RC-цепочки на 9к).

Конденсатор в железе должен быть 100 пф (10 пф — допуск на емкость ног порта МК).

Отдельно создана секция INIT3, для предварительной инициализации параметров МК и запуска дисплея после включения устройства, выглядит она так:

Примеры применения.

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

Видео эмуляции в программе Proteus это демонстрирует:



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

Некоторая техническая информация.

Из этих данных:


понятно, что демонстрационный пример использует 480 байт в функции main. Остальной код — использованные функции библиотеки, cp1251 — таблица перекодировки символов (33*2), HelloPGM — строковая константа «Привет, Хабр», и последние 4 фрагмента кода по 7 байт (строковые константы для вывода режимов: «Red», «Green», «Blue», «Yellow» выровненные пробелами), хранятся во flash-памяти.

1 байт RAM — занимает переменная состояний флагов светодиодов.

В видео, использованные символы встроены в библиотеку Proteus, которая была полностью перерисована. Поэтому в железе картинка будет отличаться. 🙂

Но работоспособность от этого не пострадает!

Временные параметры сигналов пульса и пакета данных для желающих:


Из которых видно, что длительности сигнала «0» и сигнала «1» (первый рис.), полностью совпадают по времени, так как функция вывода данных была оптимизирована с учётом полного устранения джиттера.
Второй рисунок отражает передачу одного пакета (байта) в LCD, так как шина данных 4-х разрядная, эта передача осуществляется в два этапа, между которыми следует задержка, чтобы LCD успел «переварить» первую часть данных.
Кому интересна функция вывода, она здесь:

(Здесь так же использован трюк с выводом, характерный только для МК компании Atmel).

Заключение.

Если кто-то решится воплотить моё творение в железе, и испытает проблемы с запуском, рекомендую поиграть с задержкой (указана директивой #define в секции описания глобальных данных). Будет необходима помощь, обращайтесь с вопросами в комментариях к статье, с радостью помогу. Чуть не забыл добавить: При использовании прерываний, придется обеспечить барьеры в функции вывода данных на линию, самостоятельно (в конце функции есть примеры сохранения и восстановления SREG (регистр состояния) под комментарием). Иначе возникнет проблема вызова прерывания во время функции передачи данных, что приведет к отказу работоспособности (инструкций: cli и sei — не достаточно!).

Как всегда — постскриптум:

Решил я проверить, насколько адаптируем код для новых разработок связанных с выводом данных, и первое что пришло на ум, это реализация вольт-метра на ATtiny13A.



Разработка представленной реализации заняла не более 30 минут, большую часть которых заняло проектирование схемы.

Двух-канальный ампер-, вольт-метр:

1 канал: 0-60V, 0-40A

2 канал: 0-15V, 0-10A

Размер кода: 760 байт

Использованная периферия: ADC0, ADC1, ADC2, ADC3

RESET — запрещён, используется весь PORTB.

Возможно в статье допущены неточности, так же, неточности возможны в результатах профилирования указанных в коде на полях, код переписывался неоднократно. Относительно работоспособности кода могу заверить что все функции протестированы много раз.
Исходный код демонстрационного примера для Atmel Studio 7.0, и проект для Proteus 8.3 sp2 — прилагается, дальнейшие изменения выкладываться не будут.

Как всегда, всем желаю успехов в творчестве… да и в прочих начинаниях!

Скорейшей весны!

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

habr.com