Вот меня интересует такой вопрос при создании устройств на мк и ds1307(часы реального времени) их надо как то прошивать отдельно?. Или настройка(прошивка) их будет лежать (находится) в самой прошивке под соответствующий мк. ВОТ к примеру часы ,вольтметр на мк attiny 2313 есть готовые схемы с прошивкой .хочу собрать но боюсь что все куплю а собрать девайс не получиться. А именно программирование самих часов. И с датчиком температуры тоже самое? В прошивке будет уже все прописано что он показывал верную температуру
Помогите пожалуйста кто умеет и знает нужно увеличить частоту ШИМ в данном коде ШИМ 18 герц и предназначение этого кода управлять температурой паяльника(12вольтового) а я хочу управлять электродвигателем печки авто. Мне очень понравилась как устроена управление одной кнопкой но вот частота маловато для управления эл.двигателем знаю что нужно что бы никаких звуков не исходила от моторчика печки частота шин должна быть больше 20кГц. Есть исходник вот часть его я предполагаю что нужно что то тут менять
//макросы для включения, выключения светодиодов //низкий уровень - на ножке 0 вольт, высокий уровень - на ножке 5 вольт #define LED1_OFF PORTB &= ~(1<<PB4); //Низкий уровень ножки PB4 #define LED2_OFF PORTB &= ~(1<<PB3); //Низкий уровень ножки PB3 #define LED3_OFF PORTB &= ~(1<<PB2); //Низкий уровень ножки PB2
#define LED1_ON PORTB |= (1<<PB4); //Высокий уровень ножки PB4 #define LED2_ON PORTB |= (1<<PB3); //Высокий уровень ножки PB3 #define LED3_ON PORTB |= (1<<PB2); //Высокий уровень ножки PB2 //Указатели для EEPROM uint8_t autosave_p EEMEM; uint8_t level_p EEMEM; //Переменная для выбора режима ШИМ uint8_t level=0; //volatile - чтобы компилятор не трогал эти переменные и не оптимизировал //Счетчики в прерывании //для мигания volatile uint8_t count=0; //для переливания 3х светодиодов volatile uint8_t count2=0; //счетчик удержания кнопки volatile uint8_t i=0; //переменная для события был_клик volatile uint8_t wasclick=0; //36 переполнений (36 раз происходит событие TCNT0>255 ) = 1 секунда // Прерывание по совпадению счетчика таймера с OCR0A // 9 600 000 Гц/Предделитель 1024 / 1000 = 9 375 Гц в секунду/255=36 прерываний //в секунду ISR (TIM0_COMPA_vect) {
//инкремент счетчиков, две переменные, чтобы режимы //светодиодов мигания и переливания не зависили друг от друга count++; //если больше пол секунды if(count>18){count=0;}
count2++; //если больше секунды if(count2>36){count2=0;}
}
//функция отключить все светодиоды void off_all_led() { LED1_OFF;LED2_OFF;LED3_OFF; }
int main(void) {
// Настраиваем порты ввода/вывода DDRB |= 1<<PB4;//Ножка PB4 как выход DDRB |= 1<<PB3;//Ножка PB3 как выход DDRB |= 1<<PB2;//Ножка PB2 как выход
DDRB |= 0<<PB1;//Ножка PB1 как вход(кнопка) PORTB |= (1 << PB1);//Включаем подтягивающий Pull-UP резистор для ножки //PB1(вход-кнопка)(высокий уровень(+5Вольт))
TIMSK0=0x04;//Разрешить выполнение прерываний по совпадению в OCR0A sei();// Разрешить глобальные прерывания
//Индикация включения, быстрое переливание светодиодов с инвертированием LED3_ON; _delay_ms(45); LED3_OFF;
LED2_ON; _delay_ms(45); LED2_OFF;
LED1_ON; _delay_ms(45); LED1_OFF;
LED2_ON; _delay_ms(45); LED2_OFF;
LED3_ON; _delay_ms(45); LED3_OFF;
//переменная для хранения значения автосохранения включено\выключено uint8_t autosave; //считать значение автосохранения с EEPROM по адресу в &autosave_p autosave=eeprom_read_byte(&autosave_p);
//если сохранение включено то режим ШИМ равен значению из EEPROM if (autosave==1) { level=eeprom_read_byte(&level_p); //Проследовать сразу на метку handler_button, где //сразу инициируется режим, считанные из EEPROM goto handler_button; }
//Бесконечный цикл while(1) {
//Если на PB1 низкий уровень(если кнопка нажата) if( ! (PINB & (1 << PB1))) { //Событие был_клик произошло wasclick=1; //инкремент счетчика нажатия кнопки до i=255 if (i!=255){ _delay_ms(83); i++; //если прошло 3 и более секунд if (i>=36) { //Событиея был_клик НЕ было wasclick=0;
//если автосохранение включено - отключить, записать // это в EEPROM if (autosave==1) { eeprom_write_byte(&autosave_p,0); autosave=0; } //если автосохранение выключено - включить, записать в EEPROM else { eeprom_write_byte(&autosave_p,1); autosave=1; }
//если автосохранение включено включить светодиод 1 на 1,5 секунды if (autosave==1) { LED1_ON; _delay_ms(1500); LED1_OFF; //перейти сразу к обработке переменной level goto handler_button; }
else //иначе, если автосохранение выключено включить светодиод 3 на //1,5 секунды { LED3_ON _delay_ms(1500); LED3_OFF; //перейти сразу к обработке переменной level goto handler_button;
}
i=0;//сброс счетчика после долгого нажатия
//перейти сразу к обработке переменной level goto handler_button;
}//i>=36
}//i!=255
}//! (PINB & (1 << PB1))
// Выполнять только, если кнопка отпущена т.е. выполняется, только, если wasclick=1 //(событие был_клик произошло) if ( (PINB & (1 << PB1))&&wasclick==1) { //события был_клик не было wasclick=0; _delay_ms(83); //Точные числа перескакивают, в узкий диапазон попасть трудно, поэтому от 2х до 12, // 2*83+83=249 миллисекунд //если кнопка была нажата (+83миллисекунды пауза внутри условия) 83*2 миллисекунд if (i>=2&&i<=12) { // повысить режим level++; //если режим превышает 7 сделать режим 0 if(level>8){level=0;}
//если включено автосохранение записать в EEPROM значение // режима if (autosave==1) { eeprom_write_byte(&level_p,level); }
//метка обработки переменной level(режимов) handler_button: switch(level) { //каждому значению level - свое значение ШИМ и режим //светодиодов case 0:OCR0A=0;off_all_led();break; case 1:OCR0A=32 ;off_all_led(); break; case 2:OCR0A=64;off_all_led() ;break; case 3:OCR0A=96;off_all_led() ;break;
//Если быстро нажать кнопку count2 не сбросится и какой-либо // светодиод будет гореть //некоторое время вместо того, чтобы погаснуть - переливания не // будет //принудительно сбросим count2 case 4:OCR0A=128;off_all_led();count2=0;break;
case 5:OCR0A=160;off_all_led() ; LED1_ON; break;
case 6:OCR0A=192;off_all_led() ; LED1_ON;LED2_ON; break;
case 7:OCR0A=224;off_all_led() ; LED1_ON;LED2_ON;LED3_ON; break;
case 8:OCR0A=255;off_all_led();break;
}//switch
i=0;//сброс счетчика кнопки }//i>=2
}//release отпущено
//Мерцания светодиодов //Каждому значению ШИМ - свой режим светодиодов switch(level) { case 0:;break; case 1: //count прибавляется на 9 за пол секунды if(count>=0&&count<9){LED1_ON;} if(count>9&&count<=18){LED1_OFF;} ; break;
case 2: // if(count>=0&&count<9){LED2_ON;} if(count>9&&count<=18){LED2_OFF;} ; break; case 3: // if(count>=0&&count<9){LED3_ON;} if(count>9&&count<=18){LED3_OFF;} ; break; case 4: //переливания, свой счетчик count2 if(count2>=0&&count2<6) {LED3_OFF;LED2_OFF;LED1_ON} if(count2>6&&count2<=12){LED1_OFF;} if(count2>=12&&count2<18){LED1_OFF;LED3_OFF;LED2_ON} if(count2>18&&count2<=24){LED2_OFF;} if(count2>=24&&count2<30){LED2_OFF;LED1_OFF;LED3_ON} if(count2>30&&count2<=36){LED3_OFF;} ;break; case 5: ;break; case 6:;break; case 7:;break; case 8: if(count>=0&&count<9){LED1_ON;LED2_ON;LED3_ON;} if(count>9&&count<=18){LED1_OFF;LED2_OFF;LED3_OFF;} ;break;
Это называется плавный пуск , там вероятнее всего стоит печатная плата , на которой будет стоять трех ногий симмстор и db3 динистор больше там нечему ломаться покупай сразу две эти детали и меняй
Скорее всего симистор пробило в кнопке. Надо разбирать и смотреть. Можно поискать аналогичную по форме кнопку, лишь бы в ручку влезла. Как правило они имеют хороший запас по мощности, и подойдёт практически любая.
Я не специалист в AVR.. но.
Мои предположения.
Во первых частота внутреннего генератора выставлена максимальная, больше не выжать. Если только внешний ставить.
Попробуйте поиграть с предделителем.
TCCR0B = 0x05; //Предделитель - 1024 и старт таймера
Можно использовать готовый регулятор мощности он уствнавлиыается в разрыв питания первичной обмотки .на китайском сайте стоит 1.5$ только заменишь на нужный симмистор то есть симмистор на нужную нагрузку там в схеме стоит на 2кВт заменишь его и увеличить радиатор будешь использовать для сварочника.
Собрал такую схему. Столкнулся с такой-же проблемой как и автор поста - греется транзистор (порой рука не держит), попробую увеличить площадь радиатора.
Еще на видео видно как с помощью лампы 110 Вт проверяется работоспособность схемы - ток растёт - лампа горит ярче, здесь все предельно ясно, но в моём случае я использовал две последовательно соединённые автомобильные галогенки (60х2=120 Вт) и при полностью открытом транзисторе ток еле доходил до 3,5 А, а лампы еле-еле накалялись. Пробовал с перемычкой вместо шунта и ток вырос сразу до 5,5-6,0 А (ели что шунт из двух 5Вт 0,1 Ом резисторов = 0,05 Ом 10Вт, как у автора видео), а лампы горели на всю мощность (субъективно).
Вопрос. Что мне надо сделать: уменьшить номинал шунта (к примеру ещё одним в параллель на 0,1Ом), поставить перемычку или попробовать поставить амперметр с встроенным шунтом (китай, цифра) вместо резисторов (если да, то будет ли он показивать правильные показания)??
Спасибо.