Начитался статей про микроконтроллеры, почитал про основы кода, побаловался с симулятором, и решил потеребить контроллеры вживую. С самого начала мой выбор пал на семейство контроллеров AVR из-за распространенности схем под них, и кучи самоучителей. Заказал данный программатор, немножко радиодеталей, и начал творить. Все в подробностях под катом.
К программатору решил прикупить вот такой переходник, о чем не пожалел ни разу.
вот так все это выглядит в сборе:
В голове уже зрела идея первого серьезного (для меня, чайника) проекта. На работе у меня стоял напольный вентилятор, который мог имитировать ветер, то есть дул не непрерывно, а меняя скорость вращения пропеллера, и мне захотелось заиметь такой же настольный.
Схема смоделирована в симуляторе (я использую седьмой протеус)
микроконтроллер преобразует положение переменного резистора в число, затем это число передается аппаратному ШИМ-контроллеру, который дергает 6 ножкой контроллера, регулируя скорость вентилятора. 3к резистор, идущий на землю — это для светодиода, его можно вообще не ставить, если не нужен светодиод
На Taydaelectronics, не раз упоминавшемся здесь, были закуплены необходимые детали:
Вот все компоненты запаяны на плату. Плату травил в хлорном железе, дорожки рисовал простым перманентным маркером, ничего сложного, нужно просто терпение.
С помощью Atmel Studio и гугла написал прошивку
//Roman Vagin
//http://vk.com/xynta73
//шим контроллер вентилятора с простым ШИМ и с симуляцией ветра. говнокод на ифах и делеях
// частота контроллера 4.8 MHz, включен делитель на 8 чтобы шим не пищал 4800000/8=600000
#define F_CPU 600000
#include <avr/io.h>
#include <util/delay.h>
#define FAN PB1
int adc_in;
int mode = 1;
void adc_setup (void)
{
// Set the ADC input to PB2/ADC1
ADMUX |= (1 << MUX0);
ADMUX |= (1 << ADLAR); // Comment out for 10-bit resolution
// Set the prescaler to clock/128 & enable ADC
ADCSRA |= (1 << ADPS1) | (1 << ADPS0) | (1 << ADEN);
}
int adc_read (void)
{
// Start the conversion
ADCSRA |= (1 << ADSC);
// Wait for it to finish
while (ADCSRA & (1 << ADSC));
return ADCH;
// return ADC; // For 10-bit resolution
}
void pwm_setup(){
// Set Timer 0 prescaler to clock/8.
// At 9.6 MHz this is 1.2 MHz.
TCCR0B |= (1 << CS01) | (1 << CS00);
// Set to 'Fast PWM' mode
TCCR0A |= (1 << WGM01) | (1 << WGM00);
// Clear OC0B output on compare match, upwards counting.
TCCR0A |= (1 << COM0B1);
}
void pwm_write (int val)
{
OCR0B = val;
}
void __mode1 (){//режимы вентилятора. зависит от положения переменного резистора (0-255)
if ((adc_in>=10) && (adc_in<100)){//если переменник выкручен чуть чуть вправо
pwm_write(adc_in+50);//даем пропеллеру раскрутится, ибо на минимуме может не стартануть
_delay_ms (2000);//крутим 2 сек
pwm_write(0);//снижаем до нуля
_delay_ms (5000);//ждем 5 секунд
pwm_write(adc_in+20);//снова крутим 3 секунды
_delay_ms (3000);
pwm_write(0);
_delay_ms (6000);
}else if((adc_in>=100)&&(adc_in<140)) {//второй режим
pwm_write(adc_in);
_delay_ms (1500);
pwm_write(0);
_delay_ms (3000);
pwm_write(adc_in);
_delay_ms (4000);
pwm_write(0);
_delay_ms (2000);
}else if((adc_in>=140)&&(adc_in<190)){
pwm_write(adc_in);
_delay_ms (1000);
pwm_write(40);
_delay_ms (3000);
pwm_write(adc_in+20);
_delay_ms (5000);
pwm_write(40);
_delay_ms (4000);
}else if((adc_in>=190)&&(adc_in<220)) {//второй режим
pwm_write(adc_in);//даем почти максимум
_delay_ms (1500);//пауза 2 сек
pwm_write(50);//снижаем почти до нуля и тд
_delay_ms (3000);
pwm_write(adc_in);
_delay_ms (7000);
pwm_write(50);
_delay_ms (7000);
}else if(adc_in>=220){
pwm_write(255);//даем максимум
}else{
pwm_write(0);
}//выключаем если не выполняется ни одно условие
}
int main (void)
{
// fan is an output.
DDRB |= (1 << FAN);
adc_setup();
pwm_setup();
while (1) {
adc_in = adc_read();
//_________________если крутилка в минимальном положении,
if (adc_read()<20){
_delay_ms(2000);
if (adc_read()>200){//и если крутилка через секунду в максимальном положении
if (mode==1){//переключаем режим, если режим стоял 1, то ставим второйц, и наоборот
mode=2;
}else{
mode=1;
}
}
}
if(mode==1){//если режим 1 как по умолчанию - крутим функцию __mode1
__mode1 ();
}else{
pwm_write(adc_in);//иначе - просто приравниваем положение крутилки к шим, получая плавную регулировку
}
}
}
Поставил драйвера для программатора по инструкции, и используя программку SinaProg, отлично работающую с обзираемым программатором, прошил микроконтроллер.
Фьюзы
Первый запуск. Светодиод припаял для наглядности, чтобы «видеть» работу контроллера
Дальше озадачился корпусом, решил сделать из дерева, это на мой взгляд проще всего и эстетичнее.
Процесс:
выпилил более-менее приличную деревяшку
Изготовил петли для вентилятора
Покрыл морилкой основание
Залакировал, купил чистенький вентилятор, собрал всё
Вид снизу:
Видео работы законченного устройства:
О герое обзора пару слов:
для новичков программатор отлично подходит, стоит копейки, шьет множество контроллеров
Спасибо за обзор, плюсик поставил, давно хочу в хозяйство прикупить, в дополнение к Понипрогу.
Искал на али, дешевле чем 3.45 не видел, а за 5.1 и в оффлайне купить уже можно.
И переходник довольно удобный (правда потихоньку на TQFP корпуса перехожу).
Хотел уточнить, программатор только в варианте с 10 пин разьемом ISP, или бывают с 6 пин?
Я правильно понял, что я беру практически любую из AVR МК, согласно типоразмеру корпуса и отметкам на панельке вставляю её и совпадают все ISP пины? Это очень удобно, нужно взять, если так…
А, там маленький переключаатель. За сколько взяли, если не секрет? Найти смог только на ебее за 450р, коих он не стоит.
Именно у меня он был со старой прошивкой, не было возможности изменить скорость интерфейса, но смог прошить с помощью другого программатора и всё как надо.
Ссылки не осталось, но поиском легко ищется, вот самый дешёвый: Ebay
Вам не под arduino случайно? =)
На этом uspasp только перемычку на ресете можно поставить для прошивки самого программатора(через другой), нет селектора для прошивки низкочастотных МК, нет селектора питания, только 5в, хотя может что-то отпаять или припаять можно.
И стоить оно будет 2 доллара (с небольшим хвостиком). Некоторые просто не в курсе. Да, никаких особых наворотов там нет (они там попросту не поместятся :)).
Особых наворотов это каких? Линейный стабилизатор питания там есть, кварц стоит на 16МГц, светодиод на 13 пине, микроконтроллер даже более расширенный из-за копуса, имеет 8 входов АЦП, а не 6, как у UNO.
ну так а в данном-то случае нафига это всё богатство? ;) чтобы микросхему на плату не распаивать? ;) ардуина — это ж по сути тот же контроллер, только с бутлоадером и на платке.
Я удивился реализции регулировки оборотов вентилятора и применению вообще микроконтроллера здесь, а Вы про ардуино, может сразу пень 4? :))))
555 таймер видимо уже забыли, или 34063, только там уже дроссель нужен.
У меня дома, в ванной, уже 5 лет работает управление вентилятором вытяжки от самодельного блока управления.
В зависимости от влажности, 2 ступени, низкие обороты и высокие, 2 таймера на отключение после того, как влажность пришла в норму, 2 датчика освещенности, по ним определяется включен свет в ванной или туалете, можно включить режим, что когда в ванной свет, то вытяжка не включается (бывает надо когда маленький ребенок), если свет включен в туалете, то вытяжка отрабатывает по таймеру независимо от влажности.
Все это реализовано на двух микросхемах, 1 компаратор и 1 логика. (ну естественно БП, пара релюшек).
Без микроконтроллеров. За 5 лет ни одного глюка, а все кричать, Ардуино, Ардуино. :))))
А смысл публиковать, там даже Меги1284 нет. :))))
Не публиковал, потому, что когда делал, то параллельно делал ремонт дома, времени не было, а сейчас думаю, что никому такое и неинтересно.
Может у вас есть блог, куда вы выкладываете свои творения? Думаю, многим было бы интересно почитать такой. Муська это ведь не «электронико-маньячный» ресурс. :)
смысл — именно показать людям, что без всяких микроконтроллеров вполне можно интересные вещи реализовывать, а то я тут недавно реально видел, как вместо простейшего мультивибратора PIC использовали.
Отвечу всем сразу.
Опубликовать здесь врядли получится, своего блога у меня пока нет.
Но насчет публикации серьезно подумаю. Надо только подготовить материалы, так как на многие устройства и схем то нет, 99% вещей делается просто из головы, я и схемы то, выкладываемые здесь, чертил специально для Муськовчан.
Я вообще стараюсь потихоньку выкладывать обзоры подобного типа, например известный многим обзор самодельного лабораторного блока питания и драйвера светодиодов.
Вообще был приятно удивлен, что это кому-то интересно.
Спасибо за поддержку.
что без всяких микроконтроллеров вполне можно интересные вещи реализовывать
На самом деле без микроконтроллеров можно много чего сделать, Просто иногда контроллер банально выгоднее использовать.
так это ж для тех, кто «электронщик» и вообще радиоманьяк: знает как рассчитать вские там токи с интегралами, куда и зачем поставить кнденсатор, какой транзистор предпочесть в данной ситуации и почему и т.д., а ардуино для обычных «хипстеров», которые в детстве может дальше батарейки с лампочкой и не продвинулись. ну может еще электрозвонок собрали из набора «юный электрик» и без особых познаний могут собрать что-то эдакое, имея поддержку сообщества и кучу типовых и не очень схем.
Да, в этом хобби главное не что логичнее/дешевле применить, а что есть под рукой. Частенько простейшие мигалки делал на МК, т.к. ни таймеров, ни логики под рукой не было. На транзисторах городить уж совсем стрёмно было.
К контроллеру еще программатор как минимум надо и умение программировать, мне 40 лет, 25 точно занимаюсь электроникой, программить не умею, на чем мне проще собрать? :)
Хотя занимаюсь разработками электроники, но работаю в паре с программистом.
25 лет в электронике!!! это то, о чем я говорил выше — вы радиоманьяк (в хорошем смысле :) ) а я в детстве только цветомузыку паял по схемам из «радио». при чем вообще особ не осознавал как оно работает. в радиокружок меня не взяли, т.к. был еще мал (3 или 5 класс, а физика была с 6), так и остался чайником, а интерес остался. теперь недавно купил себе набор с ардуино, буду играться :)
25 лет назад я спаял первый комп. Радио РК86, только он не взлетел, а вот следующие Спектрумы работали, а занимаюсь электроникой с первого класса, но это не в счет.
есть люди (например я), для которых $3 за pro mini ардуину — совсем не большие деньги, ради которых я бы не стал с ЛУТ возиться лишний раз и изучать электронику и С++ настолько глубоко.
Более дешевые микроконтроллеры надо сразу оптом заказывать, иначе невыгодно.
Автор плату итак пришлось делать и микроконтроллер был, так что он молодец, но всем я б так не посоветовал.
Еще я б текстолит на бике заказал.
за бик спасибо. у местных взял текстолитину, так вся засрана чем то.
а че, ардуина реально проще вот этого всего? чем? там код сам пишется? я просто не видел ни разу ее
На нормальном си эта программа занимала бы столько же. Ну может на пару строк больше. Зато нормально человек учится программировать, а не на этом недоси ардуинном.
Раньше слали гетинакс. В заказах за апрель и июнь прислали стеклотекстолит.
В описании лота есть фотографии и того, и другого, но в названии фигурирует FR4, так что я склоняюсь, что и сейчас шлют его
Это Ваше дело, чему удивляться, претензии предъявляйте ТС. ТС решил использовать МП — это его дело, но мне так и не объяснили, чем дуина за $2.24 плоха взамен использованных?
Ардуина против МК — это как фотоаппарат мыльница против зеркалки.
С точки зрения професионалов — на зеркалке можно достичь лучшего качества (и это так)
Для любителя мыльница проще в пользовании, а разница в снимках незаметна.
Ардуино дешев, не требует использования программатора, для множества задач есть готовый код.
Еще аналогия: некоторые профессиональные фотографы относились к процессу проявки пленки и фотопечати как к некоему магическому ритуалу, которым должен владеть профессионал. К тем, кто не владел «магией» относились как к любителям.
Схема на МК обычно выполняется на плате, изготовление которой — тоже некоторый ритуал.
Недостатки Ардуино:
1) Выше вероятность наводок на выводы МК
2) Размер
3) «Непрофессиональность» платформы
4) Размер скомпилированного кода обычно больше
Во многих проектах-самоделках на эти недостатки можно не обращать внимание.
Платы на заводе заказывал, а разводка и сборка моя. Схема известная — программатор prottossa, и прошивка его. Так как плат было много, пришлось собрать и прошить эти девайсы (10 штук было, если память не подводит), лишние продать. Разумеется с разрешения автора.
Я тоже извращался, когда делать нечего на работе было. Это AVRIsp2, он новые avr тоже может шить, также стоит преобразователь уровней и есть возможность запитаться от него +3,3 и 5.
Не все ж в китае покупать, надо и своему творческому потенциалу давать выход )))
Правда потом я JTAGIce2 купил клон…
Да, моя разводка под корпус конкретный. Сам проект не мой, конечно.
Если интересно, пишите, поделюсь. Правда, с наличием копеечных предложений в китайшопах особенно не актуально. Самый гемор там — впаять микросхему преобразователя уровней и разъем угловой.
А если человек с микроконтроллерами хочет поэкспериментировать? Раньше или огромные деньги отваливали за это удовольствие, или залуживали паяльник для самоделок. При том была проблема курицы и яйца: чтобы спаять программатор, надо прошить программатор, для этого нужен программатор…
Что бы прошить программатор, то достаточно было ЛПТ порта и нескольких проводков, еще лучше, если есть наша АПшка. Программатор для первой прошивки и не нужен. ;)
Я даже до сих пор обхожусь Понипрогом, а там контроллер не нужен.
Да, только ЛПТ к тому времени уже исчез :) Через COM тоже прошивали, но опять же, прямые руки нужны были. Я в то время разорился на FT232RL — чип дорогой, но до сих пор актуальный.
Когда я в первый раз столкнулся с перепрошивкой материнки ноутбука — у меня программаторов не было и моя первая перепрошивка была сделана при помощи LPT порта (благо он в наличии). Если честно пришлось помучиться (мучался с выставлением задержки… ни в какую не разлочивалась память) После этого я решил собрать программатор… НО так как его надо было шить чем-то — я решил купить FT232RL (понимаю что можно было через ЛПТ… но не хотел с ним возиться). Собрал временно AVR USBBit — но так часто им не пользуюсь (всего пару раз по делу использовал.) — то программатор так и остался в пахабном виде.
Да, можно взять за 2 доллара USPasp, или вы думаете, что по вашей ссылке высоковольтный программатор? Самый дешёвый известный мне высоковольтный это он: MiniPro TL866cs
Отличная поделка, но вот компьютрный вентилятор смотрится как то не очень красиво.
Может лучше вот ТАКОЙ прикрутить к вашей деревяной подставке.
Ну или подобный. В китайских магазинах полно недорогих и симпатичных вентиляторов.
взял два таких программатора, с переходниками и адаптером.
к сожалению завести не удалось. пробовал прошить atmega328 через Arduino IDE.
сначала выдавало такую ошибку:
avrdude: warning: cannot set sck period. please check for usbasp firmware update
с помощью arduino uno обновил прошивку программатору, ошибка пропала, но появилась другая:
avrdude: auto set sck period (because given equals null)
avrdude: error: programm enable: target doesn't answer. 1
avrdude: initialization failed, rc=-1
Double check connections and try again, or use -F to override
this check.
решения так и не нашел :( пробовал на Win7, WinXp, Ubuntu
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.
Искал на али, дешевле чем 3.45 не видел, а за 5.1 и в оффлайне купить уже можно.
И переходник довольно удобный (правда потихоньку на TQFP корпуса перехожу).
Хотел уточнить, программатор только в варианте с 10 пин разьемом ISP, или бывают с 6 пин?
А, там маленький переключаатель. За сколько взяли, если не секрет? Найти смог только на ебее за 450р, коих он не стоит.
Ссылки не осталось, но поиском легко ищется, вот самый дешёвый: Ebay
Вам не под arduino случайно? =)
На этом uspasp только перемычку на ресете можно поставить для прошивки самого программатора(через другой), нет селектора для прошивки низкочастотных МК, нет селектора питания, только 5в, хотя может что-то отпаять или припаять можно.
Мне 6 пин разъем проще разводить.
Молодец, реализовал задуманное!
я понимаю оправданность ее применения при разработке устройств, но готовое устройство на этой плате это как то неоправданно
555 таймер видимо уже забыли, или 34063, только там уже дроссель нужен.
В зависимости от влажности, 2 ступени, низкие обороты и высокие, 2 таймера на отключение после того, как влажность пришла в норму, 2 датчика освещенности, по ним определяется включен свет в ванной или туалете, можно включить режим, что когда в ванной свет, то вытяжка не включается (бывает надо когда маленький ребенок), если свет включен в туалете, то вытяжка отрабатывает по таймеру независимо от влажности.
Все это реализовано на двух микросхемах, 1 компаратор и 1 логика. (ну естественно БП, пара релюшек).
Без микроконтроллеров. За 5 лет ни одного глюка, а все кричать, Ардуино, Ардуино. :))))
Не публиковал, потому, что когда делал, то параллельно делал ремонт дома, времени не было, а сейчас думаю, что никому такое и неинтересно.
Опубликовать здесь врядли получится, своего блога у меня пока нет.
Но насчет публикации серьезно подумаю. Надо только подготовить материалы, так как на многие устройства и схем то нет, 99% вещей делается просто из головы, я и схемы то, выкладываемые здесь, чертил специально для Муськовчан.
Я вообще стараюсь потихоньку выкладывать обзоры подобного типа, например известный многим обзор самодельного лабораторного блока питания и драйвера светодиодов.
Вообще был приятно удивлен, что это кому-то интересно.
Спасибо за поддержку.
На самом деле без микроконтроллеров можно много чего сделать, Просто иногда контроллер банально выгоднее использовать.
Хотя занимаюсь разработками электроники, но работаю в паре с программистом.
Написал программу, как подключить светодиод к процессору.
Электроника и программирование сейчас часто неразлучны.
Кстати, скоро к списку моих радиолюбительских обзоров должен добавиться еще один.
Более дешевые микроконтроллеры надо сразу оптом заказывать, иначе невыгодно.
Автор плату итак пришлось делать и микроконтроллер был, так что он молодец, но всем я б так не посоветовал.
Еще я б текстолит на бике заказал.
а че, ардуина реально проще вот этого всего? чем? там код сам пишется? я просто не видел ни разу ее
Берем плату за 92 рубля.
Припаиваем к ней транзистор и переменный резистор — вот и вся обвязка…
Дальше пишем 5 строчек кода
Всё, это вся программа. Переменный резистор на входе №1 регулирует порывы ветра вентилятора на выходе №9.
Дальше, при желании, эту же плату можно нагрузить еще кучей всего.
Еще динамическую типизацию хочу.
Это же мерзкий гетинакс. Никакой не FR4.
В описании лота есть фотографии и того, и другого, но в названии фигурирует FR4, так что я склоняюсь, что и сейчас шлют его
Правда у меня своя специфика.
Если под производство, то заказываю с маской и лужением.
С точки зрения професионалов — на зеркалке можно достичь лучшего качества (и это так)
Для любителя мыльница проще в пользовании, а разница в снимках незаметна.
Ардуино дешев, не требует использования программатора, для множества задач есть готовый код.
Еще аналогия: некоторые профессиональные фотографы относились к процессу проявки пленки и фотопечати как к некоему магическому ритуалу, которым должен владеть профессионал. К тем, кто не владел «магией» относились как к любителям.
Схема на МК обычно выполняется на плате, изготовление которой — тоже некоторый ритуал.
Недостатки Ардуино:
1) Выше вероятность наводок на выводы МК
2) Размер
3) «Непрофессиональность» платформы
4) Размер скомпилированного кода обычно больше
Во многих проектах-самоделках на эти недостатки можно не обращать внимание.
Не все ж в китае покупать, надо и своему творческому потенциалу давать выход )))
Правда потом я JTAGIce2 купил клон…
Если интересно, пишите, поделюсь. Правда, с наличием копеечных предложений в китайшопах особенно не актуально. Самый гемор там — впаять микросхему преобразователя уровней и разъем угловой.
Я даже до сих пор обхожусь Понипрогом, а там контроллер не нужен.
А потом купил такой для прошивки флеш-памяти:
И пока его хватает.
https://aliexpress.com/item/item/SCM-24-93-series-EEPROM-memory-chips-Programmers-SP200SE-SP200S-enhanced-version-30406/1727288434.html
Рабочий, проверено. Заказал второй такой, жду.
Может лучше вот ТАКОЙ прикрутить к вашей деревяной подставке.
Ну или подобный. В китайских магазинах полно недорогих и симпатичных вентиляторов.
к сожалению завести не удалось. пробовал прошить atmega328 через Arduino IDE.
сначала выдавало такую ошибку:
с помощью arduino uno обновил прошивку программатору, ошибка пропала, но появилась другая:
решения так и не нашел :( пробовал на Win7, WinXp, Ubuntu
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.