-         

+ Antworten
Ergebnis 1 bis 8 von 8

Thema: 4 Servosignale vom Empfänger einlesen?

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    02.07.2005
    Beiträge
    34

    4 Servosignale vom Empfänger einlesen?

    Anzeige

    Moin !

    Was ist die einfachste Möglichkeit 4-5 Servosignale von einem RC Empfänger einzulesen ?

    Hat da jemand etwas Code für zufällig? Oder bietet da Bascom fertige Funktionen für ?

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    704
    Moin auch!

    Servo-Impulse auszuwerten hab´ ich schon für mehrere RC-Anwendungen gemacht. Erstmal habe ich noch ein paar Fragen:

    - meinst Du mit "einlesen" die Impulslänge zu messen?
    - Die Impulse sind positiv, nehme ich an?
    - heißt "4-5", dass die Anzahl der ausgewerteten Impulse variieren kann (d.h. der Code müsste für 4 und 5 funktionieren)?
    -Was für einen Controller wolltest Du denn verwenden?

    Gruß,

    Daniel

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    02.07.2005
    Beiträge
    34
    Moin !

    meinst Du mit "einlesen" die Impulslänge zu messen?
    Ja. Es sollte halt ein Wert für die Impulslänge rauskommen.


    Die Impulse sind positiv, nehme ich an?
    Jup.

    heißt "4-5", dass die Anzahl der ausgewerteten Impulse variieren kann (d.h. der Code müsste für 4 und 5 funktionieren)?
    Nuja, im prinzip käme ich auch mit 3 Kanälen aus. Aber ich hätte da einen 5 Kanal Empfänger und es wäre gut wenn ich die einlesen könnte (muss aber nicht).
    Sagen wir mal so. Es müssten min. 3 sein. Mehr wäre schön muss aber nicht.

    Was für einen Controller wolltest Du denn verwenden?
    Naja er muss sonst nur noch 2 PWM Ausgänge haben. Und evtl. serielle Schnittstelle und ne LED.
    Also nix wildes eigentlich. Insofern sollten da ne ganze Menge an Typen gehen. Vielleicht nen Mega 8 (SMD) oder nen Mega 88 (SMD).

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    704
    o.k.,

    und die Impulslängen sollen wahrscheinlich als unterschiedliche Variablen abgespeichert werden, z.B. Impuls1, Impuls2 usw., oder?

    Ich muss jetzt noch ´n paar Balsabretter und Harz besorgen, damit ich über´s Wochenende komme , hab´ aber schon eine ziemlich konkrete Lösung vor Augen. Melde mich in 1-2 Stunden nochmal!

    Daniel

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    02.07.2005
    Beiträge
    34
    Moin !

    Genau. Das wäre die Lösung meiner Probleme
    Wenn ich dann noch den Timer mit den PWM Ausgängen frei hätte wäre ich glucklitsch !!!

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    704
    Eeeeleieein habbich noch :

    Würde Dir die 8-bit-Auflösung reichen?
    Das hieße z.B. bei einem Takt von 1 MHZ (geht notfalls auch ohne Quarz) und Verwendung von Timer0 (dann bleibt Timer1 für PWM frei), dass die maximal detektierbare Impulslänge 2ms und die Auflösung 0,8µs wären.

    Meine Empränger-Impulse waren eigentlich noch nie länger als 2ms...

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    704
    Probier´s mal so:

    Code:
    $regfile = M8ref.dat
    $crystal = 1000000
    
    Config Int0 = Rising                                        'Interrupt bei Impulsbeginn
    On Int0 Impuls_start
    Enable Int0
    
    Config Int1 = Falling                                       'Interrupt bei Impulsende
    On Int1 Impuls_stop
    Enable Int1
    
    Enable Interrupts
    
    Config Timer0 = Timer , Prescale = 8
    
    
    Dim Kanal As Byte                                           'Kanal = Zählvariable'
    Dim Impuls(5) As Word                                       'Array für bis zu 5 Impulswerte
    
    
    Do                                                          'Hier ist Platz für´s Hauptprogramm :-)
    
    Loop
    
    
    Impuls_start:                                               'Irgendein Impuls beginnt:
    Start Timer0                                                'Timer beginnt zu zählen
    
    Kanal = Pinc                                                'An welchem Port ist der Impuls?
    Kanal = Kanal And &B00011111                                'Sicherheitshalber Löschen der Bits 7, 6 und 5
    
    Select Case Kanal
    Case 4 : Kanal = 3                                          'd.h. PortC war 00000100
    Case 8 : Kanal = 4                                          'd.h. PortC war 00001000
    Case 16 : Kanal = 5                                         'd.h. PortC war 00010000                                                            
    Case Else                                                 
    End Select
    
    Return
    
    
    
    Impuls_stop:                                                'Ende des Impulses:
    Stop Timer0                                                 'Timer anhalten,
    
    Impuls(kanal) = Timer0                                      'Wert retten und Array-Variabler zuweisen,
    Timer0 = 0                                                  'und Timer rücksetzen.
    
    Impuls(kanal) = Impuls(kanal) * 8                           'Umrechnung in µS
    
    Return
    Als Ergebnis stehen Dir dann Impuls(1) bus Impuls(5) zur Verfügung.

    Gruß,

    Daniel

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    704
    Zur "Hardware" sollt´ ich vielleicht auch noch was schreiben...

    Die 5 Eingänge kommen an die Ports C.0 bis C.4 (dann bleibt Dir C.5 noch als ADC frei, falls Du den brauchst). Pulldown-Widerstände, falls Du einen Eingang mal nicht an den RX anschließt!

    Alls 5 Eingänge mit je einer Diode (=Oder-verknüpft) auf die zusammengeschalteten Interrupt-Eingänge 0 und 1. Auch hier einen externen PullDown-Widerstand spendieren.

    That´s it.

+ Antworten

Berechtigungen

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