• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

Spielkram mit Atmels

stonewood

Geowizard
Ubique Terrarum schrieb:
Hmm. Nimmt sich Vcc aus 3 Parallelportpins, hat keine Widerstände auf den restlichen Leitungen ... Geht sicherlich auch, aber schön ist was anderes. Wenn der Atmel anfängt sein Programm abzuspulen wird dann auch die LED vom Parallelport betrieben - und der mag das in der Regel gar nicht wenn da >10mA rausgesaugt werden.
 

thomas_st

Geowizard
huzzel im Nachbartread schrieb:
Windi schrieb:
Zum Thema POV gibt es hier ja schon etliche Beiträge.
Leider versagt hier die Suchfunktion da man mindestens 4 Buchstaben für die Suche eingeben muss.
Am besten händisch mal die ganzen Beiträge durchscrollen.
So in der Art, nur ist die Textausgabe richtungsabhängig (recht rum Final, links rum Bonus) und der Text teils erheblich länger (beim Bonus dürfen die lange kurbeln :D :D :D)
Mal ein paar Fragen und Anregungen im Vorfeld, die eventuell Denkanstöße liefern können:
a) Wie soll denn der "Antrieb" funktionieren? "Ventilator" oder manuell mit der Hand schwenken? Wenn letzteres, wird es kaum ein "einmal nach links" oder "einmal nach rechts" bewegen geben -> mit einer Schwenkbewegung kann man das Geschriebene schlecht erkennen (unsere Augen sind nicht ganz so "persistent" wie ein Foto). ... und wenn es mehrere werden, dann gibt es kein "links" oder "rechts" mehr.

b) Im letzten, in der "Literaturliste" unten aufgeführten Thread, gibt es verschiedenste Varianten, wie man einen Beschleunigungssensor realisieren kann, der eine Schwenkbewegung nach links oder rechts detektiert.


Un nun noch das bischen Lesestoff:
POV Eigenbau/Nachbau ... wer hat einen Tipp?
P.O.V. in der Praxis - Tipps & Tricks
P.O.V. in der Praxis - Die Lösung des Spiegelschriftproblems

HTH,
Thomas(_st)
 

huzzel

Geowizard
Das Prinzip ist das "Spiel" aus Schulzeiten:
Man nehme ein 30cm-Lineal und stecke einen Bleistift durch das Loch und lasse dann das Lineal um den Bleistift kreisen.
Hier mal ein Bild vom schon fertigen POV:

Ich muss "nur" mal Zeit für eine Beschreibung finden.
 

huzzel

Geowizard
So, nun endlich Zeit gefunden:

Mein POV-Projekt besteht aus mehreren Teilen:
• Das Mechanische
• Das Elektrische
• Die Programmierung vom POV
• Ein Excel-Makro, das mir die Schrift als Headerdatei erstellt
• Ein Excel-Makro, dass mir den Text als Headerdatei erstellt

Mechanik:
Das Mechanische besteht aus einem GFK-Kabelkanal mit Lochplatten an der Drehachse verstärkt. Ursprünglich wollte ich es ganz aus Holz herstellen, aber das war zu labberich, eine zuverlässige Abtastung war nicht möglich. Und bei einem kleinen Abstand zwischen den LEDs riss das Holz.

Elektrik:
Das Elektrische war auch kaum ein Problem. Ein Mega 8, 8 10 mm LEDs die jeweils einen Transistor als Verstärker vorgeschaltet bekommen haben (je I=30 mA), einen 7805 zur Spannungsversorung und ein Doppelfototransistor und eine IR-LED einer alten Maus für die Drehrichtungserkennung. Und die Drehrichtungserkennung hat auch die meisten Probleme gemacht. Aber erstmal zur Funktion: Die Drehrichtungserkennung funktioniert wie in einer Computermaus mit einem Doppelfototransistor. Bei dem Doppelfototransistor wird in der einen Drehrichtung zuerst der eine und dann der andere Fototransistor von einer IR-LED beleuchtet und in der anderen Drehrichtung genau anders rum. Leider konnte ich den Doppelfototransistor nicht direkt an den Mega anschließen, die elektrischen Werte passten einfach nicht (high war zu niedrig). Also bekam da jeder Kanal auch noch mal einen Transistor als Schalter vorgeschaltet.
Mein erster Gedanke zur Abtastung: Ich nehm einfach die Lochscheibe (36 Löcher) von der Maus und taste mit der die Drehrichtung und die Schwindligkeit ab. Hat in den ersten Versuchen auch gut geklappt. Doch beim genauen hinschauen stellte ich fest, dass die Drehrichtung nicht 100%ig erkannt wurde. Ich habe dann viel mit der Programmierung rumprobiert, aber wenn ich ein Problem gelöst habe, kamen 2 andere. Schlussendlich habe ich die Abtastscheibe durch eine Unterlegscheibe ersetzt, bei der ich ca. 60% entfernt habe. Die Ausgabe beginnt, wenn bei Fototransistor 1 die Unterbrechung erkennt.

Programmierung:
Erst mal ein paar Eckdaten zur Programmierung:
• 5 verschiede Interrups (3 für Timer, INT0 und INT1)
• 3 Timer
• Programmiert in c mit Win AVR

Timer0:
Dieser hat 2 Aufgabe: Timeout feststellen und dann alles zurücksetzten und Zähler für die Drehgeschwindigkeit

Timer1:
Weiterschalten der Schriftzeilen nach x-Sekunden

Timer2:
Der ist für die Drehrichtungserkennung mitzuständig. Wobei man sagen muss, dass seine Benutzung „Historisch“ gewachsen ist und noch aus den Zeiten stammt, als ich mit der Mauslochscheibe experimentiert habe. Seine Funktion ist einen definierten Startpunkt für die Drehrichtungserkennung zu finden. Das Problem ist nämlich, dass man einen definierten Startpunkt braucht um die Drehrichtung richtig erkenn zu können. Die einfache Annahme, der Fototransistor, der zuerst beleuchtet wird, legt die Drehrichtung fest ist nämlich falsch, da man die Startbedingungen nicht kennt. Es könnte ja sein, dass beim Start kein Fototransistor, der eine oder der andere Fototransistor oder eben beide Fototransistoren beleuchtet sind.
Gelöst habe ich es letztendlich so, dass der Timer ca. 8000 mal pro Sekunde den Status der beiden Fototransistoren überprüft und wenn beide high sind, dann wird ein Bereitschaftsflag gesetzt.

INT1:
Steigende Flanke.
Wenn Bereitschaftsflag gesetzt und anderes Drehrichtungsflag nicht gesetzt, setzte eigenes Drehrichtungsflag.
Wenn Bereitschaftsflag gesetzt und anderes Drehrichtungsflag gesetzt lege Drehrichtung fest und setzte Drehrichtungsflags und Bereitschaftsflag zurück

INT0:
Gleiches wie bei INT1.
Zusätzlich wird vom Timer0 die benötigte Zeit für einen Umlauf abgelesen. Ein mögliches Prellen habe ich damit abgefangen, dass der Timer0 mindestens den Zählerstand 10 haben muss, sonst wird es ignoriert.
Außerdem wird ein Flag gesetzt, dass signalisiert, dass die Ausgabe beginnen kann

main:
Wenn kein Timeout vorhanden und die Ausgabe beginnen kann, dann werden die LEDs angesteuert.
Dazu wird eine Zeile aus dem Flash eingelesen. Nun wird die Zeile Punktreihe für Punktreihe angezeigt, immer mit einer Wartezeit dazwischen, die vom Zählerstand von Timer0 abhängt, so dass die Anzeige immer ungefähr gleich lang ist, egal, wie schnell man es drehen lässt.
Durch die Drehrichtungserkennung kann ich für links und rechts verschiedene Texte anzeigen lassen. Ist nur ein „if“ mehr.
Dadurch, dass sowohl der Text als auch die Schrift im Flash liegen, habe ich (fast) unbeschränkte Möglichkeiten. Ich könnte ca. 6000 Zeichen anzeigen lassen (bei 9 Zeichen pro Zeile und 4 Sekunden pro Zeile machte das ca. 44 Minuten Textanzeige oder über 3 Seiten Schreibmaschinentext. Sollte reichen ;-))
Bei einem Timeout geht der Kontroller schlafen.

Schrift:
Bei der Schrift habe ich zuerst auf ein anderes POV-Projekt zurückgegriffen, dass ich im Internet fand. Doch so wirklich glücklich war ich mit der Schrift nicht und begann mit der Bitpobelei um die Schrift anzupassen. Irgendwann wurde es mir zu blöde und ich schrieb ein Excel-Makro, das in einer Excel-Tabelle erkennt, ob ein Feld farbig (rot) ist (1) oder nicht (0). Dann die Zellen einfach schmal gemacht und mit der Maus die Buchstaben/Zahlen „gemalt“. Makro ausgeführt und schon ist eine Headerdatei erzeugt, die sofort in der Programmierung integriert ist. Einfach neu kompilieren und fertig. Kein kopieren oder sonstiges manuelles Eingreifen mehr nötig. So kann ich mit minimalem Aufwand die Schrift ändern/erweitern.
einfacher geht's kaum. Man sieht auch meine verschiedenen Versuche

Text:
Der Text wird auch per Excel-Makro erstellt. Eine Zelle einlesen und den einzelnen Buchstaben einen Zahlenwert zuweisen. Das Ganze automatisch noch in eine Headerdatei und schon ist mit einem Knopfdruck einen anderen Text programmiert, ohne noch mal groß nachdenken zu müssen. Und als Gemeinheit habe ich noch eine „Wartezeichen“ definiert. Nach so einem Wartezeichen muss eine Zahl kommen. Dann wird für diese Zeit (max. 255 Sekunden) nichts angezeigt. So könnte man die Anzeigezeit quasi bis zum Sankt Nimmerleinstag verlängern, oder einfach ein paar kleine Pausen einfügen.

Und hier ein paar Bilder:
in Aktion
in Ruhe
Detailbild: Richtungserkennung in Position „außerhalb Anzeige
Detailbild: Richtungserkennung in Position „innerhalb Anzeige“

Und hier noch ein Video vom Ganzen in Aktion:
Zuerst drehe ich rechts rum, dann links rum
POV in Aktion
Da wo die Schrift teils fehlt, da stehe ich im Weg ;). Ist im Normalfall ja auch gedacht, dass die Schrift "oben waagrecht" verläuft. So kann man es aber schlecht abfilmen ;)

Den Quellcode werde ich nicht öffentlich einstellen. Wer sich dafür interessiert, bitte per PN.
 

thomas_st

Geowizard
huzzel schrieb:
So, nun endlich Zeit gefunden:
Ich habe leider noch nicht die Zeit gefunden, das Geschriebene komplett zu durchdenken, aber ein paar Kommentare sind mir schonmal aufgefallen.

Zunächst aber erstmal: schönes Teil! Gefällt mir.

huzzel schrieb:
Das Elektrische war auch kaum ein Problem. Ein Mega 8,
Ok, der hat natürlich einen kleinen Vorteil gegenüber dem von mir verwendeten Tiny2313: mehr Speicher. Ich bin nämlich (allerdings mit dem kompletten Zeichensatz im Flash) sehr, sehr knapp an die Speichergrenze gekommen.

huzzel schrieb:
8 10 mm LEDs die jeweils einen Transistor als Verstärker vorgeschaltet bekommen haben (je I=30 mA),
Bringen die 10mA mehr soviel, dass sich die zusätzlichen Transistoren lohnen? Mal über den Einsatz eines ULN2803 nachgedacht (bei Reichelt für 31ct zu bekommen, schlägt er preislich vermutlich die Transistoren + zugehörige Basisvorwiderstände)?

huzzel schrieb:
• 5 verschiede Interrups (3 für Timer, INT0 und INT1)
• 3 Timer
• Programmiert in c mit Win AVR
Wie war das jetzt? Ich denke ich bin mit 2 Timer + 2 pin-change-IRQs (PC-IRQ) ausgekommen: die beiden PC-IRQs für die beiden Spulen (läuft im Prinzip auf das Gleiche raus, wie Deine beiden Fototransistoren.

Der Ablauf war im Prinzip folgender:
- Ausgangszustand: keine PC-IRQs ausgelöst.

-Wenn jetzt PC-IRQ A nach PC-IRQ B ausgelöst wird, was über ein entsprechendes Flag in der ISR festgestellt wird wird der Aufbau in die eine Richtung bewegt (bzw. bei Dir: gedreht), wenn erst PC-IRQ A und dann B auftritt: entsprechend andersherum.

-Wenn innerhalb einer bestimmten Zeit nach dem ersten PC-IRQ kein zweiter ausgelöst wird, wird alles wieder auf den Ausgangszustand zurückgestellt.
Hierfür ist ein Timer zuständig, der mit dem ersten Auftreten eines PC-IRQs gestartet wird und mit dem zweiten Auftreten wieder gestoppt wird. Löst dieser Timer einen Overflow aus -> Zurück zum Ausgangszustand.

- Mit dem Auftreten dieser PC-IRQ-Sequenz wird der 2. Timer initialisiert, der für das "Weiterschalten" der Spalten zuständig ist. Die Spaltenzahl wird hierbei in Software innerhalb der Overflow-ISR weiter gezählt. Das hört aber nicht auf, wenn die letzte Spalte ausgegeben ist, sondern läuft weiter bis die nächste PC-IRQ-Sequenz auftritt. Dann wird kontrolliert, ob die Sollspaltenzahl (die Anzahl Spalten, die bei einer Umdrehung maximal geschrieben werden können) getroffen wurde. Je nachdem, wie weit man drunter oder drüber liegt, wird der Timer beschleunigt oder verlangsamt (Overflow-Wert wird angepasst)

Ähm., ich glaub das war es schon :)

huzzel schrieb:
Durch die Drehrichtungserkennung kann ich für links und rechts verschiedene Texte anzeigen lassen.
Da geht bei dem Schüttelteil Prinzip bedingt leider nicht :/

huzzel schrieb:
Ich könnte ca. 6000 Zeichen anzeigen lassen (bei 9 Zeichen pro Zeile und 4 Sekunden pro Zeile machte das ca. 44 Minuten Textanzeige oder über 3 Seiten Schreibmaschinentext. Sollte reichen ;-))
Mmm. der Mega 8 hat 8kB - macht 2kB fürs Programm selbst. Das trifft fast exakt die Programmlänge, die ich im Tiny benötigt habe - nur das der eben 2kB als Maximum hat.

huzzel schrieb:
Doch so wirklich glücklich war ich mit der Schrift nicht und begann mit der Bitpobelei um die Schrift anzupassen.
Was hat dich an der Schrift gestört?

Viele Grüße,
Thomas(_st)
 

huzzel

Geowizard
Der Aufbau klingt sehr gleich. Nur hast Du einen definierten Anfangszustand, den ich leider nicht habe, was es bei mir ein wenig verkompliziert hat.

An der Schrift hat mich die Lesbarkeit gestört. Es gibt ja immer einen Abstand zwischen den LEDs und das verbessert die Lesbarkeit nicht wirklich. Da habe ich dann horizontal die Auflösung vergrößert und kann damit die einzelnen Zeilen feiner versetzt beginnen lassen.

Und wegen den 10 mA mehr habe ich mir nie groß Sorgen gemacht, aber bei max. 8 x 20 mA wirds dann doch eng. Und dann geh ich lieber gleich auf die sichere Seite und spendier eine Verstärkerstufe. Dann kann ich auch die 30 mA voll ausreizen.
Ich hatte es mit auch superhellen 10 mm LEDs versucht, aber die sind nur direkt von vorne wirklich hell und von der Seite kaum zu erkennen, da die ja ein klares Gehäuse haben. So hat es einen in der Mitte der Anzeige weggebeamt und an den Rändern nix mehr erkannt
thomas_st schrieb:
Mal über den Einsatz eines ULN2803 nachgedacht (bei Reichelt für 31ct zu bekommen, schlägt er preislich vermutlich die Transistoren + zugehörige Basisvorwiderstände)?
Sehr schick. Muss ich mir mal merken. Danke für den Tipp. Wenn ich wieder mal so was mache, dann wird sowas auf alle Fälle zum Einsatz kommen

edit:
nochmal zur Schrift:
Auf dem Bild oben mit der Schrift: die zweite Schrift im rechten Viererblock war die Ursprungsschrift (naja, schon mit kleineren Veränderungen)
 
Oben