
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
> Hallo, > > ich möchte die Servoanschlüsse einer Modellfernsteuerung auslesen um dann mit c-control die steuerung zu automatisieren. > Hat jemand Tipps, wie man das machen kann? > > Hallo, die Dekodierung von Fernsteuersignalen mit C-Control 1 kann so realisiert werden: - Die Impulsleitungen der zu dekodierenden Servoausgänge des Empfängers werden auf C-Control-Ports (Eingänge) über jeweils eine Transitorstufe (PNP-Typ mit Basisvorwiderstand, Kollektor an Portpin, Emitter an Masse - siehe z.B. C-Control Literatur) geführt. Achtung: Bei fehlerhafter Beschaltung kann der Empfänger und/oder die C-Control- Unit zerstört werden!!! Ich gehe davon aus, dass entsprechende Hardware- Kenntnisse vorliegen. - Durch die o.g. Schaltung werden die Ports auf Low gezogen, wenn der Servoimpuls High ist. Dies ist zwischen 1 und 2 msec der Fall, je nach Sollposition des Servos (entspricht der Knüppelposition am Sender). C-Control-BASIC ist zu langsam, um so kurze Ereignisse zu erfassen, aber mit einer einfachen Assembler-Routine geht es. - Das beigefügte Beispielprogramm ppmdecrx.asm erwartet 4 angeschlossene Impulsleitungen (Empfänger-Ausgänge) an den Ports 1 bis 4. Eine Anpassung an mehr oder weniger Kanäle ist natürlich leicht möglich. Prinzip der Routine: Zunächst wird auf eine fallende Flanke des jeweiligen Ports gewartet. Dies ist der Beginn des Servo-Impulses, dessen Länge jetzt auszumessen ist. Hierzu wird in einer Schleife ein Zähler inkrementiert, bis der Port wieder High ist. Durch die NOP-Befehle in der Schleife kann die Zählgeschwindigkeit angepasst werden, um eine möglichst hohe Auflösung zu erhalten. Mit den 3 NOP-Befehlen des Beispielprogramms liegen die Zählerstände etwa zwischen 100 und 200, wenn der Senderknüppel zwischen den Anschlägen bewegt wird. Dies gilt für die Original-Taktfrequenz det C-Control-Unit. Außerdem ist evtl. eine Anpassung an die verwendete Fernsteuerung erforderlich. - Die Zählerstände der 4 Kanäle liegen nach einem Durchlauf des Assempler-Programms in den User-Bytes 1 bis 4. Ein BASIC-Programm kann so leicht darauf zugreifen. Das beigefügte Beispielprogramm fms-rx.bas gibt die 4 Positionen zyklisch (nach einem Null-Byte) auf der seriellen Schnittstelle aus. Mit diesem Übertragungsprotokoll kann man z.B. die 4 Servopositionen an den PC übertragen, auf dem der Freeware-Modellflugsimulator FMS läuft. Natürlich sind beliebige andere Anwendungen denkbar... Viel Erfolg! Das Assembler-Programm: portb .equ 1 .org $101 lda #0 ; User-Bytes 1 bis 4 auf Null setzen sta $0A1 sta $0A2 sta $0A3 sta $0A4 ; Puls an Portpin 1 dekodieren w_hi_1 lda portb ; Port 1 einlesen and #1 ; Pin 1 ausmaskieren bne w_lo_1 ; weiter wenn high bra w_hi_1 w_lo_1 lda portb ; Port 1 einlesen and #1 ; Pin 1 ausmaskieren bne w_lo_1 ; warten bis low cnt_1 inc $0A1 ; User-Byte 1 inkrementieren lda portb ; Port 1 einlesen and #1 ; Pin 1 ausmaskieren bne w_hi_2 ; weiter wenn high nop nop nop bra cnt_1 ; Puls an Portpin 2 dekodieren w_hi_2 lda portb ; Port 1 einlesen and #2 ; Pin 2 ausmaskieren bne w_lo_2 ; weiter wenn high bra w_hi_2 w_lo_2 lda portb ; Port 1 einlesen and #2 ; Pin 2 ausmaskieren bne w_lo_2 ; warten bis low cnt_2 inc $0A2 ; User-Byte 2 inkrementieren lda portb ; Port 1 einlesen and #2 ; Pin 2 ausmaskieren bne w_hi_3 ; weiter wenn high nop nop nop bra cnt_2 ; Puls an Portpin 3 dekodieren w_hi_3 lda portb ; Port 1 einlesen and #4 ; Pin 3 ausmaskieren bne w_lo_3 ; weiter wenn high bra w_hi_3 w_lo_3 lda portb ; Port 1 einlesen and #4 ; Pin 3 ausmaskieren bne w_lo_3 ; warten bis low cnt_3 inc $0A3 ; User-Byte 3 inkrementieren lda portb ; Port 1 einlesen and #4 ; Pin 3 ausmaskieren bne w_hi_4 ; weiter wenn high nop nop nop bra cnt_3 ; Puls an Portpin 4 dekodieren w_hi_4 lda portb ; Port 1 einlesen and #8 ; Pin 4 ausmaskieren bne w_lo_4 ; weiter wenn high bra w_hi_4 w_lo_4 lda portb ; Port 1 einlesen and #8 ; Pin 4 ausmaskieren bne w_lo_4 ; warten bis low cnt_4 inc $0A4 ; User-Byte 4 inkrementieren lda portb ; Port 1 einlesen and #8 ; Pin 4 ausmaskieren bne finish ; weiter wenn high nop nop nop bra cnt_4 finish rts .end Das Basic-Programm: ' Testprogramm zur Ansteuerung des FMS ' Knueppelpositionen werden an den Servo-Ausgaengen ' des Empfaengers abgegriffen ' FMS-Einstellung: Analoge Steuerung - Serielles PIC-Interface define pos1 byte[1] define pos2 byte[2] define pos3 byte[3] define pos4 byte[4] baud r9600 #mainloop sys &H0101 ' Testausabe auf Terminal 'print pos1, pos2, pos3, pos4 ' FMS-Protokoll put 244 put 0 put pos1 put pos2 put pos3 put pos4 goto mainloop end syscode "ppmdecrx.obj" |
| Antwort schreiben |