PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : BASCOM-Fehler oder was?



Tido
12.12.2008, 15:38
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:




$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

Ich hänge mal einen Screenshot der Ausgabe an. Bei Datenfehler 8 ist die Fernsteuerung ausgeschaltet.

Weiß jemand, warum sich der Wert ändert?

MeckPommER
12.12.2008, 15:54
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

Tido
12.12.2008, 17:34
](*,) ](*,) ](*,) ](*,)

Danke MeckPommER,

das könnte sein. Bin momentan arbeiten, deshalb kann ich es erst morgen testen, aber ich denke, das ist das Problem!