MrPower
10.07.2016, 19:20
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???:confused:
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(8)) '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
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???:confused:
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(8)) '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