- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Timer hängt?

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    03.11.2007
    Ort
    München
    Beiträge
    23

    Timer hängt?

    Anzeige

    Powerstation Test
    Hallo liebe Gemeinde,
    habe in VB ein Programm geschrieben das mir die Daten von 10 Textboxen seriell an den MC sendet. Das Programm läuft bis es in die Do-Loop Schleife kommt, dort bleibt es dann hängen.Wenn ich einen Einschaltwert von 0 sende schaltet der entsprechende Ausgang sofort ein, aber nach der angegebenen Einschaltdauer nicht wieder aus. Somit habe ich die Vermutung dass der Timer nicht läuft, aber warum?
    Kann mir da jemand weiterhelfen???
    LG MrPower




    '(++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++
    + Programm zum Steuern von einem Magnetventil im ms-Bereich. +
    + Benutzereingaben über GUI in Visual Basic. Alle Werte, werden +
    + als ein String mit " * " von einander getrennt, eingelesen und +
    + mit dem Split Befehl wieder zerlegt.Mit dem Val Befehl werden +
    + die Teilstrings von Text in Zahlen umgewandelt.
    ')


    $regfile = "m2560def.dat"
    $crystal = 16000000
    $baud = 2400
    $hwstack = 32
    $swstack = 10
    $framesize = 40


    Config Serialin = Buffered , Size = 100






    Dim Empfangen As String * 100
    Dim Daten_ar(10) As String * 6
    Dim Daten As String * 6
    Dim Gelesen As Byte , N As Byte , V As Byte , S As Byte
    Dim Wert1 As Word , Wert2 As Word , Wert3 As Word , Wert4 As Word , Wert5 As Word , Wert6 As Word
    Dim Wert7 As Word , Wert8 As Word , Wert9 As Word , Wert10 As Word , Ms As Word , Wert34 As Word
    Dim Wert56 As Word , Wert78 As Word , Wert91 As Word


    Config Timer0 = Timer , Prescale = 64
    On Timer0 Timer0_isr
    Const Timerstartwert = 6
    Timer0 = Timerstartwert
    Enable Timer0
    Enable Interrupts


    Config Portb.7 = Output 'OnBoard LED
    Config Portc = Output
    Kamera Alias Portc.0
    Blitz Alias Portc.1
    Ventil1 Alias Portc.2
    Ventil2 Alias Portc.3
    Ventil3 Alias Portc.4


    '(Config Porta = Output
    Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Porta.3 , Rs = Porta.2
    Config Lcd = 16 * 4
    Initlcd
    Waitms 200
    Cursor Off
    Cls
    ')
    'Locate 1 , 1
    'Lcd "Warte auf Daten "
    Print "Warte auf Daten"
    Do
    Gelesen = Inkey()
    Empfangen = Empfangen + Chr(gelesen)
    'Locate 2 , 1
    'Lcd Empfangen
    Print Empfangen


    Loop Until Gelesen = " "
    'Wait 5


    For V = 1 To 10
    N = Split(empfangen , Daten_ar(1) , "*" )
    Daten = Daten_ar(v)
    Wert1 = Val(daten_ar(1)) 'Anzahl Durchläufe
    Wert2 = Val(daten_ar(2)) 'Pause zwischen den Durchläufen
    Wert3 = Val(daten_ar(3)) 'Anfang Kameraauslösung
    Wert4 = Val(daten_ar(4)) 'Dauer der Kameraauslösung
    Wert5 = Val(daten_ar(5)) 'Anfang Blitzauslösung
    Wert6 = Val(daten_ar(6)) 'Dauer der Blitzauslösung
    Wert7 = Val(daten_ar(7)) 'Anfang erste Ventilöffnung
    Wert8 = Val(daten_ar() 'Dauer der ersten Ventilöffnung
    Wert9 = Val(daten_ar(9)) 'Anfang zweite Ventilöffnung
    Wert10 = Val(daten_ar(10)) 'Dauer der zweiten Ventilöffnung


    Next
    Waitms 200
    Cls


    For S = 1 To 10
    'Locate 1 , 1
    'Lcd "Bin in Schleife "
    Print "Bin in der For-Next"
    'Wait 5


    Do
    'Locate 1 , 1
    'Lcd "Bin im Do-Loop" ; S
    Print "Bin im Do-Loop"
    Print "Durchlauf Nr. " ; S
    Ms = 0
    If Ms = Wert3 Then
    Gosub Kamera_ein
    End If
    Wert34 = Wert3 + Wert4
    If Ms = Wert34 Then
    Gosub Kamera_aus
    End If
    If Ms = Wert5 Then
    Gosub Blitz_ein
    End If
    Wert56 = Wert5 + Wert6
    If Ms = Wert56 Then
    Gosub Blitz_aus
    End If
    If Ms = Wert7 Then
    Gosub Ventil_ein
    End If
    Wert78 = Wert7 + Wert8
    If Ms = Wert78 Then
    Gosub Ventil_aus
    End If
    If Ms = Wert9 Then
    Gosub Ventil_ein
    End If
    Wert91 = Wert9 + Wert10
    If Ms = Wert91 Then
    Gosub Ventil_aus
    End If


    Loop Until Ms = 2000


    Wait Wert2


    Next


    End


    Timer0_isr:
    Timer0 = Timerstartwert
    Incr Ms
    Return


    Kamera_ein:
    Set Portc.0
    Print "Kamera ein"
    Return


    Kamera_aus:
    Reset Portc.0
    Return


    Blitz_ein:
    Set Portc.1
    'Locate 3 , 1
    Print "Blitz ein "
    Return


    Blitz_aus:
    Reset Portc.1
    Return


    Ventil_ein:
    Set Portc.2
    'Locate 4 , 1
    Print "Ventil ein "
    Return


    Ventil_aus:
    Reset Portc.2
    ReturnG MrPower

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    03.11.2007
    Ort
    München
    Beiträge
    23
    An den Armin,
    Der Beitrag ist anscheinend im falschen Forum, bitte verschieben oder löschen.
    Besten Dank

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    05.11.2009
    Ort
    Gerblingerode
    Alter
    58
    Beiträge
    207
    Code:
    Timer0_isr:
    Timer0 = Timerstartwert
    Incr Ms
    Return
    das der Timer auf Start-Wert gesetzt wird ist bestimmt so in Bascom ... bin noch Bascom Anfänger und habe mich mit Timer in Bascom noch nicht befasst ...

    dort soll doch der Wert MS um eins erhöht werden um deine DO/LOOP Schleife nach der Zeit MS=2000 zu beenden ...

    in der FOR/NEXT Schleife müsste doch nach der DO/LOOP-Schleife der Wert MS wieder zurückgesetzt werden oder ?! ... kann da aber nichts finden ...

    - - - Aktualisiert - - -

    Code:
    Loop Until Ms = 2000
    schreib mal Loop Until Ms > 2000

    den der Timer läuft doch von Programm Anfang an ... bis es in die DO/LOOP geht ist der Wert MS doch schon weit über 2000 ... vor der DO/LOOP den Wert MS=0 setzen ...



    Beispiel:


    Code:
    Ms=0
    Do
    'Locate 1 , 1
    'Lcd "Bin im Do-Loop" ; S
    Print "Bin im Do-Loop"
    Print "Durchlauf Nr. " ; S
    '  ------ Ms = 0  ----- 
    If Ms = Wert3 Then
    Gosub Kamera_ein
    End If
    Wert34 = Wert3 + Wert4
    If Ms = Wert34 Then
    Gosub Kamera_aus
    End If
    If Ms = Wert5 Then
    Gosub Blitz_ein
    End If
    Wert56 = Wert5 + Wert6
    If Ms = Wert56 Then
    Gosub Blitz_aus
    End If
    If Ms = Wert7 Then
    Gosub Ventil_ein
    End If
    Wert78 = Wert7 + Wert8
    If Ms = Wert78 Then
    Gosub Ventil_aus
    End If
    If Ms = Wert9 Then
    Gosub Ventil_ein
    End If
    Wert91 = Wert9 + Wert10
    If Ms = Wert91 Then
    Gosub Ventil_aus
    End If
    Loop Until Ms > 2000
    Geändert von Feuerring (13.07.2016 um 09:45 Uhr)
    Gruß Ralf ... Projekt-Beschreibungen www.greinert-dud.de ... "Alle sagten: Das geht nicht. Dann kam einer, der wusste das nicht und hat's gemacht."

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    66
    Beiträge
    2.435
    Hallo MrPower,
    Zitat Zitat von MrPower Beitrag anzeigen
    Code:
    Do
     'Locate 1 , 1
     'Lcd "Bin im Do-Loop" ; S
     Print "Bin im Do-Loop"
     Print "Durchlauf Nr. " ; S
     Ms = 0
     If Ms = Wert3 Then
     Gosub Kamera_ein
     End If
     Wert34 = Wert3 + Wert4
     If Ms = Wert34 Then
     Gosub Kamera_aus
     End If
     If Ms = Wert5 Then
     Gosub Blitz_ein
     End If
     Wert56 = Wert5 + Wert6
     If Ms = Wert56 Then
     Gosub Blitz_aus
     End If
     If Ms = Wert7 Then
     Gosub Ventil_ein
     End If
     Wert78 = Wert7 + Wert8
     If Ms = Wert78 Then
     Gosub Ventil_aus
     End If
     If Ms = Wert9 Then
     Gosub Ventil_ein
     End If
     Wert91 = Wert9 + Wert10
     If Ms = Wert91 Then
     Gosub Ventil_aus
     End If
    
    
     Loop Until Ms = 2000
    Ms ist immer 0!

    Du solltest dich mal etwas mit dem Debugger befassen und das Programm im Einzelschritt-Modus ausführen!


    MfG Peter(TOO)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    03.11.2007
    Ort
    München
    Beiträge
    23
    Hallo zusammen,
    Danke @ Feuerring, das war der entscheidende Tip.
    @Peter(TOO) meinst du mit Debugger den Simulator (F2) ?. Ich habe keine Ahnung wie ich die Werte die vom VB Programm kommen dort hineinbekomme.
    LG MrPower

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    05.11.2009
    Ort
    Gerblingerode
    Alter
    58
    Beiträge
    207
    Mein Tipp an MrPower

    schreibe mit Einrückungen und Absätzen, erleichtert das lesen ungemein

    Beispiel:

    Code:
    Ms=0
    Do
        'Locate 1 , 1
        'Lcd "Bin im Do-Loop" ; S
        Print "Bin im Do-Loop"
        Print "Durchlauf Nr. " ; S
        '  ------ Ms = 0  ----- 
        If Ms = Wert3 Then
            Gosub Kamera_ein
        End If
        
        Wert34 = Wert3 + Wert4
        If Ms = Wert34 Then
            Gosub Kamera_aus
        End If
        
        If Ms = Wert5 Then
            Gosub Blitz_ein
        End If
        
        Wert56 = Wert5 + Wert6
        If Ms = Wert56 Then
            Gosub Blitz_aus
        End If
        
        If Ms = Wert7 Then
            Gosub Ventil_ein
        End If
        
        Wert78 = Wert7 + Wert8
        If Ms = Wert78 Then
            Gosub Ventil_aus
        End If
        
        If Ms = Wert9 Then
            Gosub Ventil_ein
        End If
        
        Wert91 = Wert9 + Wert10
        If Ms = Wert91 Then
            Gosub Ventil_aus
        End If
    Loop Until Ms > 2000
    bei jeder Schleife / Bedingung usw. Beginn um ein nach rechts einrücken und am jeweiligen Ende wieder ein zurück
    Geändert von Feuerring (13.07.2016 um 10:40 Uhr)
    Gruß Ralf ... Projekt-Beschreibungen www.greinert-dud.de ... "Alle sagten: Das geht nicht. Dann kam einer, der wusste das nicht und hat's gemacht."

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    03.11.2007
    Ort
    München
    Beiträge
    23
    Hallo zusammen.
    kann mir einer sagen warum bei dem Code
    If Ms = Wert3 Then
    Gosub Kamera_ein
    End If

    das Programm nicht ins Unterprogramm verzweigt. Wenn ich das Gleich durch ein Größer ersetze verzweigt es schon, bzw die am Ausgang angeschlossene LED leuchtet im ersten Fall
    nicht, im zweiten Fall schon.

    LG MrPower

  8. #8
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    05.11.2009
    Ort
    Gerblingerode
    Alter
    58
    Beiträge
    207
    If Ms = Wert3 Then
    Wert3 = Val(daten_ar(3)) 'Anfang Kameraauslösung
    welchen Wert hat denn WERT3 ... sollte > 0 aut jeden Fall sein ?!
    Gruß Ralf ... Projekt-Beschreibungen www.greinert-dud.de ... "Alle sagten: Das geht nicht. Dann kam einer, der wusste das nicht und hat's gemacht."

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    03.11.2007
    Ort
    München
    Beiträge
    23
    Hallo Feuerring,
    die Werte sind variabel, die hängen von der Benutzereingabe ab. Die Frage ist warum geht die LED bei = nicht an. Bei >
    funktioniert das doch auch. Die LED bleibt dann solange an bis Wert34 erreicht ist, danach klappert es da beide Werte
    > ms sind.

    LG MrPower

  10. #10
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    05.11.2009
    Ort
    Gerblingerode
    Alter
    58
    Beiträge
    207
    Die Frage ist warum geht die LED bei = nicht an. Bei >
    Die Frage welcher Wert wird übergeben z.B. 0 der wird nicht klappen, aber MS>0 funktioniert natürlich ...

    Dann ist die Frage wie lange braucht das Programm bis es in die Do/Loop Schleife geht, in der Zwischenzeit zählt der Timer bereits MS hoch, deswegen auch MS=0 vor der Do/Loop Schleife ...

    wenn Deine Do/Loop Schleife z.B. in der Ausführung länger als 1ms dauert, zählt in der Zwischenzeit der Timer MS hoch, da ist es dann Glücksache den genauen ms Wert zu treffen,
    dein Programm funktioniert nur wenn die Do/Loop Schleife x fache Durchläufe in einer ms macht ...

    Was man auch machen könnte, in der Interrupt Routine, wo derzeit ms hochgezählt wird deine IF - Anweisungen und die Ausgaben zu legen ... dieses sollte aber dann in der Ausführung nicht länger als 1ms dauern ...
    Gruß Ralf ... Projekt-Beschreibungen www.greinert-dud.de ... "Alle sagten: Das geht nicht. Dann kam einer, der wusste das nicht und hat's gemacht."

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Programm hängt
    Von MrPower im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 12
    Letzter Beitrag: 15.06.2015, 19:52
  2. Timer hängt sich auf?
    Von Ineedhelp im Forum C - Programmierung (GCC u.a.)
    Antworten: 15
    Letzter Beitrag: 22.08.2008, 17:49
  3. AVR Studio hängt sich auf !!
    Von AndyTrendy im Forum C - Programmierung (GCC u.a.)
    Antworten: 6
    Letzter Beitrag: 29.04.2008, 23:04
  4. LCD hängt sich auf
    Von hotijack im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 30.05.2007, 17:47
  5. MEGA8 hängt sich auf
    Von rathma im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 15
    Letzter Beitrag: 13.04.2007, 19:19

Berechtigungen

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

LiFePO4 Speicher Test