//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);//иначе - просто приравниваем положение крутилки к шим, получая плавную регулировку
}
}
}
+22 |
1441
50
|
+139 |
2990
41
|
+45 |
2319
79
|
Искал на али, дешевле чем 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
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.