8bit einer Variable schrittweise in andere Variable schieben

Hallo Leute!

Ich fange frisch an mit Arduino und habe auch schon erfolgreich meine ersten projekte realisieren können doch nun bin ich an einem Punkt wo nicht mal Dr. google helfen kann.

Ich möchte ein 8x8Dot Matrix Display ansteuern und ne Laufschrift realisieren.

Meine Idee ist es den Buchstaben aus einer fertigen Bibliothek (Bestehend aus 8x8 Arrays für jeden Buchstaben) zu laden und am Display über "shifter" anzeigen zu lassen.

Um die Laufschrift zu realisieren dachte ich, dass ich 2 Buchstaben hernehme und Schritt für Schritt in eine Temporäre variable Schiebe und diese anzeigen lasse.

Als Beispiel:

variable A variable B variable Temp

Schritt 1: Temp = A Schritt 2: Schreibe auf Matrix Schritt 3: Temp = 1Bit von B und 7Bit von A Schritt 4: Schreibe Temp auf Display Schritt 5: Temp = 2Bit von B und 6bit von A usw... Bis nicht Temp = B ist.

Das ganze würde ich wie gesagt mit Arrays lösen so dass immer eine ganze Reihe geschoben wird.

Wo ich hänge ist eben das Schieben von Bits.

Auf einem Siemens8051 Microcontroller hatte ich das vor Jahre mal zusammengebracht (mit direkter Adressierung und so, weiß es nicht mehr genau). Beim Arduino finde ich keinen Befehl wo ich das schieben von einer Variable in die andere kontrollieren kann...oder ich habe irgendwas übersehen.

Ist das möglich was ich vor habe oder gibt es da elegantere Lösungen???

Interessant wäre auch wie ich eine Eingabe von mehreren Zeichen so auflöse dass ich Zeichen für Zeichen auswerten kann.

Danke schon im Voraus für euere Unterstützung

Hast Du Dir mal dieses Beispiel angeschaut? http://arduino.cc/playground/Main/DirectDriveLEDMatrix

Gruß, Ingo

hi, picofy,

ich versteh’ es nicht ganz. ein buchstabe ist doch 8 LEDs hoch, also muß jede senkrechte spalte eines buchstaben aus 8 bit = 1 byte bestehen. warum willst Du bitweise verschieben? das wäre doch nur notwendig, wenn die buchstaben in der bibliothek zeilenweise abgebildet wären, und das wär’ dann einfach falsch für eine solche anwendung (und sicher richtig für andere zwecke).

gruß stefan

Ich würde für die Ansteuerung der Matrix einen MAX7219 verwenden. Dieser begrenzt den LED-Strom und machst selbstständig das Multiplexing. Bezüglich der Daten würde ich direckt aus dem Zeischnsatz dei benötigten Bytes herauslesen (also immer 8 und zwar teilweise vom ersten Zeichen und teilweise vom zweiten Zeichen) sodaß Du nichts zwischenspeichern mußt.

Grüße Uwe

hi,

genau so meinte ich es, da brauchst keine bits. in weiterer folge würde ich nicht immer bis 8 zählen, sondern alle zeichen des zeichensatzes links anordnen und den nächsten buchstaben nach der ersten leeren spalte nach dem buchstaben beginnen, dadurch erhälts Du gleiche abtände.

gruß stefan

Danke für die Anregungen euch allen!

@Eisebaer Ich glaube ich habe mich da etwas falsch ausgedrückt gedacht war natürlich Byte jedoch das erste Bit meines Arrays Quasi Reihe Nr.1 meiner LED Matrix Ablauf würde im Detail so aussehen, dass ich eben 8 Reihen für das A einspiele ins Temp dieses über welche Methode dann auch immer Byteweise ans Display schick, im 2. Schritt wären es z.B 7Reihen vom A und eine vom B...usw. Mir ist wichtiger zu wissen wie ich 2 Variabeln die aus 8 Bit bestehen so schiebe, dass der Inhalt der ersten Variable nach dem schieben durch den Inhalt der zweiten ersetzt wird...bis jetzt kenne ich nur die Methode, dass ich um eine bestimmte anzahl an bits nach links oder nach rechts schieben kann, die Informationen die ich quasi hinausschiebe gehen verloren.

@uwefed Der MAX7219 würde mir quasi die Schiebearbeit (2 Schieberegister in einem) übernehmen. Würde das also funktionieren wenn ich ihm Byte für Byte (Reihe für Reihe) schicke das dieser automatisch die erste Reihe (z.B vom Buchstaben A) darstellt und weiterschiebt auf die nächste Reihe wenn er ein neues Byte bekommt... ich versuche es vereinfacht darzustellen in einer 4x4 Matrix (X=AN, 0=AUS)

BILD1: x000 x000 x000 x000

Bild2 xx00 0x00 xx00 0x00

Bild 3 xxx0 00x0 xxx0 00x0

Bild4: xxxx x00x xxxx x00x

hi, picofy,

hat mich jetzt auch interessiert, deswegen hab’ ich’s mal in VBScript umgesetzt. solche logischen probleme lös’ ich erst damit, bevor ich hundertmal einen sketch testweise hochladen muß. das umsetzen in die andere sprache ist ja nicht das problem.

ich hoffe, ich kann ein VBScript hier reinstellen

gruß stefan

laufschrift.vbs (2.2 KB)

Ich bin auch anfangs mit Stift und Papier unterwegs dann gibt's mal ein Vorabprogramm und dann bau ich die Schaltung auf und probier es aus.

Kann man auf das Arduino auch Assembler Code flashen?

Zurzeit bin ich soweit, dass ich das Wort in die einzelnen Buchstaben aufteile den Buchstabe ist in einem Array hinterlegt und diese gebe ich dann spalte für Spalte an das shift register weiter so dass wenn der erste Buchstabe fertig ist er einfach den nächsten nimmt....

Damit er nicht die Anzeige löscht lasse ich ihn die Ausgabe wie folgt ablaufen Annahme ich habe eine 8x8 Matrix Am anfang lösche ich die komplette Matrix und dann habe ich eine Schleife gebastelt die quasi folgendes tut:

Schritt 1: x[0] = Buchstabe1[7] Schritt 2: Ausgabe X[] Schritt 3: x[0]=x[1] Schritt 4: x[0] = Buchstabe1[6] Schritt 5: Ausgabe x[] . . . wenn der komplette Buchstabe durch ist kommt der nächste...solange bis sie nicht alle durch sind

Ich hab es zwar noch nicht ausprogrammiert aber es sollte eine Funktion geben die mir das eingelesene Wort in Buchstaben aufteilt und mir die zahl der Buchstaben und die Buchstaben zurückgibt. (Gibts da schon was fertiges oder Ansätze)

In der zweiten Funktion generiere ich mir aus den einzelnen Buchstaben eine Ausgabematrix (wie oben beschrieben)

und eine Funktion die mir die Ausgabe an die Shift Register verwaltet.

Ich komme leider nicht so schnell dazu aber sobald ich es ausprogrammiert habe lade ich es hier hoch...

hi,

mit http://arduino.cc/en/Reference/String http://arduino.cc/en/Reference/Sizeof kannst Du das.

char Str4[ ] = "arduino";

damit hast Du ein Array, dessen elemente Du einzeln bis sizeof(Str4)-1 ansprechen kannst.

hab' ich in meinem script nicht umgesetzt, weil es in vbs anders geht. das muß man dann halt am arduino ausprogrammieren.

gruß stefan