2014年6月5日木曜日

PWMでLEDの輝度調節

前の回路図とか作んのめんどくさくなってきた。
とりあえず、前のLEDチカチカさせるのから、発展?して、PWMで輝度を調節する。
とりあえず、プログラムはこれ。

/* Name: main.c
 * Author: <insert your name here>
 * Copyright: <insert your copyright message here>
 * License: <insert your license reference here>
 */

#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
    
    TCCR0A = 0b10100011;
    TCCR0B = 0b00000001;
    
    DDRD = 0xff;
    
    OCR0A = 0x02;
    OCR0B = 0x01;
    /* insert your hardware initialization here */
    for(;;){
        
        if(OCR0A == 0x80) OCR0A = 0x02;
        OCR0A ++;
        _delay_ms(1);
        
        
        /* insert your main loop code here */
    }
    return 0;   /* never reached */

}

比較一致で、非反転動作。8bit高速PWM動作。前置分周なし。
TCCR0AとTCCR0Bでこれらを設定。
DDRDで、出力の方向を決定。

前置分周よくわかってない。

PWM出力はOCR0A(PD6)につないでいるから、OCR0Aだけ数値入れればいいのかと思ってたけど、OCR0Bにも値を入れないといけないみたい
よくわからんけど。
OCR0Bが最小値にでもなんのかな?わからん。

とりあえず、OCR0Aの値を変更すると、LEDの輝度が変化。
プログラムでは、ちょっとずつ明るくなっていって、消える。っていうのを繰り返してる。

トランジスタ(1815)のエミッタにGND、コレクタに抵抗(200Ω)を介してLEDのカソード、ベースに抵抗(10kΩ)を介してPWMピンをつないだ。



0 件のコメント:

コメントを投稿