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 ?
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 ?
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
Moin !
Ja. Es sollte halt ein Wert für die Impulslänge rauskommen.meinst Du mit "einlesen" die Impulslänge zu messen?
Jup.Die Impulse sind positiv, nehme ich an?
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).heißt "4-5", dass die Anzahl der ausgewerteten Impulse variieren kann (d.h. der Code müsste für 4 und 5 funktionieren)?
Sagen wir mal so. Es müssten min. 3 sein. Mehr wäre schön muss aber nicht.
Naja er muss sonst nur noch 2 PWM Ausgänge haben. Und evtl. serielle Schnittstelle und ne LED.Was für einen Controller wolltest Du denn verwenden?
Also nix wildes eigentlich. Insofern sollten da ne ganze Menge an Typen gehen. Vielleicht nen Mega 8 (SMD) oder nen Mega 88 (SMD).
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
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 !!!
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...
Probier´s mal so:
Als Ergebnis stehen Dir dann Impuls(1) bus Impuls(5) zur Verfügung.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
Gruß,
Daniel
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.
Lesezeichen