Monday, June 1, 2015

Timer Time: Using Internal ATTiny13A   Chip’s Timer, Automatic Mode, With Duty Cycle

Now , how to set the duty cycle?

Uh, what’s duty cycle?

Well, our previous program have the LED output turned on and off with certain frequency. Of course.

But, how about set it up, so it will turn on for 1 ms and then turn off 0.5 ms, on 1 ms, off 0.5 ms and so on. Thus, the duration of high and low is different, that’s duty cycle, as far as I know, :)


And, we already have a weapon, the OCR0A, as a value where the high become low. Of course we have to set the timer to PWM Mode 3, so after the timer set the flag it will continue to 255 instead of reset the counter.

ldi a, 0b1000 0011
out TCCR0A,a


The Code:


.include "../tn13Adef.inc"
.def a=r16
.org 0000
init:
sbi ddrb,0                ; pin B0 as output
ldi a,0b10000011          ; Fast PWM mode 3 
out TCCR0A,a
    ldi a,0b00000101          ; pre-scaler /1024
out TCCR0B,a
    
    ldi a,2
    out OCR0A,a

loop:

rjmp loop





.