Attiny13

Программный код

Код программногоUART для Attiny13 написан на C. Скомпилировать его можно с помощью avr-gcc. Более подробная информация о том, как скомпилировать этот проект, находится здесь.

#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>

#define    UART_RX_ENABLED        (1) // Enable UART RX
#define    UART_TX_ENABLED        (1) // Enable UART TX

#ifndef F_CPU
# define        F_CPU           (1200000UL) // 1.2 MHz
#endif  /* !F_CPU */

#if defined(UART_TX_ENABLED) && !defined(UART_TX)
# define        UART_TX         PB3 // Use PB3 as TX pin
#endif  /* !UART_TX */

#if defined(UART_RX_ENABLED) && !defined(UART_RX)
# define        UART_RX         PB4 // Use PB4 as RX pin
#endif  /* !UART_RX */

#if (defined(UART_TX_ENABLED) || defined(UART_RX_ENABLED)) && !defined(UART_BAUDRATE)
# define        UART_BAUDRATE   (19200)
#endif  /* !UART_BAUDRATE */

#define    TXDELAY             (int)(((F_CPU/UART_BAUDRATE)-7 +1.5)/3)
#define RXDELAY             (int)(((F_CPU/UART_BAUDRATE)-5 +1.5)/3)
#define RXDELAY2            (int)((RXDELAY*1.5)-2.5)
#define RXROUNDED           (((F_CPU/UART_BAUDRATE)-5 +2)/3)
#if RXROUNDED > 127
# error Low baud rates unsupported - use higher UART_BAUDRATE
#endif

static char uart_getc();
static void uart_putc(char c);
static void uart_puts(const char *s);

int
main(void)
{
    char c, *p, buff;

    uart_puts("Hello World!\n");

    /* loop */
    while (1) {
        p = buff;
        while((c = uart_getc()) != '\n' && (p - buff) < 16) {
            *(p++) = c;
        }
        *p = 0;
        _delay_ms(10);
        uart_puts(buff);
    }
}

char
uart_getc(void)
{
#ifdef    UART_RX_ENABLED
    char c;
    uint8_t sreg;

    sreg = SREG;
    cli();
    PORTB &= ~(1 << UART_RX);
    DDRB &= ~(1 << UART_RX);
    __asm volatile(
        " ldi r18, % \n\t" // 1.5 bit delay
        " ldi %0, 0x80 \n\t" // bit shift counter
        "WaitStart: \n\t"
        " sbic %-2, % \n\t" // wait for start edge
        " rjmp WaitStart \n\t"
        "RxBit: \n\t"
        // 6 cycle loop + delay - total = 5 + 3*r22
        // delay (3 cycle * r18) -1 and clear carry with subi
        " subi r18, 1 \n\t"
        " brne RxBit \n\t"
        " ldi r18, % \n\t"
        " sbic %-2, % \n\t" // check UART PIN
        " sec \n\t"
        " ror %0 \n\t"
        " brcc RxBit \n\t"
        "StopBit: \n\t"
        " dec r18 \n\t"
        " brne StopBit \n\t"
        : "=r" (c)
        :  "I" (_SFR_IO_ADDR(PORTB)),
         "I" (UART_RX),
         "I" (RXDELAY),
         "I" (RXDELAY2)
        : "r0","r18","r19"
    );
    SREG = sreg;
    return c;
#else
    return (-1);
#endif /* !UART_RX_ENABLED */
}

void
uart_putc(char c)
{
#ifdef    UART_TX_ENABLED
    uint8_t sreg;

    sreg = SREG;
    cli();
    PORTB |= 1 << UART_TX;
    DDRB |= 1 << UART_TX;
    __asm volatile(
        " cbi %, % \n\t" // start bit
        " in r0, % \n\t"
        " ldi r30, 3 \n\t" // stop bit + idle state
        " ldi r28, % \n\t"
        "TxLoop: \n\t"
        // 8 cycle loop + delay - total = 7 + 3*r22
        " mov r29, r28 \n\t"
        "TxDelay: \n\t"
        // delay (3 cycle * delayCount) - 1
        " dec r29 \n\t"
        " brne TxDelay \n\t"
        " bst %, 0 \n\t"
        " bld r0, % \n\t"
        " lsr r30 \n\t"
        " ror % \n\t"
        " out %, r0 \n\t"
        " brne TxLoop \n\t"
        :
        :  "I" (_SFR_IO_ADDR(PORTB)),
         "I" (UART_TX),
         "I" (TXDELAY),
         "r" (c)
        : "r0","r28","r29","r30"
    );
    SREG = sreg;
#endif /* !UART_TX_ENABLED */
}

void
uart_puts(const char *s)
{
         while (*s) uart_putc(*(s++));
}

Цифровой мультиметр AN8009
Большой ЖК-дисплей с подсветкой, 9999 отсчетов, измерение TrueRMS…

Подробнее

Компиляция и загрузка

При использовании Arduino IDE

  • Удостоверьтесь, что в Arduino IDE установлено ядро ATtinyCore [].
  • Пройдите Tools -> Board -> ATtinyCore и выберите Attiny25/45/85 (No Bootloader).
  • Откройте Tools и выберите следующие опции платы:
    • Chip: ATtiny25 или ATtiny45 или ATtiny85 (в зависимости от того, какой МК вы используете в схеме);
    • Clock: 8 MHz (internal);
    • Millis/Micros: disabled;
    • B.O.D.Level: B.O.D. enabled (2.7V);
    • Остальные опции оставьте без изменений.
  • Подключите программатор к ПК и разъему внутрисхемного программирования на плате.
  • Перейдите к Tools -> Programmer и выберите свой внутрисхемный программатор (то есть, USBAsp).
  • Перейдите к Tools -> Burn Bootloader для записи фьюзов.
  • Откройте скетч PhoneChargeGuard и кликните Upload.

При использовании предварительно скомпилированного hex-файла

  • Удостоверьтесь, что консольная программа AVRDude [] установлена.
  • Подключите программатор к ПК и ATtiny.
  • Откройте терминальную программу.
  • Перейдите в папку с hex-файлом.
  • Выполните следующую команду (при необходимости замените «usbasp» на имя того программатора, который используете вы):

avrdude -c usbasp -p t85 -U lfuse:w:0xe2:m -U hfuse:w:0xd5:m -U efuse:w:0xff:m -U flash:w:phonechargeguard.hex

8 битный AVR микроконтроллер с 1 КБ внутрисистемно программируемой Flash памяти

Документация:

  1158 Kb Engl Описание микросхемы ATtiny2313 Предварительная информация
  Rus Система команд и архитектура
  Програмное обеспечение
  Инструментальные средства для 8-разрядных AVR-микроконтроллеров
  Примеры применения микроконтроллеров AVR в устройствах управления 3-фазными бесколлекторными электродвигателями постоянного тока

Отличительные особенности:

  • Высококачественный низкопотребляющий 8- битный AVR микроконтроллер
  • Передовая RISC архитектура
        — 120 команд, большинство которых выполняется за один тактовый цикл
        — 32 8 битных рабочих регистра общего применения
        — Полностью статическая архитектура
  • Энергонезависимая память программ и данных
        — 1 КБ внутрисистемно программируемой Flash памяти программы, способной выдержать 10 000 циклов записи/стирания
        — 64 байта внутрисистемно программируемой EEPROM памяти данных, способной выдержать 100 000 циклов записи/стирания
        — 64 байта встроенной SRAM памяти (статическое ОЗУ)
        — Программируемая защита от считывания самопрограммируемой Flash памяти программы и EEPROM памяти данных
  • Характеристики периферии
        — Один 8- разрядный таймер/счетчик с отдельным предделителем и два ШИМ канала
        — 4 канальный 10 битный АЦП со встроенным ИОН
        — Программируемый сторожевой таймер со встроенным генератором
        — Встроенный аналоговый компаратор
  • Специальные характеристики микроконтроллера
        — Встроенный отладчик debugWIRE
        — Внутрисистемное программирование через SPI порт
        — Внешние и внутренние источники прерывания
        — Режимы пониженного потребления Idle, ADC Noise Reduction и Power-down
        — Усовершенствованная схема формирования сброса при включении
        — Программируемая схема обнаружения кратковременных пропаданий питания
        — Встроенный откалиброванный генератор
  • Порты ввода — вывода и корпусное исполнение
        — 8 выводные PDIP и SOIC корпуса: 6 программируемых линий ввода-вывода
  • Диапазон напряжения питания
        — от 1.8 до 5.5 В
  • Индустриальный рабочий температурный диапазон
  • Потребление
        — Активный режим:
          290 мкА при частоте 1 МГц и напряжении питания 1.8 В
        — Режим пониженного потребления
          0.5 мкА при напряжении питания 1.8 В

Блок- схема ATtiny13:

Расположение выводов ATtiny13:

Общее описание:

ATATtiny13 — низкопотребляющий 8 битный КМОП микроконтроллер с AVR RISC архитектурой. Выполняя команды за один цикл, ATtiny13 достигает производительности 1 MIPS при частоте задающего генератора 1 МГц, что позволяет разработчику оптимизировать отношение потребления к производительности.

AVR ядро объединяет богатую систему команд и 32 рабочих регистра общего назначения. Все 32 регистра непосредственно связаны с арифметико-логическим устройством (АЛУ), что позволяет получить доступ к двум независимым регистрам при выполнении одной команды. В результате эта архитектура позволяет обеспечить в десятки раз большую производительность, чем стандартная CISC архитектура.

ATtiny13 имеет следующие характеристики: 1 КБ внутрисистемно программируемой Flash память программы, 64 байтную EEPROM память данных, 64 байтное SRAM (статическое ОЗУ), 6 линий ввода — вывода общего применения, 32 рабочих регистра общего назначения, 8 битный таймер/счетчик со схемой сравнения, внутренние и внешние источники прерывания, 4 канальный 10 битный АЦП, программируемый сторожевой таймер со встроенным генератором и три программно инициализируемых режима пониженного потребления. В режиме Idle останавливается ядро, но ОЗУ, таймер/счетчик, АЦП, аналоговый компаратор и система прерываний продолжают функционировать. В режиме Power-down регистры сохраняют свое значение, но генератор останавливается, блокируя все функции прибора до следующего прерывания или аппаратного сброса. В режиме ADC Noise Reduction останавливается вычислительное ядро и все модули ввода-вывода за исключением АЦП, что позволяет минимизировать шумы при выполнении преобразования.

Прибор изготовлен по высокоплотной энергонезависимой технологии изготовления памяти компании Atmel. Встроенная ISP Flash позволяет перепрограммировать память программы в системе через последовательный SPI интерфейс программой-загрузчиком, выполняемой в AVR ядре, или обычным программатором энергонезависимой памяти.

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

Главная —
Микросхемы —
DOC —
ЖКИ —
Источники питания —
Электромеханика —
Интерфейсы —
Программы —
Применения —
Статьи

Datasheets

Features
• High Performance, Low Power AVR 8-Bit Microcontroller
• Advanced RISC Architecture • • • • • • •
• — 120 Powerful Instructions — Most Single Clock Cycle Execution
— 32 x 8 General Purpose Working Registers
— Fully Static Operation
— Up to 20 MIPS Througput at 20 MHz
High Endurance Non-volatile Memory segments
— 1K Bytes of In-System Self-programmable Flash program memory
— 64 Bytes EEPROM
— 64 Bytes Internal SRAM
— Write/Erase cyles: 10,000 Flash/100,000 EEPROM
— Data retention: 20 years at 85°C/100 years at 25°C (see page 6)
— Programming Lock for Self-Programming Flash & EEPROM Data Security
Peripheral Features
— One 8-bit Timer/Counter with Prescaler and Two PWM Channels
— 4-channel, 10-bit ADC with Internal Voltage Reference
— Programmable Watchdog Timer with Separate On-chip Oscillator
— On-chip Analog Comparator
Special Microcontroller Features
— debugWIRE On-chip Debug System
— In-System Programmable via SPI Port
— External and Internal Interrupt Sources

Просмотр и загрузка
Datasheet ATtiny13, ATtiny13V — Summary

PDF, 574 Кб, Версия: 08-01-2010, Файл закачен: 3 авг 2017, Страниц: 228-bit AVR Microcontroller with 1K Bytes In-System Programmable Flash

Выписка из документа

Features
• High Performance, Low Power AVR 8-Bit Microcontroller
• Advanced RISC Architecture • • • • • • •
• — 120 Powerful Instructions — Most Single Clock Cycle Execution
— 32 x 8 General Purpose Working Registers
— Fully Static Operation
— Up to 20 MIPS Througput at 20 MHz
High Endurance Non-volatile Memory segments
— 1K Bytes of In-System Self-programmable Flash program memory
— 64 Bytes EEPROM
— 64 Bytes Internal SRAM
— Write/Erase cyles: 10,000 Flash/100,000 EEPROM
— Data retention: 20 years at 85°C/100 years at 25°C (see page 6)
— Programming Lock for Self-Programming Flash & EEPROM Data Security
Peripheral Features
— One 8-bit Timer/Counter with Prescaler and Two PWM Channels
— 4-channel, 10-bit ADC with Internal Voltage Reference
— Programmable Watchdog Timer with Separate On-chip Oscillator
— On-chip Analog Comparator
Special Microcontroller Features
— debugWIRE On-chip Debug System
— In-System Programmable via SPI Port
— External and Internal Interrupt Sources

Схема RGB лампы на Attiny13

Схема для сборки лампы представлена ниже.

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

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

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

Помимо самого микроконтроллера, на схеме присутствуют три полевых транзистора – здесь важно использовать транзисторы с логическим уровнем затвора, идеальным вариантом будут указанные на схеме IRLML0030, они полностью открываются от 5-ти вольт

Не лишним будет также установить токоограничивающие резисторы между выводами микроконтроллера и затворами, например, на 10-47 Ом, на печатной плате под них предусмотрены посадочные места. Также на схеме не указаны токоограничивающие резисторы для самих светодиодов – их сопротивление выбирается исходя из необходимого тока через светодиоды, и соответственно яркости свечения лампы. Оптимальным будет значение около 10 Ом для каждого светодиода (при питании схемы от 5 вольт), в этом случае и сами резисторы, и светодиод не будут сильно нагреваться, но общего уровня яркости хватит для большинства применений лампы.

Обратите внимание, что используемый RGB светодиод должен быть рассчитан на заданный ток, превышение допустимого тока светодиода приведёт к его быстрой деградации. Помимо этого, на плате также присутствует резистор 4,7 – 20 кОм для подтяжки RESET микроконтроллера к питанию, а также конденсаторы по питанию – не стоит ими пренебрегать, ведь ШИМ светодиодов может вызвать помехи по питанию, которые приведут к нестабильной работе микроконтроллера

Печатная плата изготавливается методом ЛУТ, файл с платой прилагается к статье. В нижней части можно увидеть большой прямоугольный полигон, граничащий со светодиодом – он работает в роли небольшого теплоотвода. При небольшой мощности его достаточно, но если ток через светодиод достаточно велик, потребуется отдельный радиатор для охлаждения.

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

Таким образом, получилась весьма миниатюрная плата с размерами 3х3 см. Для запуска схемы достаточно подвести питание в 5 вольт, микроконтроллер начнёт работу и светодиод сразу же начнёт светится.

Проверить правильность настройки очень просто – достаточно подать на затворы каждого из транзисторов по 5 вольт, при этом светодиод должен светится белым цветом без каких-либо оттенков.ъ

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

В общем получился интересный, недорогой, а главное сделанный своими руками LED светильник. Получившуюся плату следует поместить в любой красивый корпус, желательно выбирать матовый, для дополнительного рассеивания света. Скачать файлы проекта. Автор материала misha1279.

Способ программирования новых МК серии ATtiny

Одним из самых больших изменений в этих МК подвергся интерфейс программирования. В новой серии МК ATtiny применен интерфейс, получивший название Unified Program and Debug Interface (UPDI), – универсальный интерфейс программирования и отладки. В этом интерфейсе задействован вывод МК Reset/UPDI. Для программирования МК по интерфейсу UPDI и подачи корректных сигналов на вывод Reset/UPDI мы будем использовать плату Arduino Nano. После программирования МК плата Arduino Nano больше не понадобиться. Схема подключения платы Arduino Nano к МК изображена на Рисунке 4.

Рисунок 4. Схема подключения Arduino Nano в качестве UPDI программатора к МК ATtiny1614.

Шаг 1. Настраиваем плату Arduino Nano в качестве программатора

В секции загрузок доступен для скачивания архив SpenceKonde — jtag2updi.zip. Распакуйте архив в папку со скетчами Arduino и запрограммируйте плату Arduino Nano. Этот архив содержит скетч, который превращает Arduino Nano в UPDI программатор.

Примечание:
не пугайтесь, что файл jtag2updi.ino пустой, фактически, весь код находится в других файлах.

Чтобы предотвратить запись Arduino скетчей в плату Arduino Nano при программировании МК ATtiny1614, необходимо отключить линию Reset на Arduino. Сделать это можно, добавив конденсатор емкостью 10 мкФ между линией Reset Arduino и GND (см. Рисунок 4). Короткий импульс сброса будет сбрасывать только МК ATtiny1614, а не  Arduino. Плату Arduino можоно сбросить нажатием кнопки сброса в течение более длительного времени.

Между выводами D6 Arduino и Reset/UPDI МК ATtiny1614 необходимо включить резистор 4.7 кОм. Также необходимо подключить МК к питанию +5 В и GND (на плате Arduino Nano).

Шаг 2. Установка поддержки плат megaTinyCore в Arduino IDE

Пакет поддержки плат в Arduino IDE устанавливается с помощью менеджера плат. Для этого необходимо:

  • В меню «Настройки» (Preferences) добавить ссылку  http://drazzy.com/package_drazzy.com_index.json в менеджер дополнительных плат;
  • Запустить менеджер плат (Tools – Boards — Board Manager);
  • Найти в списке платы «megaTinyCore by Spence Konde» и нажать кнопку «Установить» (Install).

Шаг 3. Выбор программатора

После того как пакет дополнительных плат «megaTinyCore by Spence Konde» был установлен в Arduino IDE, в меню «Инструменты» (Tools) выбираем (Рисунок 5):

  • Плату «ATtiny1614/ATtiny1604/ATtiny814/ATtiny804/ATtiny414/ATtiny404/ATtiny214/ATtiny204»;
  • Тактовая частота: 16 МГц;
  • COM-порт, к которому подключен наш программатор на плате Arduino Nano;
  • Программатор: — «jtag2updi(megaTinyCore)».
Рисунок 5. Выбор типа платы и программатора для работы с МК ATtiny1614 в Arduino IDE.

При выполнении этих настроек убедитесь, что вы выбрали МК, который собираетесь запрограммировать. Кроме того, слеудет учитывать, что некоторые библиотеки не буду работать на тактовой частоте 20 МГц (например, Adafruit Neopixel), поэтому тактовую частоту нужно выбирать ниже – 16 МГц, а если МК питается от напряжения 3.3 В, то 8 МГц.

Экологический статус

ATTINY13-20MMU ATTINY13-20MMUR ATTINY13-20MU ATTINY13-20MUR ATTINY13-20PU ATTINY13-20SQ ATTINY13-20SQR ATTINY13-20SSQ ATTINY13-20SSQR ATTINY13-20SSU ATTINY13-20SSUR ATTINY13-20SU ATTINY13-20SUR ATTINY13V-10MMU ATTINY13V-10MMUR ATTINY13V-10MU ATTINY13V-10MUR ATTINY13V-10PQ ATTINY13V-10PU ATTINY13V-10SSU ATTINY13V-10SSUR ATTINY13V-10SU ATTINY13V-10SUR
RoHS Совместим Совместим Совместим Совместим Совместим Совместим Совместим Совместим Совместим Совместим Совместим Совместим Совместим Совместим Совместим Совместим Совместим Совместим Совместим Совместим Совместим Совместим Совместим

Статус

ATTINY13-20MMU ATTINY13-20MMUR ATTINY13-20MU ATTINY13-20MUR ATTINY13-20PU ATTINY13-20SQ ATTINY13-20SQR ATTINY13-20SSQ ATTINY13-20SSQR ATTINY13-20SSU ATTINY13-20SSUR ATTINY13-20SU ATTINY13-20SUR ATTINY13V-10MMU ATTINY13V-10MMUR ATTINY13V-10MU ATTINY13V-10MUR ATTINY13V-10PQ ATTINY13V-10PU ATTINY13V-10SSU ATTINY13V-10SSUR ATTINY13V-10SU ATTINY13V-10SUR
Статус продукта В производстве (Подходит для новых разработок, но могут существовать и более новые альтернативы) В производстве (Подходит для новых разработок, но могут существовать и более новые альтернативы) В производстве (Подходит для новых разработок, но могут существовать и более новые альтернативы) В производстве (Подходит для новых разработок, но могут существовать и более новые альтернативы) В производстве (Подходит для новых разработок, но могут существовать и более новые альтернативы) В производстве (Подходит для новых разработок, но могут существовать и более новые альтернативы) В производстве (Подходит для новых разработок, но могут существовать и более новые альтернативы) В производстве (Подходит для новых разработок, но могут существовать и более новые альтернативы) В производстве (Подходит для новых разработок, но могут существовать и более новые альтернативы) В производстве (Подходит для новых разработок, но могут существовать и более новые альтернативы) В производстве (Подходит для новых разработок, но могут существовать и более новые альтернативы) В производстве (Подходит для новых разработок, но могут существовать и более новые альтернативы) В производстве (Подходит для новых разработок, но могут существовать и более новые альтернативы) В производстве (Подходит для новых разработок, но могут существовать и более новые альтернативы) В производстве (Подходит для новых разработок, но могут существовать и более новые альтернативы) В производстве (Подходит для новых разработок, но могут существовать и более новые альтернативы) В производстве (Подходит для новых разработок, но могут существовать и более новые альтернативы) В производстве (Подходит для новых разработок, но могут существовать и более новые альтернативы) В производстве (Подходит для новых разработок, но могут существовать и более новые альтернативы) В производстве (Подходит для новых разработок, но могут существовать и более новые альтернативы) В производстве (Подходит для новых разработок, но могут существовать и более новые альтернативы) В производстве (Подходит для новых разработок, но могут существовать и более новые альтернативы) В производстве (Подходит для новых разработок, но могут существовать и более новые альтернативы)

Пример Blink

Для проверки программатора загрузим в МК скетч мигания светодиодом (Blink). Для этого подключите светодиод и резистор к выводу 2 (порт PA4) МК ATtiny1614, как показано на  Рисунке 7. На схеме также изображен программатор на плате Arduino Nano.

Рисунок 7. Принципиальная схема подключения светодиода к МК ATtiny1614 для проверочного
скетча Blink.

Откройте в Arduino IDE файл Blink_ATTiny1614.ino и загрузите его в МК с помощью команды «Upload using programmer» в меню «Sketch». В процессе загрузки скетча проигнорируйте сообщения об ошибке программатора «avrdude: jtagmkII_initialize(): Cannot locate «flash» and «boot» memories in description». После загрузки скетча подключенный к МК светодиод начнет мигать (Рисунок 8).

Рисунок 8. Пример подключения светодиода к МК Attiny1614 на монтажной плате.

Обратите внимание, что физический вывод 2 (PA4) МК в Arduino IDE является портом D0 (см. карту портов ввода/вывода на Рисунке 6)

Параметры

Parameters / Models ATTINY13-20MMU ATTINY13-20MMUR ATTINY13-20MU ATTINY13-20MUR ATTINY13-20PU ATTINY13-20SQ ATTINY13-20SQR ATTINY13-20SSQ ATTINY13-20SSQR ATTINY13-20SSU ATTINY13-20SSUR ATTINY13-20SU ATTINY13-20SUR ATTINY13V-10MMU ATTINY13V-10MMUR ATTINY13V-10MU ATTINY13V-10MUR ATTINY13V-10PQ ATTINY13V-10PU ATTINY13V-10SSU ATTINY13V-10SSUR ATTINY13V-10SU ATTINY13V-10SUR
Рабочий диапазон температур, °C от -40 до +85 от -40 до +85 от -40 до +85 от -40 до +85 от -40 до +85 от -40 до +105 от -40 до +105 от -40 до +105 от -40 до +105 от -40 до +85 от -40 до +85 от -40 до +85 от -40 до +85 от -40 до +85 от -40 до +85 от -40 до +85 от -40 до +85 от -40 до +105 от -40 до +85 от -40 до +85 от -40 до +85 от -40 до +85 от -40 до +85

Программирование контроллеров AVR AtTiny13 / 25

Материал собран по интернету, любой желающий может найти
самостоятельно множество вариантов схем, плат, программ.

Я выбрал наиболее простой для наколенного исполнения способ
и описываю его.

Для начала вам понадобится программа.

Я предлагаю использовать.
PonyProg.

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

С этой версией у меня все зашилось. Я специально это
проверял при подготовке статьи.

Теперь понадобится программатор

Я использовал так называемые .

Мой макет выглядит так.

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

Схема. У меня микросхема программируется, когда питание на
нее идет от 13 ноги DRB-25M, но это не очень хорошо,
поэтому питание предлагается брать на USB разъеме. Там гарантированные 5В.

Плата для лазерно-утюжного метода:

Вариант для печати лежит тут.

Сборка вот:

Для изготовления понадобятся 4 сверла, но можно обойтись и
двумя диаметрами

1 и 3мм.

Как работать с ПО

Устанавливаем PonyProg.

Напомню, дистрибутив есть здесь.

После установки и запуска возникнет такое окно.

Далее программатор сообщит, что надо выполнить калибровку и
установить тип адаптера.

Калибровка выполняется автоматически и там показывать
нечего.

А вот так надо выставить тип адаптера.

Далее открываем HEX файл.

Жмем кнопку Write Program Memory (пятая слева кнопка)

И радуемся, что микросхема удачно зашилась.

Жмем кнопку Configuration and security
bits (Восьмая слева)

Программа считает текущие параметры.

На всякий случай жмем Read.

Выставляем биты как указано и жмем Write.

ВНИМАНИЕ! Не верная установка
какого-нибудь бита может привести к тому, что контроллер придется выбросить,
или искать профессиональный программатор, для того, чтобы привести его в
чувство

Некоторые мои проекты требуют использования 1 вывода процессора,
для его использования необходимо зашить бит RSTDISBL, что PonyProg делать не умеет, тут придется воспользоваться
CodeVision. Но учите, сделать это можно только один раз

После прошивания этого бита, больше таким программатором
стереть/прошить этот контроллер не удастся. В проектах, где это необходимо, я отмечаю об этом специально.

Теперь микросхема зашита и готова к работе. Удачи.

Да, также через такой адаптер можно шить из CodeVision AVR.

Открывем программу

Настраиваем тип программатора

Открываем проект

Настраиваем, если необходимо

Компиллируем

Выставляем настройки программирования и программируем, нажав Programm All

Про EEPROM отвечаем нет

Про RSTDISBL отвечаем да, и после этого чип больше не перепрограммируется этим программатором!

Скетчи на ATtiny84

Итак, у нас Arduino Uno. Как же нам запрограммировать нашу «тиньку»? Для этого используется такое устройство, как программатор. Он необходим, чтобы залить прошивку в контроллер. Мы можем превратить нашу Arduino в программатор. Это элементарно делается путём заливки скетча ArduinoISP.

Делаем программатор и собираем схему

Открываем соответствующий скетч «Файл → Примеры → ArduinoISP» и заливаем его. Все, превращение завершено. Теперь необходимо правильно собрать схему, чтобы прошить «тиньку». Обратимся к коду скетча, который был только что залит. Даже не к коду, а к комментарию перед ним.

ArduinoISP.ino
// This sketch turns the Arduino into a AVRISP
// using the following arduino pins:
//
// pin name:    not-mega:         mega(1280 and 2560)
// slave reset: 10:               53 
// MOSI:        11:               51 
// MISO:        12:               50 
// SCK:         13:               52 
//
// Put an LED (with resistor) on the following pins:
// 9: Heartbeat   - shows the programmer is running
// 8: Error       - Lights up if something goes wrong (use red if that makes sense)

// 7: Programming - In communication with the slave

Сначала подключим светодиоды таким образом, как описано в комментарии, не забывая резисторы. После сборки схемы и подачи питания, светодиод, подключенный к пину 9 «Heartbeat» будет моргать, обозначая нормальное функционирование. Если этого не произошло, то ищите ошибки в подключении.

Arduino UNO ATtiny84
Reset 10 4
MOSI 11 7
MISO 12 8
SCK 13 9

Теперь подключим светодиод и переменный резистор.
Резистор необходимо подключить в пину №6 (PA7), поскольку этот пин может быть входом для аналого-цифрового преобразователя, а светодиод — к любому другому, например, к 10 (PA3).

О нумерации пинов

Стоит немного рассказать о различии нумерации пинов в Arduino и при использовании «чистого» кода C. В Ардуино пины нумеруются последовательно и исключаются системные (питание, земля и т. д.), а в реальности всё немного иначе. Все выводы контроллера можно охарактеризовать двумя парметрами: номер порта (порт А, порт В и т.д.) и номер вывода (1..8).

Для используемой нами ATtiny84 нумерация будет аналогична. В библиотеке Arduino-tiny, о которой речь пойдёт далее, можно найти следующую таблицу соответствия:

// ATMEL ATTINY84 / ARDUINO
//
//                           +-\/-+
//                     VCC  1|    |14  GND
//             (D  0)  PB0  2|    |13  AREF (D 10)
//             (D  1)  PB1  3|    |12  PA1  (D  9) 
//                     PB3  4|    |11  PA2  (D  8) 
//  PWM  INT0  (D  2)  PB2  5|    |10  PA3  (D  7) 
//  PWM        (D  3)  PA7  6|    |9   PA4  (D  6) 
//  PWM        (D  4)  PA6  7|    |8   PA5  (D  5)        PWM
//                           +----+

В соответсвии с назначением каждой ножки контроллера, аналоговые пины (те, у которых есть вход АЦП) нумеруются в скетче по каналу АЦП.
Напримем, пин сфизическим номером 11 может быть входом для второго канала АЦП (ADC2), поэтому в скетче он будет называться A2.

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

Программируем ATtiny84

Выбираем в качестве нужного устройства «Сервис → Плата → ATtiny84 @ 8 MHz (internal oscillator; BOD disabled)» поскольку у нас нету внешнего кварца, который задает частоту работы контроллера. В качестве программатора выберем — «Сервис → Программатор → Arduino as ISP».

В качестве кода берем уже написанный нами код для светодиода и подстроечного резистора и изменяем там номера пинов.

attiny.ino
// Номер пина для светодиода
int ledPin = 2;   
 
// Номер аналогового пина   
int analogPin = A2;   
 
// В эту переменную считываем значение с аналогового входа
int val = ;         
 
void setup()
{ 
  // Настраиваем пин светодиода на выход
  pinMode(ledPin, OUTPUT);   
}
 
void loop()
{ 
  // Считываем значение
  val = analogRead(analogPin);   
 
  // val содержит значение из диапазона 0..1023, а диапазон значений для analogWrite
  // 0..255. Для этого делим val на 4
  analogWrite(ledPin, val4);  
}

Аппаратная часть

Прибор снабжен входным разъемом типа USB-A, на выходе установлено гнездо USB-A; таким образом, оно может быть подключено между источником питания и мобильным телефоном (или другим устройством). Сигнальные линии USB интерфейса (D+ и D-) не используются в приборе и проходят от входного до выходного разъема, чтобы заряжаемое устройство могло согласовывать протокол зарядки.

Принципиальная схема прибора изображена на Рисунке 2. Все проектные файлы, включая корпус для 3D печати, доступны для скачивания в разделе загрузок, в репозитории на сайте Github.com [], а также в онлайн среде проектирования EasyEDA [].

Рисунок 2. Принципиальная схема прибора для контроля зарядки Li-Ion аккумулятора.

Для измерения зарядного тока и напряжения аккумулятора используется микросхема INA219, представляющая собой цифровой датчик тока, напряжения и мощности с I2C совместимым интерфейсом. Микросхема контролирует как падение напряжения на шунте, так и напряжение питания шины, и поддерживает конфигурирование времени преобразования и фильтрации данных. Программируемое калибровочное значение в сочетании с внутренним умножителем позволяют получать значения тока в амперах. Выбранное значение шунта, равное 8 мОм, оказывает незначительное влияние на схему, но обеспечивает измерение тока с разрешением 1 мА. Для повышения точности измерения следует выбирать резистор шунта с низким допустимым отклонением сопротивления (1% или лучше).

Для питания МК и периферии используется линейный регулятор напряжения 3.3 В серии HT7333, поэтому максимальное входное напряжение от интерфейса USB может составлять 12 В.

Подключение заряжаемого устройства к источнику питания осуществляется с помощью P-канального MOSFET AS3621. Несмотря на небольшие размеры, транзистор способен непрерывно коммутировать напряжение 30 В при токе 6 А. Его внутреннее сопротивление во включенном состоянии составляет всего 20 мОм.

Пользовательский интерфейс образуют пять кнопок (RESET, SELECT, INCREASE, DECREASE, START) и OLED дисплей с интерфейсом I2C и разрешением 128×64 точек (Рисунок 3). МК Attiny45/85 выполняет поддержку пользовательского интерфейса, контролирует подключение источника питания, вычисления и отображение измеренных величин на дисплее.

Рисунок 3. Вид печатной платы USB Phone Charger Guard, расположение
кнопок и элементов.

Микросхема INA219 непрерывно измеряет ток и напряжение и передает полученные данные в МК по интерфейсу I2C. По этим данным МК рассчитывает остальные параметры и отображает их на дисплее. Управление подачей питания на заряжаемое устройство осуществляется в зависимости от введенных пользователем ограничений. Все пользовательские параметры сохраняются в EEPROM и автоматически используются при следующем включении прибора.

Протокол I2C для управления OLED дисплеем реализован методом программной эмуляции. Алгоритм специально разрабатывался под ограниченные ресурсы ATtiny10 и Attiny13, но должен работать и на некоторых других микроконтроллерах AVR, включая ATtiny84. Функции управления адаптированы для контроллера OLED дисплея SSD1306, но их можно легко изменить для работы с другими дисплеями. В целях экономии ресурсов реализованы только необходимые для этого проекта функции.