Sorry Leute,
aber ich stehe seit gestern mit meinem Programm auf Kriegsfuß.
Es wertet das Summensignal eines RC-Empfängers aus.
Das Problem ist, dass sich die Variable Offset(1) im laufenden Programm ändert, obwohl diese im Code gar nicht vorkommt.
Die Variable nimmt bei jedem Aus- und Wiedereinschalten der Fernsteuerung einen anderen Wert ein. Hier mal der Code:
Ich hänge mal einen Screenshot der Ausgabe an. Bei Datenfehler 8 ist die Fernsteuerung ausgeschaltet.Code:$regfile "m32def.dat" $framesize = 42 $swstack = 32 $hwstack = 32 $crystal = 16000000 $baud = 9600 Config Timer0 = Timer , Prescale = 256 'Timer0 auf 16µs/Takt, Überlauf bei ca. 4ms On Timer0 Sync Config Int0 = Falling Enable Interrupts On Int0 Flankenerkennung Dim Dummy As Byte 'enthält die Sync-Zeit Dim Kanal(8) As Byte 'muss direkt hinter Dummy dimensioniert werden! Dim Offset(7) As Byte Dim Channel As Byte Dim Fehler As Byte Dim Pruefsumme As Word Offset(1) = 0 Do Gosub Messen Ausgabe: If Fehler > 0 Then Print "Datenfehler " ; Fehler Else Print " " ; Kanal(1) ; " " ; Kanal(2) ; " " ; Kanal(3) ; " " ; Kanal(4) ; " " ; Kanal(5) ; " " ; Kanal(6) ; " " ; Kanal(7) ; " Offset(1): " ; Offset(1) End If Waitms 25 Loop Flankenerkennung: 'fallende Flanke erkannt Kanal(channel) = Timer0 'Timerwert in Kanalvariable speichern Timer0 = 0 'und Timer zurücksetzen Incr Channel 'auf den nächsten Kanalspeicher wechseln Return Sync: 'Überlauf des Timers durch die Pause im Signal Channel = 0 'das Sync-Signal vor dem ersten Kanal Fehler = 0 'Fehlerspeicher löschen Return Messen: Timer0 = 0 'Timer (Sync) zurücksetzen Enable Timer0 'und einschalten Enable Int0 'Interrupt (Flanke) einschalten Waitms 40 'Zeit für 2 Messungen Disable Int0 'Interrupt ausschalten Disable Timer0 'Timer ausschalten Channel = 0 Fehlerpruefung: Pruefsumme = 0 For Channel = 1 To 7 If Kanal(channel) < 52 Or Kanal(channel) > 132 Then Fehler = Channel 'nur Kanalwerte von 52-132 gültig Pruefsumme = Pruefsumme + Kanal(channel) 'alle Kanäle addieren Next Channel Pruefsumme = Pruefsumme + Dummy 'Sync-Zeit zu der Kanalsumme addieren If Pruefsumme < 565 Then Fehler = 8 'nur größere Prüfsumme gültig Return
Weiß jemand, warum sich der Wert ändert?
Lesezeichen