2015-04-26 9 views
1

Я довольно новичок в программировании avr, и я пытаюсь просто угасить 3 светодиода, независимо подключенных к контактам ATtiny84 pwm. Прямо сейчас у меня есть код, который должен обладать яркостью двух разных светодиодов. Вот мой код:ATtiny84 pwm led мерцание

#define F_CPU 1000000UL 
#include <avr/io.h> 
#include <util/delay.h> 

int main(void) 
{ 
    DDRB |= (1 << PB2);     // PWM output on PB2 
    TCCR0A = (1 << COM0A1) | (1 << WGM00); // phase correct PWM mode 
    OCR0A = 0x10;       // initial PWM pulse width 

    TCCR0B = (1 << CS01); // clock source = CLK/8, start PWM 

    DDRA |= (1<<PA6);  // make OC1A (DDA6) PWM output pin 
    TCCR1A = (1<<COM1A1) | (1<<COM1B0) | (1<<WGM00); // Clear OC1A/OC1B on Compare Match (bit 7 + 6) 
    // PWM, Phase Correct 
    TCCR1B = (1<<CS02); // 256 prescaler 

    while(1) 
    { 
     // change PWM pulse width every 2 seconds 
     _delay_ms(2000); 
     OCR0A = 0x10; 
     OCR1A = 0x10; 
     _delay_ms(2000); 
     OCR0A = 0x30; 
     OCR1A = 0x30; 
     _delay_ms(2000); 
     OCR0A = 0x50; 
     OCR1A = 0x50; 
     _delay_ms(2000); 
     OCR0A = 0xA0; 
     OCR1A = 0xA0; 
    } 
} 

Код в основном скопированы из Интернета, и я действительно не понимаю инициализацию, но теперь светодиодном подключен к PB2 работает нормально, но один подключен к ПА6 не работает правильно. Регулятор PA6 меняет свою яркость, но также быстро и быстро мерцает (примерно 10 раз в секунду).

Сначала я подумал, что это связано с тем, что PA6 является также выводом MOSI для программирования, но отключение программиста не помогло.

Любая помощь приветствуется! Также любые советы для программирования avr в целом более чем приветствуются!

ответ

2

На всякий случай вы еще не видели, это соответствующее техническое описание вашего микроконтроллера: ATtiny84 Datasheet. Глядя на регистры конфигурации таймера TCCR *, можно что-то сказать.