- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 3 von 3

Thema: Timer/Interupt - Wo ist der Fehler im Programm

  1. #1
    Erfahrener Benutzer Roboter-Spezialist Avatar von erik_wolfram
    Registriert seit
    02.12.2009
    Ort
    Berlin
    Beiträge
    406

    Timer/Interupt - Wo ist der Fehler im Programm

    Anzeige

    E-Bike
    Hallo,
    ich bin am verzweifeln - das Programm funktioniert einfach nicht, aber ich finde den Fehler nicht:

    Code:
    $regfile "m8def.dat"
    $crystal = 16000000
    $framesize = 24
    $swstack = 8
    $hwstack = 32
    
    Config Timer1 = Timer , Prescale = 64
    Enable Timer1
    Timer1 = 65500
    
    On Timer1 Servoirq
    
    Enable Interrupts
    
    
    Config Portb.1 = Output
    Config Portb.2 = Output
    Portb.1 = 1
    Portb.2 = 0
    
    Waitms 500
    Portb.1 = 1                                                 'gruen
    Portb.2 = 1                                                 'rot
    
    'Program-Time
    Waitms 1000
    
    '###############################################################################
    'main
    
    Do
    
          Portb.2 = 0
    
    Loop
    
    
    '###############################################################################
    'Interupt
    Servoirq:
    If Portb.1 = 0 Then
       Portb.1 = 1
    Else
       Portb.1 = 0
    End If
    Timer1 = 5
    
    Return
    End
    Ich kann jeden beliebigen Wert für "Timer1 = x" (im Interupt) schreiben, aber die angeschlossene LED leuchtet immer im gleichen Sekundentakt.

    Hoffe ihr könnt mir helfen!

    MFG Erik

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    53
    Beiträge
    765
    Der "neue" Timerwert sollte am Anfang der IRQ-Routine gesetzt werden. Ich habe es mal an mein Board angepasst und getestet.

    Es blinkt unterschiedlich schnell. Je nachdem, welchen Wert Timer1 im Interrupt bekommt.

    Code:
    $regfile "m32def.dat"
    $crystal = 16000000
    $framesize = 24
    $swstack = 8
    $hwstack = 32
    
    Config Timer1 = Timer , Prescale = 64
    Enable Timer1
    Timer1 = 65500
    
    On Timer1 Servoirq
    
    Enable Interrupts
    Led1 Alias Portd.5
    Led2 Alias Portd.6
    
    Config Led1 = Output
    Config Led2 = Output
    Set Led1
    Reset Led2
    
    Waitms 500
    Set Led2
    
    'Portb.1 = 1                                                 'gruen
    'Portb.2 = 1                                                 'rot
    
    'Program-Time
    Waitms 1000
    
    '###############################################################################
    'main
    
    Do
          Reset Led2
    
    Loop
    End
    
    '###############################################################################
    'Interupt
    Servoirq:
    Timer1 = 30000
    
    Toggle Led1
    
    Return
    Du musst nur die LED-Ports und den richtigen Prozessor angeben.
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  3. #3
    Erfahrener Benutzer Roboter-Spezialist Avatar von erik_wolfram
    Registriert seit
    02.12.2009
    Ort
    Berlin
    Beiträge
    406
    Danke für den Hinweis,
    allerdings hatte ich auch vergessen, dass die Timer aufwärtszählend sind...
    jetzt funktioniert es!

Berechtigungen

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

Labornetzteil AliExpress