PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 4 Servosignale vom Empfänger einlesen?



moelski
02.11.2007, 13:04
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 ?

Sauerbruch
02.11.2007, 14:45
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

moelski
02.11.2007, 15:05
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).

Sauerbruch
02.11.2007, 15:27
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 O:) , hab´ aber schon eine ziemlich konkrete Lösung vor Augen. Melde mich in 1-2 Stunden nochmal!

Daniel

moelski
02.11.2007, 15:29
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 !!!

Sauerbruch
02.11.2007, 17:26
Eeeeleieein habbich noch =P~ :

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...

Sauerbruch
02.11.2007, 18:01
Probier´s mal so:


$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

Sauerbruch
02.11.2007, 18:10
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.