Textgebläse, eine runde Anzeige mit Blaseffekt

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Textgebläse, eine runde Anzeige mit Blaseffekt

      Hier ein Textgebläse, zeigt die Daten und dates einer Newcomerband an. Inzwischen habe ich die Auflösung noch gesteigert, sodass 420 Spalten verwendet werden können. Film und Bilder sind noch das Vorgängermodel. Die Energie wird mit einem Royer-Converter übertragen.

      (Meine Kamera ist für sowas nicht gemacht)

      Kontrollerplatine-oben.jpgKontrollerplatine-unten.jpgMotornabe-mit-Royer-Stator.jpgPropeller-mit-leds.jpgLedarray.jpg
      Textgebläse-420-Spalten-willowchild.bas

      Pollin-Ledarray-sch.pngPollin-Kontroller-A-sch.pngPollin-Royer-Converter-sch.png
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von tschoeatsch ()

    • @tschoeatsch,

      da ich ja selbst auch an einem ähnlichen Projekt arbeite hab ich mir deins hier mal angeschaut.
      Wie immer hast du a_57_04ef5ee8 dafür verdient.
      Leider fehlt hier die "Subs_textgeblaese_.bas", die du mit eingebunden hast. Die würde mich noch interessieren.
      Und keine Sorge ich will nicht kopieren sondern kapieren :)
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • Schlamperei! Hier die Dateien:
      Textgebläse-420-Spalten-willowchild.bas
      Subs_textgeblaese_.bas
      Font_12x16.txt
      Ich hab' übrigens nix gegen Kopieren, was ich hier so zeige, sind ja auch irgendwie Kopien, die ich mir geschnappt hab'.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Armin schrieb:

      Hammer das Projekt.
      Aaah, da schwillt mir die Brust! Es geht aber schnell wieder die Luft raus, das Projekt ist keineswegs neu, geschweige denn von mir erfunden. Ich hab' alles abgeguckt, aber (!!) das Programm ist von mir, immerhin. Eine Beschreibung kann ich gerne verfassen, die software ist kein Hexenwerk, wenn's besonders tricky wäre, hätt' ich 's gar nicht zusammengebracht.

      Mechanik und Prinzip:
      Das Textgebläse ist ein Standard-Ventilator, ein Standventilator mit ca. 35cm Durchmesser, 3 Flügel-Rotor (wichtig) und 3 Geschwindigkeitsstufen. Kontroller und Ledansteuerung ist im Rotor und auf den Flügeln angebracht. Die Energieversorgung erfolgt mit einem Royer-converter drahtlos. Zum Lesen: mikrocontroller.net/articles/Royer_Converter
      Auf den 3 Flügeln sind jeweils 16 Leds samt Schieberegister zur Ansteuerung unter gebracht, ein Flügel mit roten Leds, der andere mit grünen und der dritte mit blauen.
      Der Ausgabebereich ist ein geschlossener Ring, der in 16 Zeilen (16 Leds) und 420 Spalten aufgeteilt ist. Wahnsinnige 6,72 kilopixel und jedes pixel kann in 7 Farben leuchten. Die Farbmischung entsteht durch Überlagerung der Grundfarben innerhalb einer Rotorumdrehung. Das heißt wenn die roten Leds gerade die Spalte 1 darstellen, geben die grünen Leds die Spalte 141 wieder und die blauen die Spalte 281. Nach einer 1/3 Umdregung sind die roten Leds an der Spalte 141 und geben den Rotanteil für diese Spalte wieder, eine weiter 1/3 Umdrehung leuchten die blauen Leds das blaue Farbmuster für die Spalte 141. Durch das träge Auge werden alle Farbanteile zu einer Farbe für die Spalte 141 gemischt. Leider ist das Auge nicht so träge, wie der Ventilator langsam ist und es flackert ein bisschen. Man erkennt auch, das der mechanische Aufbau, die Anordnung der Leds auf den Flügeln, schon exakt sein muss, sodass die Pixel nicht zu 3 einzelfarbigen Pixeln zerfallen.

      Fortsetzung folgt.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Das Programm:
      Ich verwende gerne einen 'Bildspeicher', der vom Hauptprogramm beschrieben wird und durch eine ISR zur Anzeige gebracht wird. So ist es hier auch.
      Jede Spalte in der ringförmigen Anzeige besteht aus 2 bytes, das 'äußere byte' enthält das Bitmuster für die äußeren 8 Leds, das 'innere byte' für die innen liegenden 8 Leds. Zusätzlich gibt es noch ein byte für jede Spalte, die die Farbe für diese Spalte enthält. Nachdem man die Texte immer gut lesen können soll, ist der Anzeigering auf einen oberen Bereich und einen unteren Bereich aufgeteilt. Im unteren Bereich wird der Text für das Programm kopfstehend und von links nach rechts in den Bildspeicher 'reingeschoben', sodass der Betrachter den Text gut lesen kann. Bei jeweils 210 Spalten oben und unten und 12 Spalten pro Buchstaben können jeweils 17 Buchstaben angezeigt werden. Die jeweils 6 Spalten, die übrig bleiben, bilden die Trennung zwischen oberen und unteren Text.
      Das Hauptprogramm beschäfftig sich also mit dem Füllen des Bildspeichers. Dazu wird der Text in die einzelnen Buchstaben zerlegt und jeder Buchstabe mit Hilfe der Fonttabelle in einzelne Spalten aufgeteilt. Diese werden im oberen Anzeigebereich an dessen rechten Rand in den entsprechenden Bildspeicher geschrieben. Dann wird der obere Bereich des Bildspeichers um eine Spalte nach links verschoben und die nächste Spalte des Buchstabens an den rechten Rand kopiert. So entsteht eine Laufschrift, die den Text von rechts in den Anzeigebereich laufen lässt. Durch kopieren der bytes kann man den Text hin und her schieben

      BASCOM-Quellcode

      1. Display_o_shift_left: 'Anzeige oben shiftet nach links
      2. N0 = E_o - 1
      3. For N = A_o To N0
      4. N1 = N + 1
      5. Bs_o(n) = Bs_o(n1)
      6. Bs_u(n) = Bs_u(n1)
      7. Bs_f(n) = Bs_f(n1)
      8. Next N
      9. Return
      Durch shiften der bytes, kann man den angezeigten Text 'davon fliegen' lassen.

      BASCOM-Quellcode

      1. Fly_away_o: 'Anzeige oben fliegt nach aussen
      2. For N2 = 0 To 15
      3. For N = A_o To E_o
      4. Shift Bs_o(n) , Left , 1
      5. Bs_o(n).0 = Bs_u(n).7
      6. Shift Bs_u(n) , Left , 1
      7. Bs_u(n).0 = 1
      8. Next N
      9. Waitms 12
      10. Next N2
      11. Return
      Alles anzeigen
      Durch Ändern des Farbbytes der Spalten, kann die Farbe des angezeigten Textes verändert werden

      BASCOM-Quellcode

      1. Farbwechsel:
      2. For M = 0 To 5
      3. Farbe = Lookup(m , Farb_spektrum)
      4. N = A_o
      5. N1 = E_u
      6. Do
      7. Bs_f(n) = Farbe
      8. Bs_f(n1) = Farbe
      9. Waitms 30
      10. Incr N
      11. Decr N1
      12. Loop Until N = E_o
      13. Next M
      14. Return
      Alles anzeigen
      Jetzt muss der Bildspeicher ständig spaltenweise durch die Leds zur Anzeige gebracht werden. Damit es synchron mit der Drehung des Propellers geschieht und so ein stehender Text entsteht, gibt es eine Lichtschranke. Am festen Teil des Royer-converters sitzt eine IR-Led, am Rotor ein IR-Transistor. Kommt der Transistor an der Led vorbei, gibt das einen Impuls, der den Start der Ausgabe markiert. Jetzt wird die Spalte 0 mit den roten Leds ausgegeben, die Spalte 140 mit den grünen und die Spalte 280 mit den blauen Leds. Damit man weiß, wann die nächste Spalte dran kommt, wird mit diesem Impuls des IR-Transistors der timer1 auf 0 gesetzt. Der zählt jetzt los, bis zum nächsten Impuls der Lichtschranke. Kommt der, wird der timer ausgelesen und durch die Anzahl der Spalten geteilt. Somit weiß man, wie weit der timer1 zählen soll, bis die nächste Spalte durch die Drehung des Propellers erreicht wird.
      Dazu habe ich den timer1 so konfiguriert, dass 2 Interrupts ausgelöst werden können. Eigentlich sind es 3, aber der 'Überlaufinterrupt' wird nicht ausgelöst, weil der timer1 in dieser Programmversion nicht überlaufen darf.

      BASCOM-Quellcode

      1. 'Timer Configuration
      2. Config Timer1 = Timer , Prescale = 1 , Clear_timer = 0 , Capture_edge = Rising '
      3. On Timer1 Timer1_isr 'timer1-Überlauf erfassen
      4. Enable Timer1
      5. On Compare1a Anzeige 'Ansteuerung der Leds für jede Spalte
      6. Enable Compare1a
      7. 'Interrupts*********
      8. On Capture1 Icp_isr 'Lichtschranke an ICP1-pin
      9. Enable Capture1
      10. Enable Interrupts
      Also Timer1_isr wird nicht benutzt. Betrachten wir als nächstes den Capture1 interrupt. Der wird ausgelöst, wenn am ICP1-pin eine steigende Flanke erkannt wird. Dazu ist der IR-Transistor dort angeschlossen. In der zugehörigen ISR wird wie schon erwähnt, die Zählweite von timer 1 bestimmt und so die Zählweite für jede Spalte berechnet

      BASCOM-Quellcode

      1. T1_alt = Timer1
      2. Timer1 = 0
      3. T1_alt = T1_alt + T1_ueberlauf '=Anzahl der timer/Systemtakte pro Umdrehung
      4. T1_ueberlauf = 0
      5. 1_u = T1_alt '=Anzahl der timer/Systemtakte pro Umdrehung
      6. 1_sp = 1_u / Spalten 'timertakte für 1 Spalte.
      7. Comp = 1_sp 'compare-Wert für die nächste Spalte berechnen
      8. Compare1a = Comp 'nächster compare-Wert
      Und weil jetzt ja schon eine Spalte angezeigt werden muss, wird das auch gleich gemacht. Jetzt ist hier Ruhe, bis der Transistor wieder eine steigende Flanke liefert.
      Compare1a wird angesprungen, wenn der timer1 einen Stand erreicht hat, der die nächste Spalte markiert. Hier werden die Leds mit dem Bitmuster der gerade erreichte Spalte geladen und der compare1a-Wert auf den Stand für die nächste Spalte gebracht.

      BASCOM-Quellcode

      1. If Sp_z < Spalten Then Comp = Comp + 1_sp 'compare-Wert für die nächste Spalte berechnen nur nicht die, die durch den ICP-isr angezeigt wird
      2. Compare1a = Comp 'nächster compare-Wert
      Fortsetzung folgt.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Fertig war der Standventilator (von Pollin, daher auch die Bezeichnung bei den Schaltplänen, weil die Platinenabmessungen auf diesen Lüfter abgestimmt sind). Später besorgte ich mir noch welche bei Amazon, alles untereinander sehr ähnlich, als wenn es einen masterplan dafür gäbe oder nur eine Fabrik (in China), die den Weltbedarf herstellt.
      Der Rest, Platinen und software ist selbstgefummelt.
      Es war ja noch eine Erweiterung mit bluetooth angedacht, womit man leichter die Texte ändern oder in realtime anzeigen lassen könnte. Das hatte ich im alten Forum angefangen, hab's aber nicht fertig geschafft. Jetzt fehlt mir aber der Elan dazu, weil ich keine Verwendung mehr dafür habe. Das Textgebläse war ja für eine newcomerband als Blickfang auf der Bühne gedacht. War auch 2x im Gebrauch, nur sind die schneller aufgestiegen als ich basteln konnte und haben das nicht mehr nötig. Die treten jetzt, als Preis bei einem Wettbewerb, bei 'Rock im Park' auf.
      Ich könnte mir so eine Rotationsanzeige in einem Partykeller vorstellen, nicht mit einem Ventilator sondern mit einer Langspielplatte als Träger, Elektronik dezent dahinter versteckt und die Leds durch Schlitze in der Lp leuchten lassen. Vielleicht noch mit einem Mp3player gekoppelt, der Titel und Interpret an die Anzeige schickt.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von tschoeatsch ()