Propelleruhr Code

Gast #3190775
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
#3190830
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.
#3190864
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.