Wednesday, May 20, 2015

ADC on ATTiny13A with PWM Output in Assembler

Yep, here we are. I use pin B3 as ADC input, and B0 as output. The delay's vary; depend on r16 value, which is ADC value. Since the output's in PWM mode, if we connect LED to B0, the brightness is vary too.

.include "../tn13Adef.INC" 

.org $0000 
init:                       ;prescaler 50-200KHz, sys clock 1.2MHz
    ldi   r16,0b11100011    ;[ADEN(ENABLE),ADSC(START),ADATE,ADIF,ADIE,ADPS2,ADPS1,ADPS0]
    out   ADCSRA,r16        ;start adc
    ldi   r16,0b00000011    ;r16 = 3
    out   ADMUX,r16         ;select channel 3 (PORT B3)
    sbi   PORTB,PORTB3      ;enable pullup
    sbi   DDRB,0            ;set PORT B0 as output
main:
    in    r16,ADCL         
    in    r17,ADCH        
    rcall delay          
    sbi   PINB,0         
    rjmp  main

delay: 
    dec r16
    brne delay

    ret


PWM (Pulse-Width Modulation) di AVR memungkinkan output di AVR ATTiny13 berkelakuan seperti analog, dengan resolusi 256 atau, jika dihubungkan ke LED, memiliki 256 tingkat ke-terang-an (redup-terang).

Program diatas menggunakan ADC di port B3 untuk mengontrol tingkat terang-redup LED di port B0