Forum: Mikrocontroller und Digitale Elektronik Propelleruhr Code


von Leo C. (Gast)


Lesenswert?

Hallo miteinander,

Zur Zeit arbeite ich an einer Propeller - Uhr (Einfarbig Rote LED).

Nun während die Leiterplatte hergestellt wird, will ich mich bereits dem
Code widmen. Ich verwende einen ATMEGA32 mit 16MHz Takt.

Leider habe ich keine Fantasie, wie ich die Codeabfolge gestalten 
soll...
Ich kenne mich mit der Programmiersprache C und dem Atmel Studio aus, 
doch bei der Realisierung habe ich gerade null Schimmer...

Noch zur Info: Die Propeller - Uhr hat einen IR - Sensor auf der 
Rückseite, um die Position zu bestimmen.

Bei Wunsch um mehr Infos einfach sagen ;)

Gruss Leo

von Karl H. (kbuchegg)


Lesenswert?

Leo C. schrieb:

> Ich kenne mich mit der Programmiersprache C und dem Atmel Studio aus,
> doch bei der Realisierung habe ich gerade null Schimmer...

Eine Propeller-Uhr lebt davon, dass während einer Umdrehung des 
Propellers, bei der jeweils richtigen Winkelstellung die jeweilige LED 
eingeschaltet und bei der nächsten Winkelstellung wieder ausgeschaltet 
wird.
So wie ein Elektronenstrahl der von links nach rechts über einen 
Bildschirm flitzt. Während er von links nach rechts flitzt, muss er zum 
richtigen Zeitpunkt ein und gleich darauf wieder ausgeschaltet werden, 
damit ein Punkt oder zumindest ein nicht allzusehr in die Länge 
gezogener 'Bild-Punkt' an dieser Stelle entsteht (ok, im Fernseher liegt 
da noch eine Lochmaske, die hilft, trotzdem bleibt diese Steuerung mit 
der Position von ein und aus erhalten). Hier wird also über die Zeit 
eine Position in Zeilenrichtung definiert. Dies geht deshalb, weil wir 
ja wissen, wie lange der Strahl benötigt um von links nach rechts zu 
flitzen. Damit ist also die verstrichene Zeit vom Zeitpunkt des 
losflitzens an gemessen ein Mass für die Distanz vom linken Rand.

Die Winkelposition kennst du aber nicht direkt an der dein Propeller 
steht. Aber du weißt, bzw. hast gemessen, wie lange eine Umdrehung 
dauert. Hast du also zb 100ms für eine komplette Umdrehung gemessen und 
willst du einen volle Umdrehung in 200 'Pixel' aufsplitten, dann muss 
über die Zeit gerechnet werden. Du kennst den Zeitpunkt an dem der 
Propeller in der 0-Position steht, Das Pixel 0 bedeutet dann, dass die 
zugehörige LED vom Zeitpunkt 0 bis zum Zeitpunkt 1 * 100 / 200 leuchten 
muss. Allgemeiner: Das Pixel n in einer vollen Umkreisung muss vom 
Zeitpunkt n * 100 / 200 bis zum Zeitpunkt (n+1) * 100 / 200  leuchten 
(oder nicht leuchten, je nachdem ob es eingeschaltet ist oder nicht)


Und damit setzt du dich jetzt erst mal auseinander, wie du diese 
Zeitsteuerung machst. Hinweis: exakte Zeitsteuerungen bedeuten praktisch 
immer den Einsatz eines Timers.
Erstes Zwischenziel: das rausmessen, wie lange eine Umdrehung dauert.

von Leo C. (Gast)


Lesenswert?

Besten Dank, damit kann ich arbeiten!

Gruss Leo

von Jürgen D. (poster)


Lesenswert?

Ich würde eine Art Bildschirmspeicher erstellen. Ein alle Sekunde 
aufgeruffendes Programteil erstellt dort ein Abbild der LEDs die 
eingeschaltet werden. Immer ein Byte für ein momentanes Abbild (bei 8 
oder weniger LEDs).
Dieser Bildspeicher wird dann Timerinterruptgesteuert, wie in Beitrag 2, 
ausgelesen und auf die LEDs ausgegben. Das war es eigentlich.
Der Sensor setzt den Bildspeicherzeiger wieder auf die erste Position.

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.