PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Servoansteuerung: Umschaltung von RC auf MC



Baby2b
30.01.2008, 14:53
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

Baby2b
30.01.2008, 17:06
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ß

deSilva
31.01.2008, 08:15
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

Baby2b
31.01.2008, 09:14
..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

for_ro
31.01.2008, 11:22
..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

Baby2b
31.01.2008, 14:48
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

uwegw
31.01.2008, 16:08
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.

for_ro
31.01.2008, 16:11
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

Baby2b
04.02.2008, 15:54
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.

Baby2b
05.02.2008, 08:13
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

Baby2b
05.02.2008, 08:25
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