PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie erstelle ich mit Bascom Hash-Funktionen?



Dani-Bruchflieger
15.05.2006, 22:00
Hi,

ich brauch mal wieder eure Hilfe: (Geht um Steuerung von Modellflugzeugen)
Ich hab mir mal eine RC-Fernsteuerung auf Bluetoothbasis (Bluegiga WT11 bzw THOR-Wrap)gebaut. dabei soll diesmal die gesamte Logik (Mixer etc) im Empfänger untergebracht werden, damit man beim Modellwechsel nich jedesmal den Sender umprogrammieren muß... - Das ganze funktioniert auch schon sehr gut - nur eben die Mischer hab ich noch nicht hinbekommen.
Die Servokanäle werden mit 7 Bit Auflösung angesteuert - 127 = 1ms Impuls und 0 = 2ms Impuls. Die 64 ist die Mittelstellung mit 1,5ms Impuls.
Ich will jetzt erreichen daß beim Betätigen zB. des Seitenruders (egal ob rechts oder links) jedesmal das Höhenruder Proportional zum Seitenruderausschlag auch einen kleinen Ausschlag nach oben macht. und das Querruder einen Kleinen Ausschlag in die jeweils entgegengesetzte Richtung wie das Seitenruder macht. (das entsprechende Modell würde sonst zu sehr in die Kurve hineinfallen)
Ein Kollege gab mir den Tip, das mit einer Hash-Funktion zu realisieren, aber ich kann mir darunter nix richtig vorstellen... und daher ist mir eben auch schleierhaft, wie man so eine Funktion realisiert.

MfG Dani.

x-ryder
15.05.2006, 22:48
hashfunktionen sind eigentlich was ganze anderes, das sind funktionen, die eine unterscheidung verschiedener datensätze aufgrund eines hashwertes (meistens ne hexadezimale zahl) zulassen. so kann man einen großen datensatz auch mit einem kleinen hashwert beschreiben.

das was du machen willst eigentlich, das verstehe ich leider nur ansatzweise, wäre vllt nett, wenn du erklären würdest, wie das ganze bei sonem flugzeug aussieht, und dann nochmal was du wann machen willst :)

Martin

Dani-Bruchflieger
16.05.2006, 20:21
Hi,

Ich gehe mal davon aus, daß euch bekannt ist, wie Servos angesteuert werden (alle 20ms ein Impuls von 1...2ms länge - 1,5ms ist Mittelstellung)

Die Sache ist die: Ich habe 4 Servokanäle, die in 7Bit angesteuert werden. Also mit Werten von 0 bis 127, wobei die 64 die Mittelstellung ist. Am Sender Sample ich die Position von 4 Potis (die sind als 2*Kreuzknüppel angeordnet -> 2* Joystick - für jede Hand einer) Die gesampelten Werte werden geshiftet auf 7 Bit und dem Bluetoothmodul an der RS232 übergeben. Nach 0.1...0,3ms kommen die Daten dann am Ausgang des Empfangenden Bluetoothmodules an, und werden dort von einem Mega8 in Empfang genommen. Dieser Prüft die Datensätze auf Korrekten Empfang (Start und Stopbyte müssen stimmen) und dann efolgt die Weiterverarbeitung. Schlußendlich werden die Werte einem Byte-Array übergeben, daß in Zusammenarbeit mit Timer0 an 4Pins die für die Servos nötigen Impulse erzeugt. Ich brauche jetzt für die Schritte zwischen Empfang und Zuweisung zu dem Array 2 bzw sogar 3 verschiedene Mischfunktionen:

Ich benötige zuerst 2 Mischfunktionen, die beide vom gleichen Kanal asgehend einen Einfluß auf 2 andere Kanäle ausüben. Also wird Kanal 1 aus der Mittelstellung herausbewegt (ist nicht mehr 64) dann soll Kanal 2 proportional (zB: 2%) zum Ausschlag von Kanal 1 auch jedesmal in eine Richtung (sagen wir jetzt mal >64) ausschlagen. (Bei Vollausschlag von Kanal 1 wären das eine Zumischung von 12 Schritten)
Der 2 Mixer soll beim Ausschlag von Kanal 1 den Kanal 3 ebenfalls Proportional in die entgegengesetzte Richtung ausschlagen lassen -> wird Kanal 1 >64 dann wird Kanal 3 etwas verringert, und umgekehrt.

Und wenn wir schon dabei sind, eine Expo-funktion wäre auch noch interessant - vor allem für den Kanal des Motordrehzahlreglers (bei Flugzeugen gibt es (Ausnahmen (Verstellpropeller) mal nicht beachtend) keinen Rückwärtsschub, also Ist der Gasweg von 127 bis 0 (Ist etwas komisch, aber bei Wert 127 ist Motor aus und bei Wert 0 ist Vollgas))
Also Expo bedeutet, daß der Wert der dem Byte des Servoarrays für den Motorregler übergeben wird, sich im Gegensatz zum Empfangenen Wert erst langsam verringert und dann exponentiell schneller verringert wird, bis bei Vollausschlag beide auf 0 enden.

Ich kann ja mal versuchen, ob ich ein paar Skizzen machen kann....