mann müsste doch mit so einer Propeller Uhr auch Bilder darstellen können z.B gesicht oder Wolkkarke?
Hängt von deiner Hardware ab ... Hast du schon eine Propeller Uhr gebaut, die Text darstellen kann?
> 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.
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
> eine welttarte
Klar... hätt ich ja auch gleich drauf kommen können ;)
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 :-)
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.
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?
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.
>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".
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.
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 :-)
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.
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
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 ); }
>...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/]
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.
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).
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
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. :-)
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.
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?
>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.
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.
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 :-)
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.
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 :-)
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.
man bin ich faul. ich muss mal weitermachen... http://www.avrs-at-leipzig.de/dokuwiki/projekte/propelleruhr
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.