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

[atmega8][bascom]Błędy przy kompilacji.

Tomek921023 30 Maj 2010 14:53 2398 21
  • #1 8133608
    Tomek921023
    Poziom 15  
    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.
  • #3 8133683
    Konto nie istnieje
    Poziom 1  
  • Pomocny post
    #4 8133787
    alien_audio
    Poziom 21  
    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  
    Teraz nie było errora, a co z tym prescale ?? , dopisałem to prescale i działa .
  • #6 8133898
    deksta84
    Poziom 24  
    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  
  • #8 8133925
    farrix
    Poziom 17  
    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
  • #10 8133946
    Konto nie istnieje
    Poziom 1  
  • #11 8134006
    Tomek921023
    Poziom 15  
    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  
    W atmega8 nie ma 16-bitowego pwm-a
  • #13 8134943
    Konto nie istnieje
    Poziom 1  
  • #14 8135662
    farrix
    Poziom 17  
    Rzeczywiście przeraszam bardzo jednak to prawda co piszą słynne zdanie "Bascom rozleniwia"
  • #15 8135666
    janbernat
    Poziom 38  
    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  
    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  
    To spróbujcie założyć taki temat:
    "Bascom jako czynnik postępu technologicznego".
  • #20 8139455
    janbernat
    Poziom 38  
    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  
    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  
    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 :-)
REKLAMA