Максим Окатов Опубликовано 22 августа, 2017 Поделиться Опубликовано 22 августа, 2017 Товарищи, помогите пожалуйста. Данная програмулина при нажатии на кнопку входит в функцию MinU() в которой инициализирует таймер для задержки(ждем отпустит пользователь кнопку или нет) если кнопка не отпущена то уменьшаем скважность ШИМ. проблема в выделенной красным строчке! когда count больше 3 уменьшаем скважность, но в отладчике AVR studio, Proteus и в железе не робит. Перепрыгивает действие в {} так будь-то условие не выполнено... #define F_CPU 1000000L #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> unsigned char count = 0; unsigned char a=5,s=3,b=0; //===================================Насройка таймера==================== void Timer_ini(void){ TCCR1B = (1<<CS12)|(0<<CS11)|(0<<CS10); TCNT1 = 65535-976; TIMSK |= (1<<TOIE1); count = 0; } //===========================настройка шим=========================== void PWM_ini(void){ ASSR=0x00; TCCR2=0b01101110; //На выводе OC1A единица, когда OCR1A==TCNT1, восьмибитный ШИМ OCR2=200; } //=============== void MinU(){ unsigned char i=0; Timer_ini(); while (!(PINB&0b00000010)){ if(count>2){ //Если таймер считал более двух раз _delay_ms(100); // ждем 100 мс OCR2--; // Уменьшаем скважность i=1; // были в плавном уменьшении } } if (i!=1) // если не были в плавном уменьшении { OCR2=OCR2-50; i=0; } } //======================================================= int main(void) { // Настраиваем порт D на выход DDRB = 0b00001000; PWM_ini(); //Timer_ini(); sei(); while(1) { b=a-s; if (!(PINB&0b00000010)) { MinU(); }/* //if (!(PINB&0b00000100)) //{ //PlsU(); //}*/ } return 0; } ISR (TIMER1_OVF_vect) { count++; TCNT1 = 65535-976; } 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
ARV Опубликовано 22 августа, 2017 Поделиться Опубликовано 22 августа, 2017 Все переменные, обрабатываемые и в прерывании и в основном цикле, должны быть объявлены volatile. 0 Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют... Ссылка на комментарий Поделиться на другие сайты Поделиться
Реле, вентиляторы, корпуса, разъемы, а так же любые электронные компоненты в нашем каталоге! Бесплатная доставка + 15% кэшбэк + скидки!Перейти на сайт ТМ Электроникс Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.