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
Stimmt. Hatte ich zwar eingetragen, aber nach einmal auf "Vorschau" klicken isses wieder wech. Naja, jedes Forum hat so seine eigenen Tücken. Peter
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.
@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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.