-
        

Ergebnis 1 bis 5 von 5

Thema: Bremst Waitms Timer1 aus?

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.11.2006
    Beiträge
    151

    Bremst Waitms Timer1 aus?

    Anzeige

    Hey,
    Der Timer sollte doch so wie ich das verstanden habe unabhängig vom rest des AVR laufen können, oder?
    Ich meine festgestellt zu haben, dass mein Timer, der Einmal Pro Sekunde aufgerufen wird, den Sekundentakt nicht mehr einhält, wenn ich den wait Befehl nutze.
    Das passiert, obwohl die Pause deutlich kleiner ist, als eine Sekunde.

    Hab hier mal ein Beispiel reingemacht. Bilde ich mir das nur ein, oder friert wait wirklich alles ein, sogar den unabhängigen Timer?

    Code:
    $regfile = "m8def.dat"
    $crystal = 4000000
    Dim Zähler As Integer
    Zähler=0
    
    Config Portb.7 = Output
    Portb.7=1
    
    Config Timer1 = Timer , Prescale = 256
    Disable Timer1
    On Timer1 Isr_von_timer1
    Enable Interrupts
    Timer1 = 49500
    
    do
      Enable Timer1
    loop
    
    Isr_von_timer1: 
      Incr Zähler
      if Zähler=10 Then
        Timer1 = 49500
        Portb.7=0            'Led an
        waitms 200
        Portb.7=1            'Led aus
      End if
    return

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    24
    Beiträge
    1.544
    Hi,

    normalerweise sollte das Waitms keine Auswirkungen auf den Timer haben! Aber mir fallen mehrere Punkte auf, die du ändern solltest:
    1. Definiere in JEDEM Programm Framesize, HWStack und SWStack.
    2. Solche Sachen wie "Enable Timer1" gehören im Normalfall nicht in die Mainloop, sondern davor!
    3. Die Neuzuweisung des Timerwertes gehört an den Anfang der ISR.
    4. Die Variable Zähler musst du auch irgendwann mal wieder zurücksetzen, außer du rechnest mit dem Überlauf.
    5. Wenn du schon einen Zähler in der ISR hast, nutze doch diesen, um die LED blinken zu lassen.
    In etwa so:
    Code:
    Isr_von_timer1:
    Timer1 = 49500
    Incr Zähler
    If Zähler = 8 Then
    Portb.7 = 0                                                               
    Elseif Zähler = 10 Then
    Zähler = 0
    Portb.7 = 1              
    Endif
    Return
    Das wars mal von mir, wenn du Fragen hast, hau rein

    Gruß
    Chris

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von malthy
    Registriert seit
    19.04.2004
    Ort
    Oldenburg
    Beiträge
    1.379
    vor allem kein wait in die ISR!

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.11.2006
    Beiträge
    151
    Hey,
    Danke für die Tips. Einige davon habe ich jetzt nur nicht eingehalten, weil ich das "Programm" nur als Beispiel eben so hingeschrieben hab, da hätte ich wohl etwas sorgfältiger sein können .

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    09.09.2006
    Alter
    28
    Beiträge
    841
    Blog-Einträge
    1
    Davon unabhängig: 1. ISR so kurz wie möglich machen, am besten werden nur Flags gesetzt 2. Prüfe, ob nicht die Bascom Delay Funktion Timer 1 nutzt und da etwas durcheinander kommt.

Ähnliche Themen

  1. waitms... Anfängerfalle ??
    Von oderlachs im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 31.12.2010, 19:25
  2. Warum bremst SerialPort mein Programm aus?
    Von exaware im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 12
    Letzter Beitrag: 29.01.2010, 23:27
  3. Wie Bremst man am schnellsten?
    Von NemesisoD im Forum Motoren
    Antworten: 4
    Letzter Beitrag: 04.05.2007, 11:53
  4. Waitms-problem
    Von minium :) im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 14
    Letzter Beitrag: 10.03.2007, 18:28
  5. Motor bremst .....
    Von nux im Forum Motoren
    Antworten: 3
    Letzter Beitrag: 06.08.2004, 17:34

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •