Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: PWM-Signale von Fernsteuerung erkennen Kategorie: Programmierung ASM (von tu - 8.02.2004 12:43)
 Als Antwort auf PWM-Signale von Fernsteuerung erkennen von odlanir - 5.02.2004 12:50
> 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

Bisherige Antworten:

Re: PWM-Signale von Fernsteuerung erkennen (von holger - 13.02.2004 12:04)
    Re: PWM-Signale von Fernsteuerung erkennen (von tu - 14.02.2004 19:29)
        Re: PWM-Signale von Fernsteuerung erkennen (von holger - 4.03.2004 11:59)
            Re: PWM-Signale von Fernsteuerung erkennen (von tu - 5.03.2004 23:37)
                Re: PWM-Signale von Fernsteuerung erkennen (von holger - 23.03.2004 11:25)
                    Re: PWM-Signale von Fernsteuerung erkennen (von tu - 2.04.2004 23:34)
                       Re: PWM-Signale von Fernsteuerung erkennen (von holger - 5.04.2004 11:50)
                          Re: PWM-Signale von Fernsteuerung erkennen (von tu - 21.04.2004 21:51)