Некорректная работа PWM на ATtiny85
- Войдите на сайт для отправки комментариев
Вс, 26/11/2017 - 19:37
При нажатии на кнопку, RGB светодиод должен мигнуть пару раз и остаться гореть заданным цветом, но столкнулся с проблемой что красный и синий цвет остаются тускло гореть, а зеленый нормально гаснет/загорается, в чем может быть проблема? Подключено PB0 - blue, PB1 - red, PB4 - green, PB3 и PB2 кнопки.
#define F_CPU 8000000 #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include <avr/pgmspace.h> #define RED _BV(PB1) #define GREEN _BV(PB4) #define BLUE _BV(PB0) #define TOUCH _BV(PB3) #define LIGHT _BV(PB2) #define DISABLED 0,0,0 #define OFF 255,0,0 #define ON 0,110,255 bool pressed = false; int main(void) { DDRB |= RED; DDRB |= GREEN; DDRB |= BLUE; DDRB &= ~ TOUCH; DDRB &= ~ LIGHT; TCCR0A = _BV(COM0A1) | _BV(COM0B1) | _BV(WGM00) | _BV(WGM01); TCCR0B = _BV(CS00); TCCR1 = _BV(CS10); GTCCR = _BV(PWM1B) | _BV(COM1B1); sei(); setColor(ON); while (1) { byte key = (PINB >> 2) & 1; byte button = (PINB >> 3) & 1; if (key) { setColor(OFF); } else { setColor(ON); } if (button && !pressed) { pressed = !pressed; blink(); } else if (!button && pressed) { pressed = !pressed; } } } void setColor (int r, int g, int b) { OCR1B = g; OCR0A = b; OCR0B = r; } void blink() { setColor(DISABLED); _delay_ms(200); setColor(ON); _delay_ms(200); setColor(DISABLED); _delay_ms(200); setColor(ON); _delay_ms(200); }
А ответ то был на форуме http://arduino.ru/forum/programmirovanie/podskazhite-kak-shimom-sdelat-0