Forum: Mikrocontroller und Digitale Elektronik Propeller Uhr Bilder darstellen


von Tobias (Gast)


Lesenswert?

mann müsste doch mit so einer Propeller Uhr auch Bilder darstellen 
können z.B gesicht oder Wolkkarke?

von Hauke R. (lafkaschar) Benutzerseite


Lesenswert?

ja



...
Hast du auch ne exakte frage?

von Karl-j. B. (_matrixman_)


Lesenswert?

Wenn du RGB LEDs verwendst kannst du sogar bunte Bilder darstellen=)

von Tobias (Gast)


Lesenswert?

wie mach ich das software mäßig?

von Hauke R. (lafkaschar) Benutzerseite


Lesenswert?

Hängt von deiner Hardware ab ...

Hast du schon eine Propeller Uhr gebaut, die Text darstellen kann?

von Matthias L. (Gast)


Lesenswert?

Indem du alle drei Farben ansteuerst mit dem µC

von Karl H. (kbuchegg)


Lesenswert?

> wie mach ich das software mäßig?

Im Grunde genauso wie bei einem Text.

Ein Text wird ja auch normalerweise zuvor in ein Bild
umgewandelt, welches dann während der Drehung ausgegeben
wird.

Anstelle der Text-Render Funktion braucht man daher eine
Funktion, die ein Bild in den Ausgabespeicher lädt.

Und dann braucht man natürlich noch ein Malprogramm, welches
es erlaubt ein Bild zu zeichnen, wenn die Pixel in konzentrischen
Kreisen angeordnet sind. Da normale Bildformate sowas nicht
mitmachen, wird man auch um die 'Erfindung' eines eigenen
Bildformates zur Speicherung (und Übertragung auf die Propeller
Clock) nicht umhinkommen.

von Magnus Müller (Gast)


Lesenswert?

Tobias wrote:
> mann müsste doch mit so einer Propeller Uhr auch Bilder darstellen
> können z.B gesicht oder Wolkkarke?

Äh... sorry, aber was ist eine "Wolkkarke"?

http://www.google.de/search?sourceid=navclient&hl=de&ie=UTF-8&rlz=1T4SUNA_deDE233DE233&q=Wolkkarke

von Wolf (Gast)


Lesenswert?

eine welttarte

von Magnus Müller (Gast)


Lesenswert?

> eine welttarte

Klar... hätt ich ja auch gleich drauf kommen können ;)

von Randy S. (randy_s)


Lesenswert?

Hallo an alle :-)

Karl Heinz Buchegger schrieb:
> Ein Text wird ja auch normalerweise zuvor in ein Bild
> umgewandelt, welches dann während der Drehung ausgegeben
> wird.

Könnte mir jemand diesen Vorgang etwas näher erklären?
(Ich programmiere in C.)

Der µC benötigt die Drehzahl um die aktuelle Position der LEDs zu 
wissen, richtig?
Für jede dieser Positionen (360°) muss der Mikrocontroller jetzt 
nachschauen welche LEDs er anschalten(/ausschalten) soll...

Wie gehe ich jetzt vor?
Die Zeitberechnung liefert meinetwegen 11:34 Uhr ...
Also eine 11 für die Stunden
und eine  34 für die Minuten

Wie komme ich jetzt auf eine 1 & 1 & 3 & 4 (Bzw. gleiches für 
Buchstaben!) und gebe die dann aus?

Muss ich sowas hier erstellen:
http://de.wikipedia.org/wiki/HD44780#Schrift_und_Zeichensatz

VIELEN DANK :-)

von Karl H. (kbuchegg)


Lesenswert?

Randy S. schrieb:

> Der µC benötigt die Drehzahl um die aktuelle Position der LEDs zu
> wissen, richtig?

Richtig

> Für jede dieser Positionen (360°) muss der Mikrocontroller jetzt
> nachschauen welche LEDs er anschalten(/ausschalten) soll...

Genau

> Wie gehe ich jetzt vor?
> Die Zeitberechnung liefert meinetwegen 11:34 Uhr ...
> Also eine 11 für die Stunden
> und eine  34 für die Minuten
>
> Wie komme ich jetzt auf eine 1 & 1 & 3 & 4 (Bzw. gleiches für
> Buchstaben!) und gebe die dann aus?
>
> Muss ich sowas hier erstellen:
> http://de.wikipedia.org/wiki/HD44780#Schrift_und_Zeichensatz

Im Prinzip: ja. Du brauchst für jeden Buchstaben die Information welche 
Pixel ein und welche aus sein müssen.

Nur musst du berücksichtigen, dass deine Ausgabepixelfläche nicht 
rechteckig sondern kreisförmig ist. Natürlich nur, wenn du die Ziffern 
nicht kreisförmig verzerrt haben willst. Wenn dir das wurscht ist, dann 
kannst du die Pixel der Einzelbuchstaben auch einfach direkt in den 
Ausgabepuffer schieben.

von Dave C. (dave_chappelle)


Lesenswert?

Aber ich verstehe seine grundsätzliche Frage - wie geht so was 
überhaupt?
Ich meine, ich wüsste jetzt schon noch wie ich einen Strich darstelle an 
einer bestimmten Stelle aber wie realisiert man das ganze, wenn man 
ganze Bilder machen will? Wird dann jedes "Pixel" einzeln zugeordnet?

Also quasi Pixel 120 -> LED1 leuchtet für 0.001Sekunden 0.05 Sekunden 
nach einer vollen Umdrehung?

von Karl H. (kbuchegg)


Lesenswert?

Dave Chappelle schrieb:
> Aber ich verstehe seine grundsätzliche Frage - wie geht so was
> überhaupt?
> Ich meine, ich wüsste jetzt schon noch wie ich einen Strich darstelle an
> einer bestimmten Stelle aber wie realisiert man das ganze, wenn man
> ganze Bilder machen will? Wird dann jedes "Pixel" einzeln zugeordnet?

Ja, klar.
Genauso, wie es dein (alter) Röhren-Monitor auch macht.
Nur dass der Strahl eben nicht geradlinig von links nach rechts flitzt 
sondern gebogen ist. Und jetzt biegst du den Strahl immer mehr, bis er 
kreisfömig immer im Kreis saust.

> Also quasi Pixel 120 -> LED1 leuchtet für 0.001Sekunden 0.05 Sekunden
> nach einer vollen Umdrehung?

Normalerweise akzeptiert man, dass die 'Pixel' am Rand des Propellers 
länger sind als die nahe dem Zentrum.

Das ist doch ganz einfach: Im Speicher hast du ein 2D-Array, welches für 
jede Winkelposition des Propellers sagt, welche LED einzuschalten sind 
und welche nicht. Nach jeweils einem Winkelinkrement des Propellers wird 
die nächste Spalte aus diesem Array auf die LED rausgegeben. Das ganze 
ist so getimed, dass alle Arrayspalten des Arrays bei einer kompletten 
Propellerumdrehung einmal ausgegeben werden, dann beginnt das ganze 
Spiel wieder von vorne. Wie bei einer gemultiplexten LED-Matrix. Nur, 
dass in diesem Fall die Matrix eben optisch kreisförmig gebogen ist und 
die Multiplexrate sich an die Propellerdrehzahl anpassen muss. Aber im 
Grunde ist das nichts anderes.

Wenn man ein Bild hat, dann muss man das eben vorher entsprechend 
umrechnen, damit man die korrespondierenden 'Pixel' im Kreis für Pixel 
im Originalrechteck hat. Das ist doch im Grunde einfach nur eine 
Umrechnung, mehr nicht. Man legt das Rechteck über die kreisförmigen 
Pixel drüber und sucht das jeweils passende nächste Pixel im Kreis. 
Dieses Bild wird dann in das 2D-Array geladen und der Propeller gibt es 
aus. Hat man die Umrechnung richtig gemacht, dann sieht man das Bild 
wieder entsprechend entzerrt.

Während sich der Propeller dreht, wird da nichts mehr umgerechnet.

von Noname (Gast)


Lesenswert?

>Das ist doch im Grunde einfach nur eine Umrechnung, mehr nicht.

[albern]
Ja, und wie geht jetzt die Umrechnung? Ich programmiere in C.
[/albern]

Aber im Ernst. Falls ihr noch Ideen sucht, guckt doch mal nach dem ollen 
"Nipkow".

von Ga-st (Gast)


Lesenswert?

Hier übrigens mal 'n Video von sowas.

http://www.youtube.com/watch?v=a0oqp8FZp7I

von Karl H. (kbuchegg)


Lesenswert?

Noname schrieb:
>>Das ist doch im Grunde einfach nur eine Umrechnung, mehr nicht.
>
> [albern]
> Ja, und wie geht jetzt die Umrechnung? Ich programmiere in C.
> [/albern]

:-)
Das Stichwort "Umrechnung kartesisische Koordinaten - polare 
Koordinaten" würde ich noch geben. Vielleicht auch noch ein paar 
Skizzen. Aber eigentlich sollte sich jemand der sowas macht, die Skizzen 
selber machen um zu verstehen, was da abgeht. Die textuelle Beschreibung 
hört sich viel schlimmer an, als die Mathe dann tatsächlich ist.

von Randy S. (randy_s)


Lesenswert?

Soweit ist das alles total logisch und klar ...

Meine eigentliche Frage war, wie ich programmtechnisch automatisieren 
kann, dass die Ausgabe von z.B. "ABC123" korrekt ausgeführt wird.

D.h. mein Programm muss jetzt ein "A" zeichnen und in meine Tabelle 
eintragen.
Wie kann ich das erreichen?

sec++;
printf("%2u",sec); ... so einfach ist es ja nicht :-)

von Karl H. (kbuchegg)


Lesenswert?

Randy S. schrieb:

> D.h. mein Programm muss jetzt ein "A" zeichnen und in meine Tabelle
> eintragen.
> Wie kann ich das erreichen?

Indem du in der Fonttabelle für 'A' nachsiehst, dort im Prinzip die 
Beschreibung für

  +---+---+---+---+---+
  | 0 | 0 | 1 | 0 | 0 |
  +---+---+---+---+---+
  | 0 | 1 | 0 | 1 | 0 |                #
  +---+---+---+---+---+               # #
  | 1 | 0 | 0 | 0 | 1 |              #   #
  +---+---+---+---+---+              #   #
  | 1 | 0 | 0 | 0 | 1 |              #####
  +---+---+---+---+---+              #   #
  | 1 | 1 | 1 | 1 | 1 |
  +---+---+---+---+---+
  | 1 | 0 | 0 | 0 | 1 |
  +---+---+---+---+---+
  | 0 | 0 | 0 | 0 | 0 |
  +---+---+---+---+---+

findest, und dieses Pixelbild an die richtige Stelle im Ausgabepuffer 
einsetzt.

Dann leuchten die entsprechenden LED auf (so wie ich das rechts neben 
der Tabelle skizziert habe) und dein Gehirn macht aus diesem Bild wieder 
ein 'A'.

Und für das nächste Zeichen sieht dein Programm wieder in der 
Fonttabelle nach, findet die entsprechende Beschreibung welche Bits zu 
setzen sind und welche nicht und kopiert dann diese Beschreibung daneben 
in den Ausgabepuffer.

von Randy S. (randy_s)


Lesenswert?

Soooo jetzt versuch ich es nochmal ...  :-)
Ich habe dieses System schon längst verstanden - das ist keinesfalls 
schwer vor zu stellen!

Meine Frage ist, wie ich PROGRAMMTECHNISCH (nicht gedanklich) von einem 
Text (Hello World) bzw. einer Variable (371.3661) in mein Array komme.

Schreibe ich dann meinen Output in ein Array und lasse jeden Buchstaben 
einzeln nachschauen ...?
Aber wie läuft das dann nach der Zeitberechnung?
Eine 11 gibt es nicht, wenn ich die Zahlen von 0 - 9 im Array 
einspeicher :-)
Hoffentlich kann mir jetzt jemand helfen, hehe

von Karl H. (kbuchegg)


Lesenswert?

Randy S. schrieb:
> Soooo jetzt versuch ich es nochmal ...  :-)

> Meine Frage ist, wie ich PROGRAMMTECHNISCH (nicht gedanklich) von einem
> Text (Hello World) bzw. einer Variable (371.3661) in mein Array komme.

Indem du es programmierst.

Hör mal. Ich werd dir das jetzt hier nicht im Detail vorprogrammieren.

> Schreibe ich dann meinen Output in ein Array und lasse jeden Buchstaben
> einzeln nachschauen ...?

void OutputString( const char* Text )
{
  while( *Text )
    OutputCharacter( *Text++ );
}

void OutputCharacter( char c )
{
  // suche c in der Fonttabelle
  // kopiere die Bits in den Ausgabepuffer
}

> Aber wie läuft das dann nach der Zeitberechnung?
> Eine 11 gibt es nicht, wenn ich die Zahlen von 0 - 9 im Array
> einspeicher :-)

Genauso wie immer:
Erst machst du dir aus der Zahl einen String und dann benutzt du die 
Stringausgabefunktion um den String ins 'Display' zu bekommen.

void OutputNumber( int Number )
{
  char Buffer[5];
  sprintf( Buffer, "%d", Number )
  OutputString( Buffer );
}

Und eine Uhrzeit kann man zb über 3 AUfrufe von OutputNumber ausgeben, 
oder man macht sich eine spezielle Funktion dafür (was wegen der 
Formatierung angebracht ist)

void OutputTime( int Hour, int Minute, int Second )
{
  char Buffer[20];
  sprintf( Buffer, "%02d:%02d:%02d", Hour, Minute, Second );
  OutputString( Buffer );
}

von Noname (Gast)


Lesenswert?

>...wie ich programmtechnisch automatisieren kann...
>...wie ich PROGRAMMTECHNISCH (nicht gedanklich)...

Also mein lieber, lieber Freund. Das ist doch programmtechnischer 
Urschleim. Lies mal ein C-Buch. Steuere ne LED an, ne Taste, RS232, mal 
n LC-Display.

Und dann noch, eine kleine Einlassung von Chuck Moore zu dem Thema, wenn 
es auch nicht ganz aus dem selben Kontext kommt:

"There used to be, perhaps still is, a distinction between programmers 
and coders. Programmers understand the problem; coders are grunt 
labour."

[http://www.simple-talk.com/opinion/geek-of-the-week/chuck-moore-on-the-lost-art-of-keeping-it-simple/]

von Michael S. (rbs_phoenix)


Lesenswert?

Du nimmst eine Funktion, der du einen String übergibts. Und diese 
Funktion erstellt dann nach und nach für jedes Zeichen das Zeichenbild, 
wie Karl Heinz das schon gezeigt hat. Das schreibst du alles in das 
Array und lässt es danach ausgeben. Wenn du den Text ändern willst, 
rufst du wieder diese Funktion auf und er ändert das Array.

von eosroea (Gast)


Lesenswert?

Randy S. schrieb:
> Meine Frage ist, wie ich PROGRAMMTECHNISCH (nicht gedanklich) von einem
> Text (Hello World) bzw. einer Variable (371.3661) in mein Array komme.

Z.B. dieses Text in ein rechteckiges Array schreiben (also jeweils die 
Pixel dafür), und dann mittels Polartransformation für die jeweilige 
Stellung berechnen, welche LEDs an sein müssen.
Ist aber nur eine Möglichkeit, gibt sicher noch hübschere (z.B. die 
Buchstabenpixel gleich in ein polares Array zu schreiben).

von hacker-tobi (Gast)


Lesenswert?

Hi,

irgendwo hatte ich hier mal eine Propelleruhr als Projekt abgelegt...

ah da ;)

Beitrag "Propelleruhr"

Da kannst dus dir in C anschauen.

Im prinzip ist einfach:

-Fonttabelle aufbauen, weie oben schon beschrieben
-Fonttabelle auf dem yC ablegen
-Die Zeit in ihre einzelneen Zeichen zerlegen (z.B. 12:36 in 1 1 : 3 6)
-für jedes Zeichen in der Fonttabelle nachsehen, wie es aussehen muss, 
also welche LEDs wann an sein sollen.
-Die einzelnen Spalten nacheinander ausgeben, passend zum Timing des 
Propellers.

Timing des Propellers:

-Mittels Sensor (z.B. Hallsensor) die Zeit für eine Umdrehung ermitteln
-Diese Zeit durch 360 (Grad) teilen
-Mit dem Ergebnis einen Timer-Interrupt füttern
-in der ISR die aktuelle Spalte ausgebem, und um 1 inkrementieren

gruß

tobi

von Randy S. (randy_s)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Erst machst du dir aus der Zahl einen String

Genau da kam ich nicht weiter. Dieser Satz hat mir schon gereicht :-)
Vielen Dank dafür!

@ Noname (Gast)
Vielen Dank für nichts... Ich wünsche dir ein Problem, bei dem du mal 
nicht weiter weißt - und dann "hilft" dir hoffentlich jemand mit dem 
gleichen nutzlosen Tipp, den du mir gegeben hast: Steuer doch eine Taste 
an. LOL!
Erklärung:
Es gibt nicht nur Vollprofis und Leute, die dieses Gebiet gelernt haben. 
Es gibt auch Lernende und Interessierte, die noch etwas vor sich haben.



Ansonsten vielen Dank für die hilfreichen Tipps - ich stand auf dem 
Schlauch und komm jetzt weiter. :-)

von Karl H. (kbuchegg)


Lesenswert?

Randy S. schrieb:
> Karl Heinz Buchegger schrieb:
>> Erst machst du dir aus der Zahl einen String
>
> Genau da kam ich nicht weiter. Dieser Satz hat mir schon gereicht :-)
> Vielen Dank dafür!

Ist doch immer die gleiche Technik.
Egal ob du auf UART, LCD, LED-Matrix, Wasservorhang, Laserbrenner, 
CNC-Maschine oder eben auch Propelleruhr ausgibst:

unterste Ebene ist das einzelne Zeichen. Da steckt die hardwareabhängige 
Komponente drinnen. Und dann schichtet man da Schritt für Schritt eine 
Funktionsebene nach der anderen darüber. Und im wesentlichen sehen diese 
Ebenen immer gleich aus.

von c. m. (Gast)


Lesenswert?

Ga-st schrieb:
> Hier übrigens mal 'n Video von sowas.
>
> http://www.youtube.com/watch?v=a0oqp8FZp7I

ich frage mich wie man sowas elektrisch anbindet? schleifkontakte? 
neeee, oder?
getrennter anzeigeschaltkreis mit induktiver stromversorgung und 
datenübermittlung?

von Noname (Gast)


Lesenswert?

>Vielen Dank für nichts... Ich wünsche dir ein Problem, bei dem du mal
>nicht weiter weißt - und dann "hilft" dir hoffentlich jemand mit dem
>gleichen nutzlosen Tipp, den du mir gegeben hast: Steuer doch eine Taste
>an. LOL!
>Erklärung:
>Es gibt nicht nur Vollprofis und Leute, die dieses Gebiet gelernt haben.
>Es gibt auch Lernende und Interessierte, die noch etwas vor sich haben.

Ja ja. Gehab Dich wohl.

von Randy S. (randy_s)


Lesenswert?

c. m. schrieb:
> ich frage mich wie man sowas elektrisch anbindet?

Entweder über einen Royer Converter (Induktiv)
http://www.mikrocontroller.net/articles/Royer_Converter
oder
über eine Kunststoffachse mit 2 Kugellagern.
Im inneren Ring die Kabel zum drehenden Teil anlöten, im Äußeren die 
Kabel der Grundplatte.

Datenübertragung häufig über IR.

von Randy S. (randy_s)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Ist doch immer die gleiche Technik.
> Egal ob du auf UART, LCD, LED-Matrix, Wasservorhang, Laserbrenner,
> CNC-Maschine oder eben auch Propelleruhr ausgibst:

Genau, kann ich nachvollziehen.
Aber wenn man das noch nie selbst gemacht muss man ja mal nachschauen 
wie das vor sich geht :-)

von Floh (Gast)


Lesenswert?

Randy S. schrieb:
> Aber wenn man das noch nie selbst gemacht muss man ja mal nachschauen
> wie das vor sich geht :-)

Zeig doch mal, was du bereits hast. Schaltplan, Aufbau, Quellcode.
Dann kannst du spezielle Fragen stellen, die auch beantwortet werden.

von Randy S. (randy_s)


Lesenswert?

Momentan noch Planungsphase ...
Ich baue gerade den Royer Converter auf (1:1 aus dem geposteten Link).

Nebenbei habe ich diesen optischen Drehzahlmesser getestet ...
http://www.sprut.de/electronic/pic/projekte/dehzahl/dreh.htm

Und nun überlege ich was ich zum ersten Aufbau benötige ... Dafür musste 
ich mir Gedanken über die Programmierung machen.

Falls jemand Vorschläge hat bin ich für alles offen :-)

von Ga-st (Gast)


Lesenswert?

Drehzahl ganz einfach Lichtschranke. Oder ich hab sowas mal mit 
Hallsensor gemacht.

Zum ersten Aufbau? LEDs und 'n Controller?

Mach dir lieber Gedanken um die Auswuchtung. :D
Bevor du da nix halbwegs rundlaufendes hast kannst das eh alles 
vergessen.

von Matthias L. (Gast)


Lesenswert?

man bin ich faul. ich muss mal weitermachen...

http://www.avrs-at-leipzig.de/dokuwiki/projekte/propelleruhr

von Randy S. (randy_s)


Lesenswert?

Ga-st schrieb:
> Mach dir lieber Gedanken um die Auswuchtung. :D
> Bevor du da nix halbwegs rundlaufendes hast kannst das eh alles
> vergessen.

Ich fliege Verbrenner-Modellheli - Rotorkopf ca. 1,4m, knappe 2000 U/min 
;-)
(Fall das jemand interessiert...gleiches Modell:
http://www.youtube.com/watch?v=58m8qeQhESE )

Auswuchten sollte also kein zu großes Problem darstellen. :-)

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.