Некорректная работа 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