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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.