brusel
-
Постов
5 -
Зарегистрирован
-
Посещение
Тип контента
Профили
Форумы
Блоги
Сообщения, опубликованные brusel
-
-
Пришлось добавить еще одну кнопку "СТОП". Код ниже. Прошил тиньку, на макетке вроде работает, пауза 8 сек.
#define F_CPU 1200000UL #define OUT PB2 #define OUT10 PB0 #define BUT_Start PB4 #define BUT_Stop PB3 #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> // Обработчик прерывания PCINT0 ISR(PCINT0_vect) { _delay_ms (60); // антидребезг (использовать задержки в прерываниях некошерно, но пока и так сойдёт) if ((PINB & (1<<BUT_Stop)) == 0) // если нажата кнопка { PORTB &= ~((1<<OUT)|(1<<OUT10)); //выкл. } } int main(void) { // Пины кнопок DDRB &= ~((1<<BUT_Start)|(1<<BUT_Stop)); // входы PORTB |= (1<<BUT_Start)|(1<<BUT_Stop); // подтянуты // Пин светодиода DDRB |= (1<<OUT)|(1<<OUT10); // выход PORTB &= ~((1<<OUT)|(1<<OUT10)); // выключен GIMSK |= (1<<PCIE); // Разрешаем внешние прерывания PCINT0. PCMSK |= (1<<BUT_Stop); // Разрешаем по маске прерывания на ногах кнопки sei(); // Разрешаем прерывания глобально while (1) { _delay_ms (60); // антидребезг if ( (PINB & (1<<BUT_Start)) == 0 ) // если нажата кнопка { PORTB |= ((1<<OUT)|(1<<OUT10)); //вкл _delay_ms (8000); // пауза } PORTB &= ~(1<<OUT10); //выкл } }
Что нужно: кнопка "Стар"т сразу включает 2 реле, одно из которых отключается через 8-10 сек. Второе остается включено пока не нажата кнопка "Стоп".
Если кто-то подскажет как улучшить код, чтобы не было сбоев, буду очень благодарен.
0 -
On 25.07.2019 at 08:04, BARS_ said:
Значит неправильно настройки заданы. Пауза должна быть 45 секунд. И вообще, на кой для такой простейшей задачи целый МК?
проверял в протеусе пауза работает 7-8 секунд, как раз то что надо.
Задача простая - управлять реле которое включится на 7-10 сек и отключится.
Идеальный вариант добавить потенциометр для регулировки таймера. Может поможете с кодом, а то я пока не шарю. Данный пример где-то нашел и пробую.
0 -
Правильно? В протеусе вроде работает. Пауза где-то 7-8 сек.
#define F_CPU 1200000UL #define OUT PB2 #define LED PB0 #define BUTTON1 PB4 #include <avr/io.h> #include <util/delay.h> int main(void) { // Пины кнопок DDRB &= ~((1<<BUTTON1)); // входы PORTB |= (1<<BUTTON1); // подтянуты // Пин светодиода DDRB |= (1<<LED)|(1<<OUT); // выход PORTB &= ~((1<<LED)|(1<<OUT)); // выключен while (1) { _delay_ms (50); // антидребезг if ( (PINB & (1<<BUTTON1)) == 0 ) // если нажата кнопка { PORTB |= ((1<<OUT)|(1<<LED)); //вкл _delay_ms (45000); // пауза } PORTB &= ~((1<<OUT)|(1<<LED)); //выкл } }
0 -
Привет, помогите сделать так, чтобы по нажатию кнопки на несколько секунд появлялся высокий уровень на выходах LED и OUT.
#define F_CPU 1200000UL #define OUT PB2 #define LED PB0 #define BUTTON1 PB4 #include <avr/io.h> #include <util/delay.h> int main(void) { // Пины кнопок DDRB &= ~((1<<BUTTON1)); // входы PORTB |= (1<<BUTTON1); // подтянуты // Пин светодиода DDRB |= (1<<LED)|(1<<OUT); // выход PORTB &= ~((1<<LED)|(1<<OUT)); // выключен while (1) { _delay_ms (50); // антидребезг if ( (PINB & (1<<BUTTON1)) == 0 ) // если нажата кнопка { PORTB |= ((1<<OUT)|(1<<LED)); //вкл } _delay_ms (1000); // пауза PORTB &= ~((1<<OUT)|(1<<LED)); //выкл } }
0
Помощь с кодом
в AVR
Опубликовано
может и не мое... и нахера такое советовать. Я и без вас знаю что мое, что не мое. Мне этот проект нада на один раз. Не хочешь помогать - лучше промолчи.
одновременно нажмают "Старт" и "Стоп" только дебилы, я для их обработчик этого события писать не буду?
Вопрос к BARS. Помоги с таймером. мне некогда сейчас читать книжки, нада запускать станок.