Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Atmega 162 i PWM, który nie działa...

20 Kwi 2010 16:54 1438 4
  • Poziom 24  
    Właśnie próbuję uruchomić 4 wyjścia PWM na Atmedze 162 (TFQP 44)
    Mam podłączone :

    PB0 (OC0/T0) - timer0
    PB1 (OC2/T1) - timer2
    PD5 (OC1A) - timer1
    PE2 (OC1B) - timer1

    Zacząłem od timer2, i zrobiłem tak:

    Code:


    $regfile = "M162def.dat"
    $crystal = 11059200
    $baud = 9600

    ' wyjścia PWM
    Config Pinb.0 = Output
    Config Pinb.1 = Output
    Config Pind.5 = Output
    Config Pine.2 = Output

    ' konfiguracja PWM
    Config Timer2 = Pwm , Async = Off , Prescale = 1 , Pwm = On , Compare Pwm = Clear Down

    Enable Interrupts
    Enable Timer2

    Compare2 = 100

    Do
    Loop

    End


    No i - nie hula :(
    Samo wyjście PB.1 mam podpięte do mosfeta z ledem.
    Kiedy macham nim "ręcznie", to jest ok. A tak nic.

    A druga sprawa - jak to jest z timerem1, który mi tu ma obsługiwać 2 niezależne PWM-y ? Możecie podpowiedzieć, jak to obsłużyć ?
  • Poziom 17  
    A co ma się dziać jak w pętli DO...LOOP jest nic.Jakieś INCR coś.
  • Poziom 24  
    No ale po pierwsze, przecież PWM są sprzętowe, co ma do tego czy coś w do_loop jest czy nie ?
    Po drugie, w rzeczywistości tam coś jest robione, bo jest tak teraz :

    Code:


    ' konfiguracja PWM

    Config Timer2 = Pwm , Async = Off , Prescale = 1 , Pwm = On , Compare Pwm = Clear Down

    Enable Interrupts
    Enable Timer2

    Compare2 = 100

    Do
    Led_online = 1
    Waitms 300
    Led_online = 0
    Waitms 300
    Loop

    End



    Czyli mam miganie "kontrolnym" ledem.
    Ale nic to nie zmienia, na wyjściu PWM martwa cisza...
  • Poziom 33  
    A po czym stwierdzasz że martwa cisza? PWMa tmera2 nie jestes w stanie zobaczyć, jeśli masz tam diodę to będzie się świecić po prostu (przy OCR2=100, jeśli to fast).
  • Poziom 24  
    Już działa. Żeby było ok, trzeba ustawić bity wrejestrze TCCR2 :

    Code:

    Config Timer2 = Pwm , Async = Off , Prescale = 1024 , Pwm = On , Compare Pwm = Clear Down
    Reset Tccr2.com20
    Set Tccr2.com21

    Enable Interrupts
    Enable Timer2

    Compare2 = 20


    I teraz jest dobrze.

    Ale teraz - jak ustawić timer 0 jako PWM ? Bo config timer0 = pwm wywala mi błąd kompilatora.