Перипетии нуба с ШИМом на Attiny13

Возникла давеча простенькая задачка. Нужен был регулируемый вручную ШИМ для теста одной идейки. Под рукой тинька 13 — т.е. цепляем переменник на АЦП и выводим что нам нужно. Казалось бы — проще только светодиодом помигать. Однако. Смеркалось.
Всё быстро воткнуто в макетку, с помощью мастера в CodeVision несколькими щелчками собран проект. Для теста на выход — светодиод. Включаю: горит на полную, кручу резистор — реакции нет. Шустро проверяю все соединения, питание, схему, прошивку — эффект остается. После трехкратного повторения тех же действий возникло недоумение. Беру другую тиньку, прошиваю, включаю — болт. Похоже проблема не в чипе. Некоторое время созерцаю код сгенерированный CodeVision — придраться не к чему. Открываю datasheet, вникаю. Изучил ADC, проверил — всё по канонам. Перешёл к ШИМ.
Краткое описание устройства аппаратного ШИМ на Attiny13 для начинающих:
ШИМ сделан на базе таймера. Т.е. у таймера есть несколько режимов работы, два из них относятся к ШИМу (FastPWM и Phase Correct PWM). Таймер настраивается с помощью двух регистров: TCCR0A,TCCR0B. В них задается режим, частота (делитель), какие каналы используются (есть два — 0A и 0B), режим работы выхода(прямой, инвертированный). Значение ШИМа задаются в регистрах OCR0A и OCR0B — соответственно для каждого канала. Есть ещё у ШИМа такая настройка — чем определяется максимальное значение таймера(TOP), при достижении которого он сбрасывается и бежит с начала — это может быть либо 0xFF, либо значение в регистре OCR0A. У меня был установлен второй режим и значение ШИМа я задавал в регистре же OCR0A.
Немало времени ушло у меня пока я нашёл свою ошибку и ещё больше пока догнал её смысл. Хотя сейчас всё кажется очевидным. Для тех кто, как и я, в танке — TOP должен быть 0xFF. Надо заметить, что настройка режимов через регистры не радует интуитивно понятным интерфейсом. Так вышеозначенный режим определяется битами WGM02:0, два из которых находятся в регистре TCCR0A(00,01), а третий(02) в TCCR0B. Правда мастер CodeVision при начальной настройке здесь наше всё, но когда нужно что-то подправить уже в процессе вот тут-то и приходится поднапрячься.
Короче, следующие грабли. Яркость регулируется, но вот беда: когда довожу ручку до минимума всё равно подсвечивает. Т.е. на АЦП у нас 0, а на выходе не 0. Обидно, понимаешь. Причина такого поведения в том, что в тот момент, когда таймер сбрасывается в 0, на выходе чип выставляет 1, и хотя значение ШИМа у нас задано 0, и уже в следующем такте он это видит и обнуляет выход, но вот этого несчастного скачка достаточно что бы светодиодик светил. Дискомфорт — ты ждешь на выходе чистый 0, а тут тебе гребеночка такая. Вообще говоря проблема известная. Решение приходит в голову практически сразу: когда меняем значение ШИМа, добавляем проверочку на 0 — при оном отключаем ШИМ совсем. Воникает вопрос: как отключать? Можно останавливать таймер. Не лучший вариант: а вдруг на этот таймер что-нибудь ещё посажено? Второй ШИМ, например, или прерывания, или отсчет времени до взрыва? Можно отключать выход таймера — это уже получше, и просто и понятно, получается примерно так:
if(OCR0A==0)TCCR0A&=0x3F;
else TCCR0A=0x83;

Как вариант можно менять режима работы самого пина выход/вход.
P.S.
Из комментариев к статье были получены ещё такие решения:
1. Если не принципиально получать 100% заполнения ШИМ, то можно использовать инверсный режим работы выхода;
2. При работе ШИМ в режиме Phase Correct PWM проблема отсутствует.

Ускорение травления вибрацией - попытка не пытка

Перешел я с недавних пор на травление в перекиси с лимонкой по всем известной пропорции (100мл перекиси + 30гр лимонной кислоты + 5гр соли). Всё казалось бы хорошо — и доступность, и дешевизна, и безопасность для одежды, поверхностей и высокая скорость травления без подогрева. Но к сожалению, помимо таких достоинств, есть у раствора весомый недостаток — над ним постоянно надо пританцовывать, помешивая раствор и покачивая кювету, иначе плата покрывается пузырьками и осадком, а следовательно травление идет ооочень медленно, если вообще идет. Т.е. вариантом бросил и забыл, как со свежим хлорным железом здесь и не пахнет. А раз процесс «шаманства» над раствором является процессом скучным и периодичным, значит его надо автоматизировать.
Так родился мини-проект, который был пафосно окрещен «Жалящий Шершень» =)


Читать дальше

Отключение защиты от замерзания электро-котла Protherm Скат

Protherm Ray
В достаточно неплохой электро-котел встроена защита от замерзания, срабатывающая при достаточно высокой температуре, и которую невозможно отключить.
И если в систему залит антифриз, и планируется периодическое удаленное включение отопления (заранее перед приездом раз в неделю, по праздникам и т.п.), то эта защита может вылиться в копеечку.
Отключаем защиту с помощью навесной схемки на микроконтроллере AVR с цифровым датчиком температуры DS18B20.


Читать дальше
  • +1
  • 11 ноября 2014, 19:07
  • vad7
  • 1

ATTINY13A с завода - обычный ISP вам не поможет

Закупил летом кучу чипов ATTINY 13A на ebay, часть в SU (200 mil) исполнении, часть в SSU (150 mil). С SU (в трее) проблем не возникло, а вот SSU (в ленте) отказались распознаваться обычным китайским USBASP программатором. Перепробовав всевозможные настройки, решил опробовать высоковольтное программирование чтобы попробовать сбросить fuses.
Как обычно это бывает — программировать в таком режиме было нечем.
Полистав полчаса гугл, остановился на самом простейшем для меня варианте (нужна ардуино-совместимая плата).

Что менял под себя:
1) транзистор заменил на 2N2222 (так как были в наличии)
2) 12В подал с лабораторного блока
3) чипы лепил на soic-dip переходник

Перешил на пробу 3 чипа. Все оказались с заводскими fuses: FF FC вместо FF FF
Все ATTINY13A в SSU исполнение, купленные до этого внутри страны, были с обычными fuses (FFFF).

На будущее заказал пару OTS socket для программирования SOIC8/16 т.к. прижимать или припаивать каждый чип нереально.
Что любопытно — на ebay такие socket'ы отдельно стоят всегда дороже (в разы), чем уже припаянные на платки (видимо налепили для каких-то программаторов, которые уже никому не нужны).

Автоматическое управление светом. Готовое устройство.

Всем доброго времени суток. В данной заметке хочется поделиться с народом мною разработанным, собранным, отлаженным и уже работающим устройством под названием «The automatic light switch». Что представляет собой приборчик, который включает свет, при появлении движения в комнате. Так же на борту устройства имеется датчик освещения (фоторезистор).

Читать дальше

Ремонт мини-печи (таймер на микроконтроллере AVR с симистором)

Печка

Была у меня мини-печка для бутербродов с механическим таймером.
Работала долго и в общем-то всем устраивала.
Но вот недавно сломался в ней механический таймер — у одной из шестеренок ось перетерлась.
Печь сама по себе работала, только не выключалась.

Вот решил это дело поправить и заодно попрактиковаться в использовании микроконтроллера ATtiny13A в термически жестких условиях.


Читать дальше
  • +4
  • 17 июня 2013, 12:15
  • vad7
  • 1

Лампа настроения. Изваял тут.

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

Лампа настроения

Такой вот кубик получился.


Читать дальше
  • +8
  • 13 августа 2012, 20:45
  • Ozze
  • 1

Отличия ATTiny от ATTiny c индексом A

Знает ли кто-нибудь, чем, отличаются ATTiny2313 от ATTiny2313A и ATTiny13 от ATTiny13A?
А то цена привлекательная, но непонятно чем отличаются характеристики.
UPD: Спасибо всем, если я правильно понял, особенных различий, кроме питания, между ними нет.