Работа с микроконтроллерами: прошивка с помощью arduino

Содержание

Программирование контроллеров 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 отвечаем да, и после этого чип больше не перепрограммируется этим программатором!

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 —
ЖКИ —
Источники питания —
Электромеханика —
Интерфейсы —
Программы —
Применения —
Статьи

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

Код программного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 имеет встроенный набор плат и микроконтроллеров, с которыми можно работать; в её основе лежит классический программатор AVR, кстати, благодаря ему и можно обращаться к устройству командами на Си.

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

  • сервопривод;
  • транзистор;
  • светодиод;
  • соленоид и т. д.

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

Step 3: Programming

You are now all set to upload your sketch to the attiny13a, make good use of its 1024 bytes of internal memory! 😉

  • Open the IDE
  • Click File>Examples>Basic>Blink
  • Change line 11 from «pinMode(13, OUTPUT);» to «pinMode(4, OUTPUT);»
  • Change line 15 from «digitalWrite(13, HIGH);» to «digitalWrite(4, HIGH);»
  • Change line 17 from «digitalWrite(13, LOW);» to «digitalWrite(4, LOW);»
  • Click File>Upload using programmer

The IDE should now upload the sketch to your chip via your ArduinoISP programmer!
Once this is complete (~5 seconds) your LED should start blinking with a 1 second interval
To address pins in the Arduino IDE you should use their PB number from the diagram below (EG Pin1 = PB1 etc..)
If all you wanted to do was learn to program your chip, then congratulations! You are done!
If you would like to build a RC Servo Interpreter then keep reading.

Getting started with MicroCore

Ok, so you have downloaded and installed MicroCore, but how do you get the wheels spinning? Here’s a quick start guide:

  • Hook up your microcontroller as shown in the .
  • Open the Tools > Board menu item, and select ATtiny13.
  • Select your prefered BOD option. Read more about BOD .
  • Select your prefered clock frequency. 9.6 MHz internal oscillator is the default setting. Do not use the external oscillator option if you don’t have an external clock source. Remember that a regular two pin crystal will not work on the ATtiny13.
  • If you want you can change the compiler flags for further optimization. Leave this on the default setting if you don’t know what compiler flags are.
  • Select what kind of programmer you’re using under the Programmers menu. Use one of the slow programmers if you’re using the 600 or 128 kHz oscillator option, e.g USBtinyISP (slow).
  • Hit Burn Bootloader to burn the fuses. The «settings» are now stored on the microcontroller!
  • Now that the correct fuse settings is sat you can upload your code by using your programmer tool. Simply hit Upload, and the code will be uploaded to the microcontroller.
  • If you want to do some changes; change the BOD option for instance, you’ll have to hit Burn Bootloader again.

Supported clock frequencies

The ATtiny13 has several internal oscillators, and these are the available clock frequencies:

  • 9.6 MHz internal oscillator (default)
  • 4.8 MHz internal oscillator
  • 1.2 MHz internal oscillator
  • 600 kHz internal oscillator *
  • 128 kHz internal watchdog oscillator *

If you want other or higher clock frequencies, you can apply an external clock source. Note that the ATtiny13 requires an external clock signal, and is not able to drive a resonator circuit itself. You may use a quartz crystal oscillator or a crystal driver (shown in ).
Supported external clock frequencies:

  • 20 MHz external oscillator
  • 16 MHz external oscillator
  • 12 MHz external oscillator
  • 8 MHz external oscillator
  • 1 MHz external oscillator

Select the ATtiny13 in the boards menu, then select the clock frequency. You’ll have to hit «Burn bootloader» in order to set the correct fuses. Make sure you connect an ISP programmer, and select the correct one in the «Programmers» menu. * Make sure to use one of the «slow» programmer options when using the 600 or 128 kHz option (e.g USBtinyISP (slow)).

Начинаем с простого скетча

Собирать мы будем устройство с потенциометром и светодиодом. В зависимости от угла поворота потенциометра будет изменяться яркость светодиода.
Подключаем к Arduino ледующим образом: светодиод подключаем к цифровому пину №6 (поскольку на нем есть возможность генерации ШИМ-сигнала, за счет которого будет регулироваться яркость светодиода), а потенциометр — к аналоговому пину №0.
Скетч содержит следующий код:

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

Обозначения индексов микроконтроллеров

После обозначения базовой версии и серии микроконтроллера, через дефис идет индекс, указывающий вариант исполнения микроконтроллера.Индекс состоит из 1-2 цифр, которые означают максимальную частоту, на которой микроконтроллер может стабильно работать при нормальном для него напряжении питания, и из 1-3 букв, которые обозначают вариант корпуса, температурный диапазон работы, и особенности изготовления.Первая буква (или две буквы) после частоты обозначает тип корпуса:P — корпус DIP (PDIP)A — корпус TQFPM — корпус MLFTS — корпус SOT-23 (ATtiny4/5/9/10)J — корпус PLCCA — корпус UDFN/USONC — корпус CBGACK — корпус LGAS — корпус EIAJ SOICSS — узкий корпус JEDEC SOICT — корпус TSOPX — корпус TSSOP

Следующая буква означает температурный диапазон и особенности изготовления:C — коммерческий температурный диапазон (0 °C — 70 °C)A — температурный диапазон −20 °C — +85 °C, с использованием бессвинцового припояI — индустриальный температурный диапазон (-40 °C — +85 °C)U — индустриальный температурный диапазон (-40 °C — +85 °C), с использованием бессвинцового припояH — индустриальный температурный диапазон (-40 °C — +85 °C), с использованием NiPdAuN — расширенный температурный диапазон (-40 °C — +105 °C), с использованием бессвинцового припояF — расширенный температурный диапазон (-40 °C — +125 °C)Z — автомобильный температурный диапазон (-40 °C — +125 °C)D — расширенный автомобильный температурный диапазон (-40 °C — +150 °C)
Еще в самом конце может быть буква R, которая означает, что микроконтроллеры упакованы в ленты для автоматизированных систем сборки

К примеру:ATmega8L-8AU — максимальная частота — 8 мегагерц, корпус — TQFP, индустриальный температурный диапазон (-40 °C — +85 °C), с использованием бессвинцового припояATmega8-16PN — максимальная частота — 16 мегагерц, корпус — PDIP, расширенный температурный диапазон (-40 °C — +105 °C), с использованием бессвинцового припоя

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

Линейка микроконтроллеров ATmegaЛинейка микроконтроллеров ATtiny

Маркировка микроконтроллеров AVR ATmega и ATtinyМаркировка микроконтроллеров AVR семейства ATmega и ATtiny, базовые версии и версии микроконтроллеров, индекс микроконтроллеров
Published by: Мир микроконтроллеров

Date Published: 04/27/2015

Blink led with Atmel Attiny13A, Arduino Ide and Proteaus Simulation

To prove that the upper configuration works i made a simple blink led project/program. Led toggles at very half a second. I connected the led to pin#PB4 of attiny13a. I used an internal 4.8Mhz crystal as clock source. On reset pin i connected a push button for resenting the microcontroller to run over again. Whole of the circuit is powered using a CR2032 cell. Cr2032 is a 3.3v coin cell. Attiny consumes very little power during operation. Atmel attiny series microcontrollers are considered to be the master’s of hibernation. They can remain in hibernation for years with very minute amount of power supply. Circuit diagram of the project is given below.


Project Circuit diagram Attiny13A Blink example.

Используем переходную плату

Одна из проблем при экспериментировании с этими новыми МК заключается в том, что они поставляются только в корпусах для поверхностного монтажа (SMD). Это затрудняет их использование на макетных платах. Для этой цели была разработана плата-адаптер, которая позволит использовать МК ATtiny1614 как стандартный элемент в форм-факторе DIL (Dual-In-Line). Принципиальная схема платы-адаптера изображена на Рисунке 2.

Рисунок 2. Принципиальная схема платы адаптера (SOIC-DIL) для МК ATtiny1614.

Плата была разработана в САПР Eagle, и проектные файлы доступны для скачивания в разделе загрузок (Рисунок 3). Стоит заметить, что расположение выводов переходной платы DIL форм-фактора отличается от расположения выводов МК в SMD корпусе. Сделано это было специально, чтобы плата адаптера получилась односторонней и ее можно было изготовить в домашних условиях по ЛУТ-технологии, сохранив стандартную ширину 0.3 дюйма. Выводы UPDI/Reset, VCC и GND выведены на отдельную планку, поэтому программатор можно подключить к МК, даже когда плата-адаптер уже запаяна на другую плату (в устройстве).

Рисунок 3. Проект платы адаптера (SOIC-DIL) для МК ATtiny1614 в САПР Eagle.

Скетчи на 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);  
}

Programming attiny13a using Arduino uno as Isp

Attiny13a can be programmed using arduino uno. Code can be uploaded using the following simple steps.

  • Connect arduino to PC. 
  • Select the right Port and arduino board, in our case “Arduino Uno”.
  • On arduino upload the sketch “ArduinoISP” given in the examples. Wait for sketch to be uploaded. Once uploaded move to next step.
  • Select “Arduino as ISP” from the Programmer drop down menu.
  • Select the right Port.
  • Select the “ATtiny13A standalone 4.8Mhz” from the Board drop down menu.
  • Open the sketch you want to upload to the attiny13a and upload the code by pressing the upload button. 


Attiny13a programmed with Arduino uno

Download the project code and simulation. Simulation is made in proteaus. The code folder contains the arduino code file and .hex file that can be burned to microcontroller directly for blink led program. Please give us your feed back on the project.

Programmers

When the ATtiny13 is running from the internal 600 or 128 kHz oscillator, it may be too slow to interact with the programming tool. That’s why this core adds some additional programmers to the list, with the suffix (slow). These options makes the programmers run at a lower clock speed, so the microcontroller can keep up.

Select your microcontroller in the boards menu, then select the clock frequency. You’ll have to hit «Burn bootloader» in order to set the correct fuses and upload the correct bootloader.
Make sure you connect an ISP programmer, and select the correct one in the «Programmers» menu.

Пример 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)

Плата Digispark с Arduino Attiny85

Совместимые платы могут как превосходить по характеристикам и размерам стандартные ардуино, так и быть меньше их, как было сказано выше. Отличным примером такой платы будет Digispark.

Характеристики платы довольно скромные, она поставляется с микроконтроллером, подготовленным для работы, arduino attiny85 – он представлен в восьминогом корпусе SOIC или более крупных размеров – DIP8. Характеристики весьма непритязательные:

  • постоянной памяти – 8 Кб, для программного кода и 512 для исполняемого;
  • так как доступно всего 8 выводов (ножек), вычтем две плюс и минус питания – получится 6 цифровых пинов, из которых 4 – это ADC и 2 PWM (ШИМ);
  • доступно только аппаратное прерывание;
  • контроллер работает на частотах от 1 до 20 МГц;
  • в зависимости от конкретного чипа напряжения питания различны от 1.8 до 5.5 Вольт;
  • в режиме энергосбережения потребляет мизерный ток в 0.1 мкА, при самом низком напряжении питания в 1.8 Вольт.

У оригинального digispark интересная конструкция, для его прошивки не нужно использовать micro USB кабель или USB-UART. Плата разведена таким образом, что, просто вставив ее в USB порт вашего компьютера, вы получите возможность программировать микроконтроллер.

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

Начинаем с простого скетча

Собирать мы будем устройство с потенциометром и светодиодом. В зависимости от угла поворота потенциометра будет изменяться яркость светодиода.
Подключаем к Arduino ледующим образом: светодиод подключаем к цифровому пину №6 (поскольку на нем есть возможность генерации ШИМ-сигнала, за счет которого будет регулироваться яркость светодиода), а потенциометр — к аналоговому пину №0.
Скетч содержит следующий код:

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