Forum: Mikrocontroller und Digitale Elektronik Grafikdisplay + Speicher Sparen


von Sandra (Gast)


Lesenswert?

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.

von hp-freund (Gast)


Lesenswert?

Kleinen SPI Flash oder I2C EEPROM?

von Sandra (Gast)


Lesenswert?

Geht leider nicht mehr. Gibt's sonst noch einen Trick?

von D.W. (Gast)


Lesenswert?

Sandra schrieb:
> Gibt es hier eine Möglichkeit Speicher zu sparen??

Zeichensätze reduzieren ;-)

von Sandra (Gast)


Lesenswert?

Ich hab schon versucht, einzelne Zeichen rauszunehmen, doch dann geht 
die Zuweisung über ASCII nicht mehr

von hp-freund (Gast)


Lesenswert?

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.

von Dr G. Reed (Gast)


Lesenswert?

- Für die Aufgabe passenden Controller nehmen

- Quellcode optimieren, also zB keine Fliesskomma-Libs verwenden oder 
sowas

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von Sandra (Gast)


Lesenswert?

Nein, leider brauch ich 12x16 bzw. ein bisschen Größer wäre die Schrift 
auch nicht schlecht.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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?

von Sandra (Gast)


Lesenswert?

Es ist ein Attiny.

von Achim M. (minifloat)


Lesenswert?

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

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Sandra schrieb:
> Es ist ein Attiny.

Bisschen genauer wär schon schön schon. Da gibts ja nun einige.

von Sandra (Gast)


Lesenswert?

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.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von Sandra (Gast)


Lesenswert?

Wie wäre eigentlich der Unterschied, wenn ich auf eine Vektor-Font 
wechseln würde?
Ist die Qualität, der optische Eindruck da viel schlechter?

von hp-freund (Gast)


Lesenswert?


von Sandra (Gast)


Lesenswert?

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.

von hp-freund (Gast)


Lesenswert?

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...

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

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

von hp-freund (Gast)


Lesenswert?

Ich dachte mehr daran dem Display einen eigenen Attiny als 
Grafiksteuerung zu verpassen und mit dem anderen zu steuern.

von Achim M. (minifloat)


Lesenswert?

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

von Sandra (Gast)


Lesenswert?

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)

von Daniel F. (daywalker)


Lesenswert?

Kostet Zeit, aber wie sieht es mit Lauflängenkodierung aus?
http://de.wikipedia.org/wiki/Laufl%C3%A4ngenkodierung

von Pit Pixel (Gast)


Angehängte Dateien:

Lesenswert?

Sandra schrieb:
> Oder würde dass dann bescheiden aussehen?

Probiere es aus. Mit 6x10 geht es schon gut.

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
Noch kein Account? Hier anmelden.