Ich denke Mic wird besser Auskunft geben können über seinen Vorschlag als ich, aber ich versuche es mal:
Als erstes wird man sich einmal auf eine Scroll-Richtung festlegen müssen, weil bei dieser Methode (16bit VRAM) ist das fest im Code verankert.
Und dann:
Code:
VRAM[d] = VRAM[d] + pgm_read_byte(&charMap[i][d]) * 0xFF; // ins Highbyte schreiben
VRAM[d] = VRAM[d] + pgm_read_byte(&charMap[i][d]); // ins Lowbyte schreiben
sowohl ins High-Byte als auch ins Low-Byte zu schreiben ist ja nicht erwünscht. Je nach dem ob man nach links oder rechts scrollt muss man eben rechts (Low-Byte) oder links (high-Byte) "nachfüllen" mit Information, sprich neuen Zeichen.
Und dann muss das Programm irgendwie zeitgesteuert werden, weil wenn man alles in eine Schleife schreibt, dann wird ja alles in einem Rutsch durchgespielt und man sieht nix.
Prinziell wird der Ablauf des Programms so ausschauen: (unter der Annahme, dass nach links geshiftet wird, was Sinn macht, weil wir von links nach rechts lesen)
Als erstes schreiben wir ein Zeichen in das Lowbyte des VRAM (also jeweils ein Byte in jede Zeile) und legen das Highbyte (aller 8 Zeilen, nacheinander -> Multiplexing) auf die Anzeige.
Ein Timer shiftet jetzt den VRAM um 1 nach links, und es wird erneut das Highbyte angezeigt. Jetzt ist ja bereits ein Bit, das wir am Anfang in das Lowbyte geschrieben haben, zum Highbyte gewandert, d.h. man sieht die erste Spalte des kommenden buchstaben. Das macht er 8 mal, bis der Buchstabe vollständig angezeigt wird. Beim Achten mal wird eine zusätzliche Funktion aufgerufen (heißt, soweit ich das verstanden habe, check_usb, vielleicht aber auch nicht?) Jetzt ist ja das Lowbyte komplett leer (weil beim shiften wird immer an den frei gewordenen Platz 0 gesetzt). Wenn man jetzt also das neue Low-Byte einfach dazuaddiert, dann nehmen die neuen Bytes genau die frei gewordenen 8 bit ein. Und jetzt kann wieder geshiftet und angezeigt werden, 8 mal, bis das Lowbyte wieder leer ist. Dann muss wieder nachgefüllt werden usw.
Soweit das Prinzip. Wie man das jetzt in den Programmcode hineinbastelt, den du verwenden möchtst, hab ich mir jetzt nicht angeschaut.
Ich meine es ist aber im Beitrag #6 dieses Threads von Mic recht gut beschrieben.
Mehr weiß ich jetzt auch nicht dazu zu sagen...
Grüße
Thegon
Lesezeichen