xxrider
02.01.2008, 19:41
Hallo, erst mal die besten Neujahrswünsche an die Roboter-Gemeinde!!!
Ich habe ein kleines problem mit einem Programm:
eine spezielle abfolge von tasterbetätigungen soll einen port ein-und anschließend wieder schalten. Dann neu starten.
(taster1, dann taster2, und während dieser gedrückt gehalten wird nochmal taster1)
wenn die abfolge 2 mal falsch hintereinander erfolgt, dann soll das Programm stoppen.
Eine LED gibt hierüber auskunft.
das problem: das programm funktioniert anfänglich. wenn es aber längere Zeit auf „bereitschaft“ stehen soll (in der ersten do loop schleife), dann verselbständigt es sich. das äußert sich, indem z. B. nach langer Zeit (z.B. 20 stunden oder so) die LED aufleuchtet und das Programm somit gestoppt ist. oder eine richtige eingabe vom programm als falsch quittiert wird.
es scheint, als würde der taster während der (loop)zeit eine (geisterhafte) betätigung erfahren...
nach reset geht wieder alles einwandfrei, bis zur nächsten längeren wartezeit...
was könnte die ursache für dieses phänomen sein?
gruß
Holger
$regfile = "m32def.dat"
$crystal = 8000000 '=interner Quarz, 9000000 für externen Quarz
$baud = 9600
$hwstack = 64
$swstack = 64
$framesize = 64
Config Portb = Output
Config Portd.2 = Output 'leds
Config Portd.3 = Output
Config Portd.4 = Output
Config Portd.5 = Input
Config Portd.6 = Input
Config Porta = Input 'taster
Porta.0 = 1
Porta.2 = 1
Dim A As Word
Dim B As Word
Program:
Portb.1 = 0 'Led
Do
Loop Until Pina.0 = 0 Or Pina.2 = 0
If Pina.2 = 0 Then
Portb.1 = 1
Goto Abbruch
Else
End If
Waitms 300
Do
Loop Until Pina.0 = 0 Or Pina.2 = 0
If Pina.0 = 0 Then
Portb.1 = 1
Goto Abbruch
Else
End If
Waitms 10
Do
Loop Until Pina.0 = 0 Or Pina.2 = 1
If Pina.2 = 1 Then
Portb.1 = 1
Goto Abbruch
Else
End If
Waitms 100
Portb.0 = 1
Waitms 1200 'relais an
Portb.0 = 0
A = 5
Goto Program
Abbruch:
Wait A
A = A + 5
If A >= 15 Then
Stop
Else
Goto Program
End If
End
Ich habe ein kleines problem mit einem Programm:
eine spezielle abfolge von tasterbetätigungen soll einen port ein-und anschließend wieder schalten. Dann neu starten.
(taster1, dann taster2, und während dieser gedrückt gehalten wird nochmal taster1)
wenn die abfolge 2 mal falsch hintereinander erfolgt, dann soll das Programm stoppen.
Eine LED gibt hierüber auskunft.
das problem: das programm funktioniert anfänglich. wenn es aber längere Zeit auf „bereitschaft“ stehen soll (in der ersten do loop schleife), dann verselbständigt es sich. das äußert sich, indem z. B. nach langer Zeit (z.B. 20 stunden oder so) die LED aufleuchtet und das Programm somit gestoppt ist. oder eine richtige eingabe vom programm als falsch quittiert wird.
es scheint, als würde der taster während der (loop)zeit eine (geisterhafte) betätigung erfahren...
nach reset geht wieder alles einwandfrei, bis zur nächsten längeren wartezeit...
was könnte die ursache für dieses phänomen sein?
gruß
Holger
$regfile = "m32def.dat"
$crystal = 8000000 '=interner Quarz, 9000000 für externen Quarz
$baud = 9600
$hwstack = 64
$swstack = 64
$framesize = 64
Config Portb = Output
Config Portd.2 = Output 'leds
Config Portd.3 = Output
Config Portd.4 = Output
Config Portd.5 = Input
Config Portd.6 = Input
Config Porta = Input 'taster
Porta.0 = 1
Porta.2 = 1
Dim A As Word
Dim B As Word
Program:
Portb.1 = 0 'Led
Do
Loop Until Pina.0 = 0 Or Pina.2 = 0
If Pina.2 = 0 Then
Portb.1 = 1
Goto Abbruch
Else
End If
Waitms 300
Do
Loop Until Pina.0 = 0 Or Pina.2 = 0
If Pina.0 = 0 Then
Portb.1 = 1
Goto Abbruch
Else
End If
Waitms 10
Do
Loop Until Pina.0 = 0 Or Pina.2 = 1
If Pina.2 = 1 Then
Portb.1 = 1
Goto Abbruch
Else
End If
Waitms 100
Portb.0 = 1
Waitms 1200 'relais an
Portb.0 = 0
A = 5
Goto Program
Abbruch:
Wait A
A = A + 5
If A >= 15 Then
Stop
Else
Goto Program
End If
End