RSS блога
Подписка
Микроконтроллеры ATTiny13A. Восстанавливаем новогоднюю елку.
- Цена: $4.83/10шт
- Перейти в магазин
Иногда нужно запрограммировать маленькую задачку, для которой даже Ардуино слишком избыточен. Для таких небольших задач могут подойти маленькие, недорогие и очень маломощные контроллеры ATTiny.
В этом обзоре я и расскажу о них, как их готовить и с чем есть.
Купил я ATTiny13 довольно давно. Лежали они и ждали своего часа. И тут на работе я нашел настольную световодную елочку со сгоревшей начинкой. Вот тут то и вспомнил про этик контроллеры.
Но все по порядку
В этом обзоре я и расскажу о них, как их готовить и с чем есть.
Купил я ATTiny13 довольно давно. Лежали они и ждали своего часа. И тут на работе я нашел настольную световодную елочку со сгоревшей начинкой. Вот тут то и вспомнил про этик контроллеры.
Но все по порядку
Начнем с характеристик ATTiny13
Это 8-битные контроллеры от корпорации Atmel c RISC-архитектурой и сверхнизким потреблением.- Память для программ (FLASH) — 1Кб
- Энергонезависимая память данных (EEPROM) — 64 Байт
ОЗУ — 64 Байт
Число входов/выходов — 6
Выходов ШИМ — 2
Аналоговых входов (АЦП 10бит) — 4
Таймер 8 бит — 1
Напряжение питания 1.8 — 5.5В
Рабочая частота — до 20МГц
Потребление в активном режиме 1.8В/ 1МГц — 190мкА
Потребление в режиме сна 1.8В/1МГц — 24мкА
Подробнее можно узнать из даташитаЯ приобрел тиньки в корпусе DIP8. В корпусе SOP8 они стоят дешевлеПо сравнению с ATMega328P из этого обзора они очень маленькие - random()
- randomSeed()
- millis()
- micros()
- delay()
- delayMicroseconds() *
- analogRead()
- analogWrite()
- pinMode()
- digitalRead()
- digitalWrite()
- pulseIn() (Untested)
- shiftIn() (Untested)
- shiftOut() (Untested)
Программирование ATTiny
Программировать я решил из Arduino IDE, Тем более я уже настраивал эту среду для работы с «народным WiFi» ESP8266На сайте arduino.cc есть ветка, посвященная работе ATTiny13 в среде Ардуино. Оттуда же качаю ATTiny core for Arduino IDE. Распаковываю архив в папку c:\Program Files (x86)\Arduino\hardware\ и в Arduino IDE появляются дополнительные платыТеперь загрузка программ. Объем памяти микропроцессора всего 1Кб и никакой загрузчик туда не поместится. Поэтому загрузка скетчей производится программатором по ISP. USBAsp, которым я программировал Atmega328 работать с тинькой не захотел. Нужна специальная прошивка программатора, с которой я не стал возиться. Программировать микроконтроллер можно и при помощи любой Ардуины. Для этого собираю такую схему:В Arduino IDE выбираю «Файл->Образцы->ArduinoISP» и загружаю в Ардуино скетч программатора. Затем выбираю «Инструменты->Программатор->Arduino as ISP». Теперь можно загружать простые скетчи в тиньку. Следует отметить, что ATTiny13 core for Arduino содержит ограниченный набор функций Ардуино.Список функций Апдуино, поддерживаемых ATTiny13 core
map()
Применение ATTiny13
Решил восстановить такую елочку со световодамиИзначально там стояла галогенная лампочка на 12В и моторчик, который крутил цветной диск-светофильтрВсе это благополучно померло. Собираю такую схему с кусочком светодиодной ленты:на макетной платеПусть тинька плавно изменяет цвета ленты. Но для этого нужно 3-х канальный ШИМ, а у ATTiny13 аппаратно только два таких выхода. Значит ШИМ будет программный на 3 канала, управляемый встроенным таймером.Скетч трех-канального ШИМ для ATTiny13
#include <avr/io.h>
#include <stdlib.h>
#include <avr/interrupt.h>
#include <util/delay.h>
uint8_t counter=0;
uint8_t lev_ch1, lev_ch2, lev_ch3;
uint8_t buf_lev_ch1, buf_lev_ch2, buf_lev_ch3;
ISR(TIM0_OVF_vect){
if (++counter==0) //счетчик перехода таймера через ноль
{
buf_lev_ch1=lev_ch1; //значения длительности ШИМ
buf_lev_ch2=lev_ch2;
buf_lev_ch3=lev_ch3;
PORTB |=(1<<PB0)|(1<<PB1)|(1<<PB2); //подаем 1 на все каналы
}
if (counter==buf_lev_ch1) PORTB&=~(1<<PB1); //подаем 0 на канал
if (counter==buf_lev_ch2) PORTB&=~(1<<PB0); //по достижении
if (counter==buf_lev_ch3) PORTB&=~(1<<PB2); //заданной длительности.
}
int main(void)
{
DDRB=0b00000111; // установка PortB пины 0,1,2 выходы
// таймер работает без предделителя
TCCR0B = _BV(CS00);
// прерывания по переполнению таймера разрешены
TIMSK0 = _BV(TOIE0);
// глобально прерывания так же разрешены
sei();
lev_ch1=0; //Красный цвет
lev_ch2=255; //Зеленый цвет
lev_ch3=0; //Синий цвет
while (1) //бесконечная шарманка
{
for (uint8_t i=0;i<256;i++) {
lev_ch1 = i; //Красный увеличиваем
lev_ch2 = 255-i; //Зеленый уменьшаем
_delay_us(5000); //Пауза 5мс
}
for (uint8_t i=0;i<256;i++){
lev_ch3 = i; //Синий увеличиваем
lev_ch1 = 255-i; //Красный уменьшаем
_delay_us(5000); //Пауза 5мс
}
for (uint8_t i=0;i<256;i++) {
lev_ch2 = i; //Зеленый увеличиваем
lev_ch3 = 255-i; //Синий уменьшаем
_delay_us(5000); //Пауза 5мс
}
}
}
Выводы:
Микроконтроллеры ATTiny13 вполне годятся для несложных задач автоматизации.Их достоинства: низкое потребление и небольшая цена К недостаткам можно отнести очень маленькие ресурсы и довольно сложную (по сравнению с обычным Ардуино) настройку программирования.Но безусловно, эти микроконтроллеры достойно занимают свою нишуПолезные ссылки
Самые обсуждаемые обзоры
+61 |
2690
106
|
+48 |
3004
62
|
+22 |
1807
31
|
+48 |
1799
34
|
Знаете, чем плоха хорошая, по своей сути, идея, но плохая её реализация?
Вы написали интересный «труд», но сделали это небрежно, что почти сводит на нет затраченные усилия.
Выдаёт ошибку:
Можете дать полную версию скетча, который будет компилироваться?
Большое спасибо за ответ.
Там полосатые секторы не зря — от них по ветвям бежали интересные тени, т.к. это транспортировалось пучком световодов к кончикам ветвей.
Посему бы не лентой это надо делать, а сконцентировать на малой площади, соразмерной с пучком световодов, n светодиодов сверхярких разноцветных или даже полноцветных. А тиньки вполне хватит для красивой «причудливости» их переливов.
Можно поставить светодиоды WS2812. Есть примеры работы с ними, но, ИМХО, овчинка не стоит выделки. Для WS2812 вожно найти гораздо более достойное применение в НГ
Впрочем — ради праздничного настроения, чего не пожалеешь, можно и не 13, а 2313 туда засунуть. Тогда и разгуляться можно с многоцветием, переливами и прочим :)
Но некогда и мозгов уже не хватает. :(
А за прямые руки и креативный подход однозначно плюс!
13ый очень удачный малыш, и не только для оживления игрушек.
"… и лишь слегка несимметрично стоят щербатые котлы...")
Так лучше для перфикционистов?
Кстати, смотрю на фьюзы — вполне сложно сделать 8МГц + тот же делитель на 8
На счет питания — лично мне интересно питания от двух ААА (идеально от одной) Там получае напряжение как раз до 2В будет падать на двух полуразряженных аккумуляторах
А 1Мгц вполне можно сделать, коррекция внутреннего генератора работает в широких пределах. Причем менять корректирующий коэффициент можно прямо во время работы.
1. Купить все детали, вытравить печатную плату, красиво все собрать
2. Выгрести из ящика всякое неиспользуемое барахло, недостающее выпаять со старых плат и из всего этого г… сделать конфетку. Здесь иногда удовольствия от реализации даже поболе.
А чем не нравится Ардуина в качестве программатора. И чем она от USBAsp отличается принципиально? Контроллер чуть помощнее? Конструктив другой? Да и цена у Pro Mini не намного от программатора отличается. Так что дело вкуса.
А потом прочитал… A Elbereth Gilthoniel! иными словами — ё моё!
В общем — рукоплещу «спасибо!» в 100500 рук!
… если кто не понял, у меня завалялся мешочек 13х тинек… :)
Здесь то я могу дырочек и перемычек сколько угодно сделать.
Хотя SMD на двухсторонке на порядок компактнее и эстетичнее
А то гнобят за отсутствие печатки.
Для часов точность недостаточна.
Если памяти хватает, то разницы нет, на ассемблере писать или на Си или на «Виринге».
Сейчас хочу еще туда программный сериал порт запихнуть для отладки.
Все равно по ресурсам тинька это игрушка.
Но если тот код переписать на Си то думаю получилось бы 250 строчек, но памяти занимало бы это меньше.
Большое спасибо. Читал с интересом.
Было когда-то желание что-то писать, сейчас уже отбилось напрочь, работа забирает как время так и силы.
J3 SCK option
If the target clock is lower than 1,5 MHz, you have to set this jumper.
Then SCK is scaled down from 375 kHz to about 8 kHz.
Эту перемычку, в принципе, можно и для остальных ардуин использовать — просто время прошивки немного увеличится.
Где-то были упоминание того, что для atmel частота программатора не должна превышать частоту «программируемого» более чем в 8 раз.
Прошивал с помощью Arduino 1.8.5.
Для этого нужно сменить частоту.
Выбрал частоту 4.8 мГц., нажал на кнопку «Записать загрузчик». Теперь светодиоды мигают плавно.
но вот код кривой — нет павнойти переходов — обрывы по яркости на 0…
переписал малость )
делает плавно нарастание и уменьшение яркости со сдвигом на 1/2 цвета
полный перелив всех цветов