logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[atmega8] [atmega8][bascom] Błąd kompilacji PWM - Compare A Pwm w programie sterownika

Tomek921023 30 Maj 2010 14:53 2488 21
REKLAMA
  • #1 8133608
    Tomek921023
    Poziom 15  
    Posty: 151
    Pomógł: 12
    Ocena: 9
    Witam mam problem z programem sterownika pwm na atmega8
    to jest ten program:
    
    $regfile = "m8def.dat"
    
    $crystal = 8000000
    
    Config Pinb.4 = Input
    Config Pinb.2 = Input
    Config Pinb.1 = Output
    Config Timer1 = Pwm , Pwm = 8 ,
    Compare A Pwm = Clear Down ,
    
    Compare A Pwm = Disconnect ,
     Prescale = 64
    
    
    
    Dim I As Byte
    S1 Alias Pinb.4
    S2 Alias Pinb.2
    Set Portb.4
    Set Portb.2
    Pwm1a = 0
    Do
    If S1 = 0 Then
    Waitms 25
    If S1 = 0 Then
    Incr I
    If I = 0 Then
    I = 255
    End If
    Pwm1a = I
    
    Waitms 20
    End If
    If S2 = 0 Then
    Waitms 25
    If S2 = 0 Then
    Decr I
    If I = 255 Then
    I = 0
    End If
    Pwm1a = I
    Waitms 20
    End If
    Loop
    End
    


    wyskakuje error w tym:

    
    Compare A Pwm = Clear Down ,
    
    Compare A Pwm = Disconnect ,
    

    Zmieniałem kolejność tego lecz to nie pomogło. Program pochodzi z książki pana Marcina Wiązania.
  • REKLAMA
  • #3 8133683
    Konto nie istnieje
    Poziom 1  
  • Pomocny post
    #4 8133787
    alien_audio
    Poziom 21  
    Posty: 223
    Pomógł: 57
    Ocena: 18
    Witam.
    1./ konfiguracja Timera1 musi być w jednej linii jako całość np.
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Disconnect
    Po za tym masz nie pozamykane prawidłowo warunki IF.
    Poniżej przykład całości:
    
    $regfile = "m8def.dat"
    $crystal = 8000000
    
    Config Pinb.4 = Input
    Config Pinb.2 = Input
    Config Pinb.1 = Output
    
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Disconnect
    
    Dim I As Byte
    S1 Alias Pinb.4
    S2 Alias Pinb.2
    Set Portb.4
    Set Portb.2
    Pwm1a = 0
    Do
    If S1 = 0 Then
     Waitms 25
    If S1 = 0 Then Incr I
    If I = 0 Then
    I = 255
    End If
    Pwm1a = I
    
    Waitms 20
    End If
    
    If S2 = 0 Then
     Waitms 25
    If S2 = 0 Then Decr I
    If I = 255 Then
    I = 0
    End If
    Pwm1a = I
    Waitms 20
    End If
    Loop
    End
  • #5 8133800
    Tomek921023
    Poziom 15  
    Posty: 151
    Pomógł: 12
    Ocena: 9
    Teraz nie było errora, a co z tym prescale ?? , dopisałem to prescale i działa .
  • REKLAMA
  • #6 8133898
    deksta84
    Poziom 24  
    Posty: 638
    Pomógł: 50
    Ocena: 84
    PRESCALE The TIMER is connected to the system clock in this case. You can select the division of the system clock with this parameter.
    Valid values are 1 , 8, 64, 256 or 1024

    Jak masz szybszy kwarc to dajesz stosowny dzielnik. Aby przebieg PWM odpowiadał wymaganiom. Wszystko zależy z jaką częstotliwością ten generator ma nadawać. Zegar 8MHz/65536/PRESCALE = f PWM, to sobie wyznaczysz żądaną częstotliwość. Chyba tak to było.
  • #7 8133917
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #8 8133925
    farrix
    Poziom 17  
    Posty: 260
    Pomógł: 7
    Ocena: 12
    Nie przez 65536 tylko przez rozdzielczość timera np Pwm=10 wtedy f.procka/1024(rozdzielczosc pwm)/prescaler=f.PWM


    Przez 65536 dzielisz gdy obluiczas timer=timer a nie timer=pwm
  • REKLAMA
  • #10 8133946
    Konto nie istnieje
    Poziom 1  
  • #11 8134006
    Tomek921023
    Poziom 15  
    Posty: 151
    Pomógł: 12
    Ocena: 9
    Mam jeszcze pytanie co trzeba zmienić aby to wypełnienie rosło szybciej bo teraz to jest strasznie mały ten skok ??
  • #12 8134065
    farrix
    Poziom 17  
    Posty: 260
    Pomógł: 7
    Ocena: 12
    W atmega8 nie ma 16-bitowego pwm-a
  • #13 8134943
    Konto nie istnieje
    Poziom 1  
  • #14 8135662
    farrix
    Poziom 17  
    Posty: 260
    Pomógł: 7
    Ocena: 12
    Rzeczywiście przeraszam bardzo jednak to prawda co piszą słynne zdanie "Bascom rozleniwia"
  • #15 8135666
    janbernat
    Poziom 38  
    Posty: 3954
    Pomógł: 468
    Ocena: 51
    Tu jest dokładniej, str.99 dla ATMega32:
    "The PWM resolution for fast PWM can be fixed to 8-, 9-, or 10-bit, or defined by either ICR1 or
    OCR1A. The minimum resolution allowed is 2-bit (ICR1 or OCR1A set to 0x0003), and the maximum
    resolution is 16-bit (ICR1 or OCR1A set to MAX)."

    Dodano po 1 [minuty]:

    farrix napisał:
    "Bascom rozleniwia"

    Nie Bascom rozleniwia- ludzie są z natury leniwi.
  • #16 8136576
    grzewoj
    Poziom 27  
    Posty: 868
    Pomógł: 115
    Ocena: 133
    Ale zauważcie że ludzkie lenistwo wielokrotnie było motorem postępu technologicznego :-)
  • #17 8136586
    Konto nie istnieje
    Poziom 1  
  • #18 8138934
    janbernat
    Poziom 38  
    Posty: 3954
    Pomógł: 468
    Ocena: 51
    To spróbujcie założyć taki temat:
    "Bascom jako czynnik postępu technologicznego".
  • #20 8139455
    janbernat
    Poziom 38  
    Posty: 3954
    Pomógł: 468
    Ocena: 51
    Ale się zacznie...
    Takie wyrażenia jak:
    "język wysokiego poziomu- a a nie makroasembler",
    "wszyscy korzystają z gotowców z internetu/bibliotek/ plików nagłówkowych itp."
    "których działania nie rozumieją"
    "bo nie są w stanie zrozumieć działania mikroprocesorów/rejestrów/CPU/peryferiów" itp.
    I wiele innych.
    Powinieneś opatentować i brać za ich użycie jakąś prowizję.
    P.S.
    Juz się zaczęło.
  • #21 8140114
    arktik1
    Poziom 27  
    Posty: 1281
    Pomógł: 61
    Ocena: 39
    Uwielbiam BASCOM.
    Nie bardzo mnie obchodzi jak to działa, obchodzi mnie że działa i to dobrze.
    Po co pisać i godzinami zastanawiać się czy będzie działało?
  • #22 8140136
    grzewoj
    Poziom 27  
    Posty: 868
    Pomógł: 115
    Ocena: 133
    Gdybyś wiedział jak to działa, działało by jeszcze lepiej - pisałbyś lepsze programy. Każdy używa tego co chce i w stopniu jaki mu odpowiada. Nie trzeba być mechanikiem, aby prowadzić samochód, ale wiedza o tym jak działa, może się przydać, gdy nagle się zepsuje :-)

Podsumowanie tematu

✨ W dyskusji poruszono problem błędu kompilacji w programie sterującym PWM dla mikrokontrolera ATmega8, który występuje w wyniku nieprawidłowej konfiguracji timera. Użytkownik został poinstruowany, aby połączyć wszystkie parametry konfiguracji timera w jednej linii, co rozwiązało problem. Dodatkowo, omówiono kwestie związane z preskalowaniem oraz częstotliwością PWM, wskazując na różne wartości preskalera oraz ich wpływ na generowany sygnał PWM. Użytkownicy podzielili się również uwagami na temat ograniczeń rozdzielczości PWM w ATmega8 oraz znaczenia zrozumienia działania programów w BASCOM.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA