Hi,
ich komm' nicht mehr weiter bei folgendem Problem:
An einem Modellflugempfänger wird das Summensignal abgegriffen (siehe Bild):
Bild hier
Nun benötige ich den Wert der ersten vier Impulse (= Kanäle)
Und nach einigen Versuchen hab' ich folgendes Programm geschrieben:
Sorry für die nicht vorhandenen Kommentare, aber ich schreib' die immer erst am Schluss reinCode:$baud = 9600 $crystal = 16000000 $regfile "m32def.dat" Config Portc.2 = Output Vorne Alias Portc.2 Config Portc.1 = Output Hinten Alias Portc.1 Config Portc.0 = Output Links Alias Portc.0 Config Portd.7 = Output Rechts Alias Portd.7 Config Timer0 = Timer , Prescale = 1024 'konfiguriere Timer0 Enable Timer0 Stop Timer0 Config Int0 = Rising 'configuriere Int0 Auf Low Level Enable Interrupts 'einschalten der Interrupts Enable Int0 'einschalten Von Interrupt Int0 On Int0 Summensignalmessung 'springe Zu einstellen_von _int0 Dim Pitch As Byte Dim Gier As Byte Dim Roll As Byte Dim Nick As Byte Dim Messung As Bit Dim Kanal As Byte Dim Zaehler As Byte Do Links = 1 Links = 0 Loop Summensignalmessung: Rechts = 1 If Messung = 0 And Kanal = 0 And Timer0 < 50 Then Stop Timer0 Tcnt0 = 0 Start Timer0 End If If Messung = 0 And Kanal = 0 And Timer0 > 50 Then Stop Timer0 Tcnt0 = 0 Start Timer0 Messung = 1 Incr Kanal End If If Messung = 1 And Kanal = 1 Then Stop Timer0 Timer0 = Pitch Tcnt0 = 0 Start Timer0 Incr Kanal End If If Messung = 1 And Kanal = 2 Then Stop Timer0 Timer0 = Gier Tcnt0 = 0 Start Timer0 Incr Kanal End If If Messung = 1 And Kanal = 3 Then Stop Timer0 Timer0 = Roll Tcnt0 = 0 Start Timer0 Incr Kanal End If If Messung = 1 And Kanal = 4 Then Stop Timer0 Timer0 = Nick Tcnt0 = 0 Start Timer0 Messung = 0 Kanal = 0 End If Incr Zaehler If Zaehler = 250 Then Print Pitch Print Gier Print Roll Print Nick Zaehler = 0 End If Rechts = 0 Return End![]()
Die Ausgänge sind die Servoimpulsausgänge für die vier Regler, die später angesteuert werden (daher kann Timer1 nicht verwendet werden)
Was ich in dem Programm versucht habe: Summensignal ist am Interrupt- Pin0 angeschlossen (Pind.2 glaub ich), bei einer steigenden Flanke geht der MC in ein Unterprogramm, in dem je nach gesetztem KanalByte und Messungsbit der Zähler gestartet oder gestoppt wird. Wenn das Kanalbyte zwischen 1 und 4 ist werden entsprechende Variablen mit dem Wert des Timers überschrieben, sie Stellen also die Position der Knüppel am Sender dar.
Nur das Problem an der Sache: Angefangen hab ich mit einem Prescaler von 1024, wollte sehen wie hoch der Zähler denn kommt. Aber beim Befehl "print" kam nur 0 raus. Laut meinen Berechnungen müsste der Timer aber bei einer Impulsdauer von 2ms bis knapp über 30 zählen. Als ich direkt den Timerwert ausgelesen hab' kamen dann 36 bei "roll" raus, aber der Wert änderte sich nicht bei verändern der Impulsdauer (also wenn man den Knüppel am Sender bewegt).
Bei einem Versuch, einen 1 Sekundentakt herzustellen fiel mir auf dass der berechnete Wert garnicht stimmte. Vll. auch ein Programmfehler von mir.
Ich wäre euch sehr dankbar wenn ihr mir beim Thema Timer weiterhelfen würdet, komme auch mit den Infos aus dem RN-Wissen nicht weiter. Hab mich bis jetzt noch nicht allzu sehr damit beschäftigt.







Zitieren

Lesezeichen