- 3D-Druck Einstieg und Tipps         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: 8 Kanal RC-Empfänger auswerten

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    07.03.2004
    Ort
    Lauf a. d. Pegnitz
    Alter
    37
    Beiträge
    5

    8 Kanal RC-Empfänger auswerten

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo!

    Ich möchte meinen Roboter gerne mit einem Modellbau 8 Kanal empfänger ausstatten.
    Dazu habe ich, damit ich nicht für jeden Kanal einen eigenen Port brauche, mit dem Oszilloskop am Epfänger den Pin herausgesucht, an dem alle acht Kanäle anliegen, und mit meinem RNBFRA mit Int0 verbunden.

    Das Signal funktioniert praktisch genauso wie das eines einzelnen Servos, über die Pulslänge, bloß dass acht Pulse kommen, und dann ein langer Puls als Ende/oder Anfang.

    Ich habe schon mit dem timer1 herumexperimentiert, er misst aber nicht 8 Zeiten, die sich mit den Knüppelbewegungen der Fernsteuerung verändern, sondern misst konstante und sinnlose Zeiten.

    Jetzt brauche ich eure Hilfe, da mir als Anfänger nichts mehr einfällt.
    Vielen Dank im Vorraus
    CountryYankey

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    20.01.2004
    Alter
    35
    Beiträge
    645
    Bist du sicher das du die Signale alle an einem Port abgreifen willst??? Ich denke es ist einfacher für jeden Kanal einen einzelnen Port zu haben. Da kannst du sicher sein, dass das Signal durch alle Stufen im Emfänger (Verstärker, Decoder, PCM Generator usw durch ist) Es sei denn du hast den Schaltplan des Empfängers analysiert Ansonsten müsstest du uns das Signal genauer beschreiben als
    Das Signal funktioniert praktisch genauso wie das eines einzelnen Servos, über die Pulslänge, bloß dass acht Pulse kommen, und dann ein langer Puls als Ende/oder Anfang.
    Oszilloskopbild
    Vielecht is die Frequenz für Timer1 zu hoch (unwarscheinlich) wenn es PCM Signale sind, dann sollten sie so im 1-2 ms Bereich liegen.

    MfG Xtreme

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    07.03.2004
    Ort
    Lauf a. d. Pegnitz
    Alter
    37
    Beiträge
    5
    Ja, ich möchte es schon so lösen. Es ist ausserdem kein pcm Empfänger, und ich habe das Signal vor dem Baustein abgegriffen, der es in die einzelnen Servosignale zerlegt.
    Ich habe ein Schema des Signals angehängt.

    Dieser Code sollte im Terminal ja verschiedene Längen anzeigen, also müsste sich alle acht Ausgaben das Ergebnis wiederholen, das tut es auch, aber es sind immer die selben Messwerte.
    Code:
    Config Timer1 = Timer , Prescale = 64
    Enable Timer1
    On Timer1 Ueberlauf
    Enable Interrupts
    
    Config Int0 = Falling
    Enable Int0
    
    On Int0 I1
    
    Do
    
    'noch nix drin
    Loop
    
    I1:
    Zeit = Timer1
    Timer1 = 0
    Print Zeit
    
    Return
    
    Ueberlauf:
    Print "Ueberlauf!"
    Return
    dann kommt sowas raus:
    1020
    572
    650
    650
    890
    442
    649
    649
    und dass obwohl die einzelnen Werte bis auf den Langen annähernd gleich lang sein müssten, und auf Knüppelbewegungen nicht reagieren.
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken puls1.gif  

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    28.04.2004
    Ort
    Nähe Köln
    Alter
    57
    Beiträge
    247
    Hallo

    Dazu habe ich, damit ich nicht für jeden Kanal einen eigenen Port brauche, mit dem Oszilloskop am Epfänger den Pin herausgesucht, an dem alle acht Kanäle anliegen, und mit meinem RNBFRA mit Int0 verbunden.
    Das ist schon der richtige Weg. Was ich vermisse, ist das umschalten der Flanke für INT0 . Sonst löst ja der ja nur auf die fallende Flanke aus. Daher deine Zeiten.

    Und lass die Print Anweisung aus der INT Routine raus. Schreib die 8 Zeiten in ein Array und gib sie aus, wenn du Zeit hast .

    Sag mal, welche Takt du daran hast und welchen µC.

    MFG
    Dieter

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    18.08.2005
    Ort
    Steiermark
    Alter
    51
    Beiträge
    12
    Hallo,

    soetwas hab ich auch schon mal gemacht:

    Code:
    Dim Puls(10) As Word                                        'Syncimpuls plus 9 Servos
    Dim Kanal As Byte
    
    Kanal = 1
          On Icp1 Messen Nosave                                 'Pulslänge messen mit ICP-Eingang
          On Ovf1 Kreset Nosave                                 'Kanalzähler rücksetzen
    
          Config Timer1 = Timer , Prescale = 1 , Capture Edge = Rising       'rising oder falling anpassen an das Signal
    
    
    
          Enable Ovf1                                           'Overflow-Interrupt
          Enable Icp1                                           'Capture-Interrupt
    
          Enable Interrupts
    
    
    Cursor Off
    Cls
    
          Do
           Locate 1 , 1
           Lcd Puls(2) ; " " ; Puls(3) ; " " ; Puls(4) ; " "    'Puls(2) ist Kanal 1, Puls(3) ist Kanal 2 usw.
           Locate 2 , 1
           Lcd Puls(5) ; " " ; Puls(6) ; " " ; Puls(7) ; " "    'Puls(x)=4000 entspricht 1ms, 8000 entspricht 2ms... (4 Mhz Prozessortakt)
          Loop
    
    Messen:
          push r10
          push r11
          push r24
          push r25
          push r26
          push r27
          in r24,sreg
          push r24
    
          Puls(kanal) = Timer1
          Timer1 = 50000                                        'gilt für 4 Mhz Prozessortakt
          Incr Kanal
    
          pop r24
          !Out Sreg , R24
          pop r27
          pop r26
          pop r25
          pop r24
          pop r11
          pop r10
    
         Return
    
    
    Kreset:
        push r24
        in r24,sreg
        push r24
    
        Kanal = 1
    
        pop r24
        !Out sreg,r24
        pop r24
       Return
    
    End
    So funktioniert das ganze fehlerfrei.

    Das ist mein erster Beitrag, mitlesen tue ich schon lange. Meine Interessen sind hauptsächlich Modellbau/Modellflug und AVR Microcontroller.

    Gruß
    Günter

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    07.03.2004
    Ort
    Lauf a. d. Pegnitz
    Alter
    37
    Beiträge
    5
    Hallo zusammen,


    Das mit dem Array habe ich ausprobiert, und es hat funktioniert, das Störende waren wirklich die print Anweisungen.

    Es reicht wenn man eine Flanke misst, da die low Zeiten immer gleich lang sind, und es somit egal ist auf welche Flanke man misst.

    Ich habe den ATMEGA 16 auf 8Mhz.

    Den Code von Günther konnte ich leider mangels freiem ICP nicht probieren.

    Vielen Dank
    CountryYankey


    Hier noch der Code der jetzt funktioniert:
    Code:
    Config Timer1 = Timer , Prescale = 64
    Enable Timer1
    On Timer1 Ueberlauf1
    Enable Interrupts
    
    
    Config Int0 = Falling
    Enable Int0
    
    On Int0 Auslesen
    
    
    N = 0
    
    Do
    Waitms 1000
    Print Kanal(1) ; " Kanal1"
    Print Kanal(2) ; " Kanal2"
    Print Kanal(3) ; " Kanal3"
    Print Kanal(4) ; " Kanal4"
    Print Kanal(5) ; " Kanal5"
    Print Kanal(6) ; " Kanal6"
    Print Kanal(7) ; " Kanal7"
    Print Kanal(8) ; " Kanal8"
    Print Kanal(9) ; " Kanal9"
    
    Loop
    
    End
    
    Auslesen:
       Kanal(n ) = Timer1
       Timer1 = 0
       If Kanal(9) < 1000 Then N = 8
       Incr N
       If N = 10 Then N = 1
    Return
    
    
    Ueberlauf1:
          Print "!"
    Return

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    15.08.2006
    Beiträge
    15

    Fail-Safe?

    Das interssiert mich auch...

    was machst du wenn der Empfänger plötzlich Störungen hat oder der Sender wegfällt ( Entfernung zu groß, Akku leer...)? Hast du sowas wie eine Fail-Safe-Routine?
    Wüßte gerne wie man sowas dann macht.

    Gruß

    fuchsili...

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    20.01.2004
    Alter
    35
    Beiträge
    645
    Also Fail- Safe stellt man bei mir am Sender ein. Und der Empfänger muss das natürlich auch unterstützen...
    MfG Xtreme
    RP6 Test - alles zum Nachfolger des bekannten RP5 im neuen RP6 Forum!

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    15.08.2006
    Beiträge
    15

    Signal abgreifen

    wo greifst du nun dein Signal ab in dem alle Kanäle drin sind?
    Muß man dazu den Empfänger manipulieren?
    Was passiert den wenn du den Sender ausschaltest?

    fuchsili

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    07.03.2004
    Ort
    Lauf a. d. Pegnitz
    Alter
    37
    Beiträge
    5
    hallo

    Das singnal greife ich direkt auf der Platine ab, auf einem Pin, den ich mit dem Oszi ausgemessen habe, also hab ich wenn man das so sieht den Empfänger manipuliert, es geht jetzt halt ein Kabel raus.
    Mit Sender ausschalten halt ich mich halt an die Modellbauregel, den Sender zuerst anschalten, und zuletzt ausschalten; ansonsten kommt ein Rauschen, was aber auch dazu führt, das die Signale nicht mehr ausgelesen werden können, also kann man das einfach abfangen.
    Und dann kann man ja im Programm einfach Standardwerte ausgeben, das ist dann ja so was ähnliches wie Fail-Safe.

    Viele Grüße
    CountryYankey

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests