ATiny13 + Arduino IDE

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

Характеристики:

  • Высококачественный низкопотребляющий 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
    • Усовершенствованная схема формирования сброса при включении
    • Программируемая схема обнаружения кратковременных пропаданий питания
    • Встроенный откалиброванный генератор

Микроконтроллер ATtiny13 отлично подходит для маленьких и дешевых проектов, а поддержка средой программирования Arduino IDE заметно упрощает работу с микроконтроллером.

Для поддержки ATtiny13 в Arduino IDE необходимо выполнить несколько простых операций:

  • Добавление поддержки платы

Откройте в Arduino IDE вкладку Файл > Настройки и добавьте ссылку для менеджера плат

https://mcudude.github.io/MicroCore/package_MCUdude_MicroCore_index.json

Далее перейдите во вкладку Инструменты > Плата > Менеджер плат

Выберите и установите новую плату MicroCore by MCUdude.

Далее в Инструменты > Плата выберите плату ATtiny13.

  • Для прошивки скетча  Вам понадобится программатор USBAsp

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

Распиновка программатора USBAsp

В настройках платы нужно выбрать поддержку Attiny13 и установить частоту  9.6 MHz internal, остальные параметры менять не нужно. Далее необходимо выставить нужные фьюзы для микроконтроллера, чтобы он всегда работал на выбранной Вами частоте. Для этого в настройках Arduino IDE выберите программатор USBasb и нажмите Инструменты > Записать загрузчик. Эту операцию необходимо проводить всего один и снова повторить если Вы будете менять частоту работы микроконтроллера.

Для загрузки скетча в настройках Arduino IDE выберите программатор USBasb и во вкладке Скетч нажмите на Загрузить через программатор (или просто нажать кнопку — Загрузить)

Для примера, можно загрузить простой скетч мигания светодиода, к выводу 2 (PB3) контроллера подключите светодиод через резистор 200 Ом.

void setup() {
  DDRB |= (1 << 3);
}

void loop() {
  PORTB |= (1 << 3);
  delay(1000);
  PORTB &= ~(1 << 3);
  delay(1000);
}

После загрузки скетча, светодиод начнет мигать.

Далее я подготовил несколько примеров использования ATtiny13:

  • Простые часы на часах реального времени DS1307 (I2C) с семисегментным четырех разрядным индикатором на TM1637

Скетч — http://forum.rcl-radio.ru/viewtopic.php?pid=3377#p3377

  • Вольтметр 0…5 В с семисегментным четырех разрядным индикатором на TM1637, ИОН = VCC

Скетч — http://forum.rcl-radio.ru/viewtopic.php?pid=3392#p3392

  • Вольтметр 0…1,1 В с семисегментным четырех разрядным индикатором на TM1637, ИОН внутренний 1.1 В

Скетч — http://forum.rcl-radio.ru/viewtopic.php?pid=3393#p3393

  • Цифровой термометр на датчике DS18B20 с семисегментным четырех разрядным индикатором на TM1637

Скетч — http://forum.rcl-radio.ru/viewtopic.php?pid=3394#p3394

  • Автомат освещения

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

#include <avr/io.h>
#include <util/delay.h>
#define POROG 100 

int u_r,ur_sum;

int main(){
 DDRB |= (1 << PB2);
 PORTB &= ~(1 << PB2);
 ADCSRA = 0b10000100; 
 PORTB |=(1 << PB4);


while(1){
 for(int i=0;i<10;i++){
  ADMUX = 0b00000010; // input A2 (PB4)
  do{ADCSRA |= (1 << ADSC);}
   while ((ADCSRA & (1 << ADIF)) == 0);
    u_r = (ADCL|ADCH << 8);
    ur_sum=ur_sum+u_r;
  _delay_ms(1000);
 }
   u_r = ur_sum/10;ur_sum=0;
   if(u_r < POROG){PORTB &= ~(1 << PB2);}
     else{PORTB |=(1 << PB2);}
}}

Скетч использует 156 байт (15%) памяти устройства. Всего доступно 1024 байт.
Глобальные переменные используют 2 байт (3%) динамической памяти, оставляя 62 байт для локальных переменных. Максимум: 64 байт.

 

Comments

Добавить комментарий

Войти с помощью: