Könnte es sein, das dir das Programm in der ISR Flankenerkennung den kanal soweit erhöht, das channel größer als 8 wird? Dein Offset-array liegt hinter dem Kanal-Array und wird dann vollgeschrieben.
Gruß MeckPommER
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?
MfG
Tido
---------------------------------------------------
Have you tried turning it off and on again???
---------------------------------------------------
Könnte es sein, das dir das Programm in der ISR Flankenerkennung den kanal soweit erhöht, das channel größer als 8 wird? Dein Offset-array liegt hinter dem Kanal-Array und wird dann vollgeschrieben.
Gruß MeckPommER
Mein Hexapod im Detail auf www.vreal.de
Danke MeckPommER,
das könnte sein. Bin momentan arbeiten, deshalb kann ich es erst morgen testen, aber ich denke, das ist das Problem!
MfG
Tido
---------------------------------------------------
Have you tried turning it off and on again???
---------------------------------------------------
Lesezeichen