Ich habe ein einfaches Grafik-Display, für das ich 2 Zeichensätze
benötige.
Die Zeichensätze brauchen insgesamt 2850 Bytes an Flash-Speicher.
Gibt es hier eine Möglichkeit Speicher zu sparen?? Da ich noch etliche
konstante Tabellen habe, die ich ins Flash speichern möchte.
Vielleicht einfache Vector Schriftarten?
Kann aber sein das dadurch der Code dafür den Platz braucht.
Warum geht kein SPI Flash?
Kannst Du extern hinten am Display anbringen, die Display-Datenleitungen
nutzen und braucht nur eine CS Leitung zusätzlich.
Was benutzt du denn für Zeichensätze? 8*8 z.B. ist meistens
Platzverschwendung, da reicht 5*8 allemal. Bei 5 bytes pro Zeichen und 2
kompletten ASCII Zeichensätzen (0-127) sind das dann 1280 bytes. Für
etwaige Sonderzeichen bieten sich die 'Gremlins' an, der Bereich
zwischen 0x00 und 0x1f.
Sandra schrieb:> Nein, leider brauch ich 12x16 bzw. ein bisschen Größer wäre die Schrift> auch nicht schlecht.Sandra schrieb:> Nein, leider brauch ich 12x16 bzw. ein bisschen Größer wäre die Schrift> auch nicht schlecht.
Da gibt es einen einfachen Trick: Wirf jede Spalte zweimal
hintereinander aufs LCD. Das gibt schon mal doppelte Breite. (Mach ich
bei meinen DOGMs auch über ein Flag 'double'). Doppelte Höhe ist ein
bischen trickiger, aber das Prinzip geht genauso. Ich hab hier ein paar
Assembler Sourcen für AVR und die DOGM LCDs, wird dir aber vermutlich
nicht so viel nützen, wenn du in C schreibst.
Welche MCU ist es?
Sandra schrieb:> Ich hab schon versucht, einzelne Zeichen rauszunehmen, doch dann geht> die Zuweisung über ASCII nicht mehr
Wie wäre es, z.B. nur die tatsächlich benutzten Zeichen, also 0..9,
A..Z, a..z, ö ä ü, +-/* zu verwenden und dann eine Funktion zu
schreiben, die zu einem gegebenen ASCII-Zeichen den zugehörigen Offset
in der Tabelle ausspuckt.
Eine weitere Möglichkeit wäre es, einen Vektorfont zu benutzen oder die
Buchstaben mit einer Art Overlay-Verfahren "zusammenzu-oder-n". Dazu
könnte man z.B. Sachen, die bei mehreren Zeichen gleich sind, als einen
einzigen Eintrag in der Tabelle anlegen und so die Pixeldaten für jedes
Zeichen einzeln mehr oder weniger Dynamisch erzeugen.
Das ganze ist natürlich wieder ein Kompromiss zwischen Codegröße, Größe
der Lookuptabellen und Ausführgeschwindigkeit.
mfg mf
Also aktuell habe ich einen Attiny461.
Ich hätte gerne einen Schrift darauf, die doppelt so groß ist. Hat wer
eine mit der Höhe von 32 Pixel? Ich würde mir die notwendigen Zeichen
und Ziffern dann rausholen und vielleicht sogar als fertige Strings
zusammentun. Ich habe nicht wahnsinnig viele verschiedenen Ausgaben.
Sandra schrieb:> Also aktuell habe ich einen Attiny461.
Der logische Schritt wäre natürlich, den ATTiny861 zu nehmen, statt 4
kbyte sinds dann 8 k Flash und der Rest bleibt unverändert. Reserven für
Programmerweiterungen ist dann auch noch da. Zum Aufpusten von
Zeichensätzen siehe oben.
Das mit dem "Aufpusten" in die breite habe ich verstanden, doch ich
müsste es eben in die Höhe machen. Gibt es hier eine Vorlage?
Hauptsächlich brauche ich die Zahlen für die Anzeige 24
Buchstaben/Zeichen.
Selbst wenn ich auf den 861er wechsle, muss ich platzsparend arbeiten,
da noch eine Lookup-Tabelle in den Flash muss.
Sandra schrieb:> Selbst wenn ich auf den 861er wechsle, muss ich platzsparend arbeiten,> da noch eine Lookup-Tabelle in den Flash muss.
Dann solltest Du das gesamte Konzept noch einmal überdenken...
Nimm einen STM32F407. Da hast Du 1024KB Flash, 192KB RAM und der ist
sauschnell.
Kostet bei Stückzahlen unter 6 Euronen/Stück.
Erste Infos hier im Artikel STM32
Mal eine generelle Frage:
Sandra schrieb:> Ich habe ein einfaches Grafik-Display
Größe in Pixeln? Farbig? Wieviel Bit pro Pixel?
Um den Displayinhalt z.B. von einem
320x240, Schwarzweiß, 1 Bit pro Pixel im RAM(!!) abzulegen, braucht man
schon 9,6kByte. Ein kompletter Zeichensatz mit 12x8 Pixeln braucht immer
noch 3kByte Flash. Wie wärs einfach mit einem größeren Controller?
Hintergrund: Ich hab mal eins von diesen billigen garnicht-intelligenten
320x240-Displays(Pollin...) mit einem ATmega16 verhäkelt. Der
Displayinhalt ist 800 Zeichen groß, ich brauchte also schon mal 80% des
1kB RAM, nur um zu wissen was da angezeigt wird. Die Zeichen wurden alle
Zeile für Zeile scheibchenweise aus der LUT geholt.
mfg mf
Ich habe mir das mit dem Vektorformat nun mal angesehen, aber so wie ich
es rauslese, kann ich nicht einfach dynamisch aus ein paar kleinen
pixeln einen großen Buchstaben erzeugen (ich sehe zumindet die Fkt. dazu
nicht).
Aber so wie ich dass sehe, wäre es doch die Lösung für mich wenn ich
einen 5x7er Schriftsatz nehme, die Pixel in x-Richtung doppelt ausgebe
und in y-Richtung z.B. jeden Pixelwert ver4fache.
Oder würde dass dann bescheiden aussehen?
(Anderer Mikrocontroller ist leider nicht so einfach möglich)