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.
Ich hab schon versucht, einzelne Zeichen rauszunehmen, doch dann geht die Zuweisung über ASCII nicht mehr
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.
- Für die Aufgabe passenden Controller nehmen - Quellcode optimieren, also zB keine Fliesskomma-Libs verwenden oder sowas
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.
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. 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
Sandra schrieb: > Es ist ein Attiny. Bisschen genauer wär schon schön schon. Da gibts ja nun einige.
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.
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?
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
Ich dachte mehr daran dem Display einen eigenen Attiny als Grafiksteuerung zu verpassen und mit dem anderen zu steuern.
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)
Kostet Zeit, aber wie sieht es mit Lauflängenkodierung aus? http://de.wikipedia.org/wiki/Laufl%C3%A4ngenkodierung
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.