2015-04-26 209 views
1

我對avr編程相當陌生,我試圖簡單地將3個LED獨立地連接到ATtiny84 pwm引腳。現在我有代碼,應該chnage兩個不同的LED亮度。這裏是我的代碼: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; 
    } 
} 

的代碼大多是從網上覆制的,我真的不明白的初始化,但是現在的LED連接到PB2工作正常,但在一個連接到PA6是不工作的權利。 PA6 led確實會相應地改變其亮度,但它也會快速地閃爍(大約每秒10次)。

首先,我認爲它與PA6也是MOSI針編程有關,但斷開程序員並沒有幫助。

任何幫助表示讚賞!另外,任何有關avr編程的提示都非常值得歡迎!

回答

2

爲防萬一你還沒有看過,這是你的微控制器的相關數據表:ATtiny84 Datasheet。查看TCCR *定時器配置寄存器可能會發現一些問題。