Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[Atmega32][Bascom] konfiguracja timerów dla portów pb.0 i 1

fliper_katrill 11 Oct 2009 01:40 3282 7
  • #1
    fliper_katrill
    Level 20  
    Witam serdecznie!
    Chciałbym poprosić o pomoc w znalezieniu rozwiązania takiego problemu:
    ATmega32 zawiera w sobie 3 timery . Aby się dobrać do timera 1 trzeba użyć np. składni pwm1a lub pwm1b, tymczasem piny pb.0 i pb.1 są w dokumentacji oznaczone jako kolejno timer0 i timer1, czy da się na nich zrobić PWM , jak się do nich dobrać?
    Z góry dziękuję :)
  • #2
    wader_669
    Level 28  
    na timerze2 mozesz jeszcze zrobic, jest pare postow na elektrodzie o tym poszykaj. Oczywiscie mowie tylko o hardwerowym pwm, nie mowiac o softwareowym.
  • Helpful post
    #3
    ZbeeGin
    Level 39  
    Wszystkie Timery układu Mega32 mogą generować sygnały PWM:

    Timer0 - jeden kanał: OC0 - PB.3
    Timer1 - dwa kanały: OC1A, OC1B - PD.5, PD.4
    Timer2 - jeden kanał OC2 - PD.7

    Na wejściach T0 i T1 liczniki nie generują sygnałów PWM.


    Co do samej konfiguracji to problem jest prawie żaden. W przypadku Timer1 sprawa jest prosta, gdyż CONFIG TIMER1 posiada wszelkie potrzebne składniki. Tak samo jest w przypadku Timer2.
    http://zbeegin.republika.pl/bashelp/s_config_timer1.html
    http://zbeegin.republika.pl/bashelp/s_config_timer2.html

    Dla Timer0 powinna działać także rozszerzona składnia CONFIG TIMER0.
    http://zbeegin.republika.pl/bashelp/s_config_timer0.html
    Trzeba tylko pamiętać, że posiada on jeden rejestr COMPARE. W tym przypadku będzie odpowiadał COMPARE A PWM.
  • #4
    wader_669
    Level 28  
    ZbeeGin wrote:

    Timer0 - jeden kanał: OC0 - PB.3
    Timer1 - dwa kanały: OC1A, OC1B - PD.5, PD.4
    Timer2 - jeden kanał OC2 - PD.7


    Racja zapomnialem, ze atmega32 ma 4 pwm, a nie 3 jak atmega8 :P
  • #5
    fliper_katrill
    Level 20  
    Czy koledzy mogą sprawdzić czy to teoretycznie zadziała, czy może o czymś zapomniałem, bo nie chce mi działać...
    
    Config Timer2 = Pwm , Prescale = 1 , Pwm = On , Compare Pwm = Clear Down
    do
    .........
    Ocr2 = 128
    .........
    loop
    
  • #6
    ZbeeGin
    Level 39  
    Jak nie działa? Jakie objawy? Czym sprawdzasz?

    Aż sam sprawdziłem na płycie ZL3AVR. Działa.

    $regfile = "m32def.dat"
    $crystal = 1000000
    
    
    Config Timer2 = Pwm , Prescale = 1 , Pwm = On , Compare Pwm = Clear Down
    
    Do
      Ocr2 = 0
      Wait 1
      Ocr2 = 128
      Wait 1
      Ocr2 = 255
      Wait 1
    Loop
    
    End
  • #7
    fliper_katrill
    Level 20  
    Program działał niepoprawnie, gdyż jak zwrócono uwagę w polskiej wersji helpa do AVR
    "W wyniku błędu opcje CLEAR UP i CLEAR DOWN zostały zamienione. Dlatego PWM działa odwrotnie niż wynikałoby to z jego konfiguracji." i po włączeniu układu dioda się świeciła no bo wypełnienie 0 było maksymalnym dla opcji "clear down" (ze względu na przytoczony błąd) to mnie zaniepokoiło dlatego napisałem że nie działa jak trzeba :). Teraz mam "clear up" i śmiga.
    Dziękuję kolegom.
  • #8
    ZbeeGin
    Level 39  
    fliper_katrill wrote:
    Program działał niepoprawnie, gdyż jak zwrócono uwagę w polskiej wersji helpa do AVR

    Działa niepoprawnie to nie to samo co nie działa.
    Znam ten cytat - przecież sam go napisałem :P Choć to wynika z przyjętej dawno temu konwencji w CONFIG TIMER1 i nie jest ona precyzyjna.