Archiv verlassen und diese Seite im Standarddesign anzeigen : Servoansteuerung: Umschaltung von RC auf MC
Hallo,
ich hab da was zusammengebaut was zwar funktioniert, aber bestimmt einfacher geht:
Ich steuer einen Servo in einem Modellflieger an. Mal über die Fernsteuerung und mal über einen ATMEGA8. Daszu habe ich einfach ein kleines Wechselrelais an einen Pin gehängt. Wenn der Pin auf Low ist wird das Signal der Fernsteuerung (über das Wechselrelais) an den Servo gegeben und wen der Pin auf High ist wird ein Signal vom MC (auch über das Wechselrelais) an den Servo gegeben. Funktioniert, ist doch aber sehr umständlich mit einem Wechselrelais, nur um eine Signalleitung umzuschalten. Hat jemand ne Idee wie man das eleganter ohne Relais machen kann? Außerdem weis ich auch nicht wie hoch ich so einen Pin auf Dauer belasten kann. Ri des Relais sind 200Ohm. Zieht also 25mA. Ist das O.K. ???
Für Tipps wäre ich euch wirklich dankbar.
Andreas
Schokohoernl
30.01.2008, 15:19
Hallo Baby2b!
Also der Stromfluss is eigentlich kein Problem, da ein Pin am Mega8 laut Datenblatt 40mA liefert.
Mir fällt da momentan eine egelangte Lösungen ein:
der µC wird an das Servo und an den Empfänger angeschlossen. Einmal wird das Empfängersignal, welches an einem INPUT-Pin engelesen wird, direkt an den OUTPUT-pin wo das Servo hängt weitergegeben. Also quasi durchgeschleift. Die paas ns oder µs die die Weiterleitung des Servosignals benötigen dürften keinerlei Einfluss haben.
Wenn der µC das Servo steuert wird einfach das Empfängersignal ignoriert.
Vorteil: Sehr elegant, und man kann auch das Empfängersignal modifizieren (z.B. digital Trimmen, exponentieller Ausschlag, etc.)
Nachteil: Wenn der µC sich im Flug aufhängt, dann bekommt dein Servo kein Signal - auch nicht vom Empfänger.
MfG
Schoko
MartinFunk
30.01.2008, 16:15
hi,
würd ich auch so machen den pin einfach durchschleifen!
@Schokohoernl: für was giebts nen Watchdog!!
MfG Martin
Ja, das wäre Prima. Aber wie macht man das mit dem "Durchschleifen"? Ich hab da erlich gesagt keine Ahnung von und weder in diesem Forum noch in der BASCOM Hilfe habe ich dazu was gefunden. Empfängersignale auslesen kann ich. Mit Interrupts, nur die vertragen sich leider nicht mit dem Servobefehl von Bascom. Wist Ihr wie es geht??
Gruß
Andreas
MartinFunk
30.01.2008, 19:47
PINX.y = PORTZ.v
Martin
Schokohoernl
30.01.2008, 21:18
@Schokohoernl: für was giebts nen Watchdog!!
MfG Martin
hast recht.... bin da wohl etwas vorsichtig.... (als modellflieger weiss man wie schmerzhaft der absturz des eigenen modells ist)
MfG
Schoko
Hessibaby
31.01.2008, 07:58
Warum benutzt Du kein ODER mit zwei Eingängen ?
Gruß
Der Empfänger wird seine Impulse abgegeb... Fürsowas sind so Chips wie ein halber 7458 ganz praktisch (AND/OR Kombination).
"Durchschleiifen" ist aber wirklich das Eleganteste
..PINX.y = PORTZ.v .....wenn das so einfach ist wäre das echt toll. Werde ich sofort ausprobieren.
....kann sein das so ein halber 7458 auch geht. Nur leider weis ich nicht mal was das ist. Ich find Elektronik toll, verstehe aber noch nicht viel davon( geht aber in kleinen Schritten immer weiter vorran)
Danke für Eure Tips. Ich sag Bescheid wenns geklappt hat.
Gruß
Andreas
..PINX.y = PORTZ.v .....wenn das so einfach ist wäre das echt toll. Werde ich sofort ausprobieren.
Wenn du das ausprobierst, dann aber richtig rum, nämlich
PORTZ.v=PINX.y
denn du willst ja zum Durchschleifen den Ausgang auf den Wert des Eingangs setzen.
Gruß
Rolf
ja, habs auch richtig rum probiert. Also, nur durchschleifen geht, aber nur wenn sonst nicht anderes im Programm passieren soll. Sobald ein wait-Befehl drin ist geht gar nichts mehr und den brauch man wen man mit dem Servo-Befehl was machen will. Hab alles probiert . Sieht aus als würde es so nicht gehen. Habt Ihr noch ne Idee??
Gruß
Andreas
Der Durchschleifbefehl muss natürlich regelmäßig aufgerufen werden, und zwar schnell genug. Am einfachsten wäre es, den Eingang auf nen externen Interrupt zu legen. Bei jeden Pegelwechsel wird dann der Interrupt ausgelöst, in dem der neue Pegel zu Ausgang kopiert wird.
Hi,
ich verstehe noch nicht, wie du mit dem AVR den Flieger steuern willst, vielleicht kannst du das mal erklären. Willst du den Flieger nur am Boden damit steuern und ist der AVR direkt mit dem Servo verbunden? Wie sollen sich die Servo-Werte im µC ändern, automatisch oder indem du irgendwelche Taster drückst?
Das Durchschleifen würde ich jedenfalls etwas aufwändiger tun.
Soweit ich weiß, bestimmt die Länge der High- und Low-Pegel, wie sich das Servo einstellt. Dies sollte also möglichst stabil sein und nicht von irgendwelchen anderen Dingen abhängen, die der AVR gerade tun will.
Daher würde ich den Input an einen externen Interrupt Pin (z.B. INT1) hängen.
Im Programm machst du dann sowas:
RC Alias 1
µC Alias 0
RC_input Alias PIND.3 'hier ist beim Mega8 der INT1 dran
Servo_output alias PORTD.4 'irgendein Pin
Dim Control as Byte
Config Servo_output = Output
Config INT1 = Change 'bei jeder Leveländerung wird die ISR ausgeführt
ON INT1 Int1_isr
Control=RC
Do
If Control=µC Then 'also Steuerung durch den µC
.... 'dies hängt ab von deiner Art der Eingabe bzw. Automatik, aber jedenfalls ohne waits
End If
Loop
Int1_isr:
If Control=RC Then 'dein Umschalter zwischen RC und µC
Servo_output=RC_input 'dein Output Pin zum Servo wird auf den Input Pin gesetzt
Endif
Return
Umschalten wirst du wohl über einen Schalter, also einen entprellten Input Pin.
Evtl. kannst du auch ganz auf den Servo Befehl verzichten und änderst den Servo-Pin im µC-Mode über einen Timer. Dann bist du auch da flexibel.
Gruß
Rolf
Hallo Rolf,
Sorry, ich war ein paar Tage offline (Dienstreise ohne Internetanschluß). Also, die Sache soll so funktionieren. Ich starte den Flieger ganz normal mit Fernsteuerung. Dann betätige ich einen Schiebeschalter und dann soll der Flieger zum Beispiel das Seitenruder für 20 Sekunden 30° ausschlagen, danach 20 Sek. gerade........usw. halt so das ich beliebige vorprogramierte Figuren abfliegen kann. Das Problem bei deinem Bascom Vorschlag ist, das Int1 und Int0 bereits zum Einlesen der RC-Kanäle vergeben sind.
Gruß
Andreas
Schokohoernl
04.02.2008, 17:23
Hallo!
Das ist natürlich ein Problem... allerdings lösbar.... und zwar gleich auf zwei Arten:
1. Man tauscht den Mega8 gegen einen Mega88. Der ist pinkompatibel, hat aber PCI (Pin Change Interrupt) an jedem Pin. Wenn du PCI nur an einem Pin (da wo das RC-Signal ankommt) aktivierst, kannst du dir die Abfrage des PCI-Pins sparen (es gibt ja nur einen, der enabled ist) und den Output-Pin entsprechend schalten.
Siehe dazu mal ins Datenblatt vom Mega88.
2. Du "missbrauchst" den Analog-Comparator. An den negativen Pin (AIN1) legst du Vcc/2 an (mit nem einfachen Widerstandsteiler). An AIN0 kommt das RC/Signal vom Empfänger. Jetzt einfach den Interrupt für den Analog-Comparator auf "Change" stellen und einsprechend dem ACO-bit den Output-Pin auf high oder low setzen.
Und fertig ist das ganze. ICh würde allerdings Lösung 1 bevorzugen und zwar aus drei Gründen:
1. Der Mega88 kann bis zu 20MHz, ist also ca 25% schneller als der Mega8.
2. Er hat mehr "fraetures" (z.B. o.g. PCI).
3. Ist ohne Software-/Hardwareänderung durch den Mega168 ersetzbar, der doppelt so viel Flash-Memory hat.
Hallo Schokohoernl,
beide Varianten hören sich gut an....sind für mich aber Software- und Hardwareseitig absolutes Neuland. Bin aber neugierig auf beide Versionen. Werde also schaun wie ich schnell einen Mega88 ranbekomme, und ein Experimentierboard mit Spannungsteiler und Mega 8 aufbauen, danach werde ich aber bestimmt noch ein bißchen hilfe brauchen. Danke für die Tipps.
Gruß
Andreas
Hallo Schokohoernl,
beide Varianten hören sich gut an....sind für mich aber Software- und Hardwareseitig absolutes Neuland. Bin aber neugierig auf beide Versionen. Werde also schaun wie ich schnell einen Mega88 ranbekomme, und ein Experimentierboard mit Spannungsteiler und Mega 8 aufbauen, danach werde ich aber bestimmt noch ein bißchen hilfe brauchen. Danke für die Tipps.
Gruß
Andreas
Schokohoernl
05.02.2008, 10:53
och... das ganze ist halb so wild. Für den Analog-Comparator gibt es in BASCOM fertige Routinen (schau in der Hilfe bai "Config ACI"). Und für den PCI gibts nen Beispiel im "Samples" Ordner (PCINT_CHANGE.bas)
MfG
Schoko
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.