Forum: Projekte & Code Sequenzer für Einziehfahrwerke


von Peter B. (pbuenger)


Lesenswert?

Hallo,

als bisher nur stiller Mitleser dieses interessanten Forums habe ich 
sehr viel über die AVR-Controller kennengelernt und häufig in Euren 
Beiträgen gestöbert. Jetzt möchte ich jetzt auch mal etwas beisteuern, 
vielleicht ist es ja für jemanden von Interesse.

Ich habe für eines meiner Modellflugzeuge einen Sequenzer für das 
Fahrwerk und seine Klappe(n) entwickelt. Ja, ich weiß, sowas kann man 
von mehreren Anbietern fertig kaufen. Ich wollte aber auch mal selber 
mit den AVRs arbeiten, außerdem ist meine Schaltung sehr klein und 
letztendlich auch ziemlich preiswert.

Hier eine kurze Beschreibung: Ich habe den Sequenzer mit einem 
ATTINY2313 aufgebaut, Taktfrequenz 8MHz (per Quartz). Am Eingang INT0 
liegt das Empfängersignal zum Schalten des Fahrwerks an, die 
Schaltpunkte sind "live" programmierbar (s.u.) und werden wie die 
meisten anderen Parameter im EEPROM gespeichert. Die Auswertung des 
Empfängerpulses erfolgt mit dem Timer 0, welcher für die reine Abfrage 
der Schaltpunkte mit 8Bit genau genug ist.

An den Ausgängen OC1A und OC1B stecken die zwei Servos für die Klappe(n) 
und für das Fahrwerk selber. Sie werden vom Timer 1 bedient, welcher im 
fast-PWM Modus läuft und die benötigten 1...2ms Pulse mit einer 
Framerate von 10ms ausgibt. Die 10ms habe ich absichtlich gewählt, da 
die Servos hier "flüssiger" laufen und auch (subjektiv) mehr Kraft 
haben. Auch die Endpositionen der beiden Servos lassen sich "live" 
programmieren, ebenso die "Fahrzeit" und eine Pause zwischen den Servos. 
Das Servo fürs (mechanische) Fahrwerk wird nach ein paar Sekunden 
abgeschaltet, sprich der Servopuls wird weggenommen. So wird verhindert, 
dass ein klemmendes Fahrwerk den Empfängerakku leersaugt, was ziemlich 
unangenehme Folgen haben kann.

Ein nützliches Gimmick habe ich auch noch eingebaut: Die zuletzt 
angefahrene Position wird im EEPROM gespeichert und nach einem Reset 
wiederhergestellt. So wird verhindert, dass bei unpassender 
Schalterstellung am Sender das Fahrwerk beim Einschalten mit voller 
Geschwindigkeit raus- oder reinknallt.

Zur Programmierung: An die serielle Schnittstelle kann ein Terminal 
angeschlossen werden (z.B. ein Laptop - ich werde allerdings einen 
Butterfly als "Terminal" benutzen). Über fünf Tasten (rauf, runter, 
plus, minus und enter) können die Parameter des Sequenzers verändert 
werden, bzw. die Schaltpunkte des Empfängersignals abgespeichert werden. 
Bei schrittweiser Veränderung der Servopositionen laufen die Servos 
selbstverständlich mit, um sie so an die mechanischen Gegebenheiten des 
Fahrwerks und der Klappen anzupassen. Zwei LEDs zeigen den Ablauf des 
Sequenzers an.

Ein kleines Problem habe ich möglicherweise noch: Der Inhalt des EEPROMs 
wird dann und wann unkontrolliert verändert. Ich habe aber dazu noch 
keine Abhängigkeiten feststellen können, ich werde dies mal im 
Praxisbetrieb im Auge behalten.

Im Anhang findet Ihr das Programm, den Schaltplan und ein Bildchen von 
der fertigen Platine. Falls jemand noch Ideen hat: es sind noch ein paar 
wenige Bytes frei. Also immer her damit.

Gruß,
Peter

von Magnus Müller (Gast)


Lesenswert?

[klugscheiss]

Anhang fehlt.

[/klugscheiss]

von Peter B. (pbuenger)


Angehängte Dateien:

Lesenswert?

Stimmt. Hatte ich zwar eingetragen, aber nach einmal auf "Vorschau" 
klicken isses wieder wech. Naja, jedes Forum hat so seine eigenen 
Tücken.

Peter

von Karl H. (kbuchegg)


Lesenswert?

Peter Bünger wrote:

> Ein kleines Problem habe ich möglicherweise noch: Der Inhalt des EEPROMs
> wird dann und wann unkontrolliert verändert. Ich habe aber dazu noch
> keine Abhängigkeiten feststellen können, ich werde dies mal im
> Praxisbetrieb im Auge behalten.

Probier mal folgendes:

Benutzte die EEPROM Adresse 0 nicht aktiv.
Nachdem du die Werte ins EEPROM geschrieben hast, machst du noch
einen Dummy Write oder Read auf Adresse 0 um den EEPROM Adress-
zeiger auf die Adresse 0 zu stellen.

Hintergrund: Beim Abschalten der Versorgungsspannung kann es
manchmal dazu kommen, dass der AVR noch einen fälschlichen
Schreibzugriff auf das EEPROM macht. Wenn der Adresszeiger
für das EEPROM noch auf eines deiner wichtigen Datenbytes
zeigt, dann überschreibt er dir damit deine Daten. Ein Ausweg
ist es daher, dafür zu sorgen, dass der Adresszeiger nach dem
Ende deiner Manipulationen nicht auf deine Daten, sondern auf
eine Adresse die im Programm nicht benutzt wird, zeigt. Zb.
auf Adresse 0. Wenn dann irgendwelche falschen EEPROM Schreib-
operationen ausgeführt werden, dann wird nur das EEPROM Byte
0 neu beschrieben und da du das in deinem Programm nicht benutzt ...

> Falls jemand noch Ideen hat: es sind noch ein paar
> wenige Bytes frei. Also immer her damit.

Wie wäre es mit ein paar hellen weissen LED als Landescheinwerfer.

von Jens (Gast)


Lesenswert?

>ATTINY2313

Hat dieser einen interenen pull-up an /RESET?

von Peter B. (pbuenger)


Lesenswert?

@Karl-Heinz:
Danke für die Hinweise, probiere ich mal aus. Heute waren schon wieder 
zwei Bytes im EEPROM "platt". Ob es auch helfen könnte, den Brow-Out zu 
benutzen?

@Jens:
Ja, hat er (30..60k).

Gruß,
Peter

von Peter B. (pbuenger)


Angehängte Dateien:

Lesenswert?

Kleiner Bugfix: Im Einstellmodus blieb das Servo 1 im Power-Off und 
bewegte sich daher auch nicht.

Zum EEPROM: Nach setzen der Brown-Out Fuse auf 2,7V hatte ich keinerlei 
Datenverluste mehr im EEPROM.

Ach ja, man sollte unbedingt vor dem Einbau prüfen, ob die vorgesehenen 
Servos mit dem 10ms Takt überhaupt zurechtkommen. Mein Fahrwerkservo 
protestierte gar fürchterlich gegen die höhere Taktrate. Also wieder 
zurück zu den 20ms.

Gruß,
Peter

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.