Некорректная работа PWM на ATtiny85

akefa
Offline
Зарегистрирован: 29.05.2015

При нажатии на кнопку, 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);
}

 

akefa
Offline
Зарегистрирован: 29.05.2015

А ответ то был на форуме http://arduino.ru/forum/programmirovanie/podskazhite-kak-shimom-sdelat-0