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

Bascom AVR (AT90s2313) problemy z PWM

marciu11 19 Mar 2006 15:16 2633 6
  • #1
    marciu11
    Level 15  
    Witam serdecznie
    Jestem poczatujacym w rej dziedzine i mo moge sobie poradzic z jednym faktek.

    Mianowicie mam do zrealizoania takowe oto zadanie: Program wykonuje sobie tam jakas prace (kakretnie sekwencyjne zpalanie diod) i po pewnym czasie ma plynnie zapalic diode (kakretnie zbior diod) Wiec jak mniemam najlatwiej bedze do tego zapedzic PWM.

    Tak wiec konfiguruje Timer1 jako PWM:

    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down
    ' ustawiam zmienna na 0
    Pwm1a = 0

    Enable Interrupts
    Enable Timer1
    Stop Timer1


    Gdy wymagany jest fragmet kodu odpowiedzialny za plynne wlaczenie swiatla jest skok i wykonuje sie ta petla:



    ...
    Start Timer1
    For Temp = 1 To 65535
    Pwm1a = Pwm1a + 1
    Waitms 5
    Next Temp
    Stop Timer 1

    ...

    ktora powinna wlaczyc PWM plynie zwiekszyc wypelnienie a tym samym jasnosc swiecenia swiatla - przynajmniej w moim mniemaniu i ponownie wylaczyc zegar

    Do testow uzywam Proteusa 6.7 - full - narazie szlifuje program zanim zorbie plytke.

    I gdy wlaczam symulacje to koncowka OC1 PB.3 jest "ZIMNA" nie generuje impulsow

    Czy to wina Proteusa iz nie pokazuje przebiegu PWM czy cos napialem zle?

    Drugie pytanie jak pozniej odzystac koncowke PB.3 z lap Timera? Tak aby moc dowlnie wlaczac i wylaczac te diode.
    Wydanie polecania: Set Portb.3 nie wlacza pinu.

    Jak mniemam jest ona dalej we wladaniu PWM.
    Disable Timer1 nie przynosi rezultatu dioda sie nie wlacza po komendze Set Portb.3

    pomozcie prosze.
    MarCiu
  • #2
    hunterhouse
    Level 26  
    z niewidomych przyczyn bascom niedziała poprawnie z PWM'em jeśli w konfigóracji timera nie damy opcji prescale.
    ten kod działa poprawnie
    Code:
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Prescale = 1


    żeby zapalić diody należy wpisać Pwm1a=255
    żeby zgasić
    pwm1a=0

    gdy używamy
    pwma niepowinno się odblokowywać przerwania timera, nietrzeba też właczać i wyłaczać timera komędami start i stop

    w sumie to wystarczy wpisać
    Code:
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Prescale = 1
    
    Pwm1a=100

    i na wyściu OC1A jest sygnał PWM o wypełnieniu 100/255
  • #3
    marciu11
    Level 15  
    Dzieki hunterhouse!!
    Wszystko smiga jak ta lala :)

    Znalazlem tez konfiguracje zwalniajaca koncowke:

    Code:
    Config Timer1 = Pwm , Compare A Pwm = Disconnect


    Dzieki za pomoc i pozdrawiam

    MarCiu
  • #4
    marciu11
    Level 15  
    Pozwole sobie zadac jeszcze jedno pytanie. Wpradze nie dotyczy juz samego programowania, to juz ukonczone.
    Ale dotyczy tez tego AVR'a, a i po male pytanko nie chce zapoczynac nowego watku.
    Mianowicie czy bezposrednio z wyjscia mozna wysterowac maly tranzystor(BC547)?
    Wiem ze sie nie powinno. Ale co kakretnie ten procek na to (tranzwystor bedzie obciazaony 3-5 diodami)?

    MarCiu
  • #5
    karlos79
    Level 33  
    Witam
    Można wysterować BC547
    Pozdrawiam
  • #6
    hunterhouse
    Level 26  
    oczywiście że można sterować tranzystorem ale należy dodać rezystor ograniczający prąd bazy np 1Kohm
  • #7
    slaweek_22
    Level 16  
    Podepnę sie pod tema aby nie zakładać nowego. Mój kod w bascomie wygląda tak:
    Code:

    $regfile = "attiny2313.dat"
    $crystal = 1000000

    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Prescale = 1
    Pwm1a=100
    Config Portb.2 = Output


    Do
    Waitms 10
    Incr Pwm0a
    Loop


    mam pytanie co do wspomnianego wcześniej proteusa. Załadowałem do niego HEXa a tym programem ale nie moge na oscyloskopie zobaczyc przebiegu PWMa. Czy ro jest wina symulatora? Czy nie trzeba się przejmowac takimi rzeczami bo proteus sobie z tym nie radzi a PWM dziąła poprawnie?