Forum: Mikrocontroller und Digitale Elektronik ili9341 bitmpas - speicherproblem


von peter (Gast)


Lesenswert?

hallo
ich nutze ein adafruit display 2,8" mit ili9341 controller (240 x 320).
ich habe mir grafiken erstellt in einer pixelgröße von 115 x 160. da ich 
allerdings 16 verschiedene bilder benötige, reicht der speicher einfach 
nicht aus.

Welche Möglichkeiten fallen euch da ein, um dieses Problem zu umgehen??

Würde mich sehr über hilfreiche tipps freuen.

von Won K. (Firma: Outside the Asylum) (the_sane)


Lesenswert?

Aus diesem Grund haben so viele LCD-Breakouts Slots für SD-Karten.
Entweder Du strickst einen externen Speicher an den Prozessor den Du 
benutzt oder Du wechselst auf einen Prozessor mit mehr Speicher.

von Peter2 (Gast)


Lesenswert?

Es gibt RAM mit SPI Schnittstelle von Microchip
http://www.microchip.com/design-centers/memory/serial-sram-serial-nvsram/overview
Oder natürlich EEPROMs, falls es sich um statische Bilder handelt
http://www.microchip.com/design-centers/memory/serial-eeprom/serial-eeprom

von Stefan K. (stefan64)


Lesenswert?

Oder Du baust eine Kompression ein. Um welche Graphiken handelt es sich?
Übrigens wäre die Angabe des Controllers und seiner Speichergröße bei 
Deiner Frage hilfreich.

gruß, Stefan

von peter (Gast)


Lesenswert?

Stefan K. schrieb:
> Oder Du baust eine Kompression ein. Um welche Graphiken handelt es sich?
> Übrigens wäre die Angabe des Controllers und seiner Speichergröße bei
> Deiner Frage hilfreich.

es handelt sich um statische bilder, die ich bereits in monochrom 
bitmaps umgewandelt habe.

controller ist: AT90CAN128 (128k Flash, 4k SRAM, 4k EEPROM)

eine konvertierte grafik (in die c.datei) hat im moment 188 kb :D

von Arduinoquäler (Gast)


Lesenswert?

peter schrieb:
> ein adafruit display 2,8" mit ili9341 controller

Das müsste ja bereits einen SD-SLot mit drauf haben....
.... das wäre dann schon die halbe Miete. Die andere Hälfte
ist dann ein existierendes Filesystem auf deinen Controller
anzupassen. Dann kannst du mit SD-Karten jonglieren ....

von Stefan K. (stefan64)


Lesenswert?

Schwarz-weiss oder Graustufen?
Bei Schwarz-weiss bekommst Du 2300 byte pro Bild, das sollte locker 
reinpassen.
Bei Graustufen kannst Du ev. eine Verschlüsselung verwenden. wenn es 
sich um Graphiken oder technische Darstellungen handelt, dann kann das 
mit wenig Aufwand sehr effektiv sein (z.B. Run-length-Kodierung: 
https://de.wikipedia.org/wiki/Laufl%C3%A4ngenkodierung).

Bei Graustufenbildern wird es schon schwieriger.

Gruß, Stefan

von Stefan K. (stefan64)


Lesenswert?

peter schrieb:
> es handelt sich um statische bilder, die ich bereits in monochrom
> bitmaps umgewandelt habe.
> eine konvertierte grafik (in die c.datei) hat im moment 188 kb :D

Was genau hat 188kb? Die Daten, die die c-Datei beschreibt oder ist das 
die Größe der c-Datei?

Eine Monochrom-Graphik mit 115*160 8bit Graustufenpixel hat 18400 Byte. 
Selbst ein RGB-Bild kommt unkomprimiert "nur" auf 55,2kbyte.

: Bearbeitet durch User
von peter (Gast)


Lesenswert?

wie kommst auf die 2300 byte?
das fertige bitmap hat 11 KB

ja ich habe einen sd slot. wollte es aber zunächst ohne lösen.
RLE methode sieht gar nicht schlecht aus

von Stefan K. (stefan64)


Lesenswert?

115 * 160 Pixel = 18400 Pixel.

Schwarzweiss-Darstellung:
1 Pixel = 1 Bit -> 18400 Pixel = 18400 Bit = 18400/8 Byte = 2300 Byte.

von peter (Gast)


Lesenswert?

Die Frage, die sich mir stellt ist:
ok, ich könnte die bitmaps auf einer sd karte speichern. was mir aber 
den platz raubt, sind ja die generierten c-dateien (188 kb / datei).

da bringt mir die sd karte ja nicht so viel

von Stefan K. (stefan64)


Lesenswert?

???
Die c-Dateien liegen normalerweise auf Deinem PC und nicht auf dem 
Microcontroller. Der interessiert sich nur für das (gg. komprimierte 
Bitmap). Und der PC sollte seit 1985 Platz für 16 * 188kb gerade noch 
übrig haben?

von peter (Gast)


Angehängte Dateien:

Lesenswert?

Stefan K. schrieb:
> ???
> Die c-Dateien liegen normalerweise auf Deinem PC und nicht auf dem
> Microcontroller. Der interessiert sich nur für das (gg. komprimierte
> Bitmap). Und der PC sollte seit 1985 Platz für 16 * 188kb gerade noch
> übrig haben?

aber schau dir mal die datei an und was da alles drin steht ;)

von peter (Gast)


Lesenswert?

und schwarz weiß ist ja bereits wenn ich ein monochromes bitmap draus 
mache oder?

von Thomas F. (igel)


Lesenswert?

peter schrieb:
> aber schau dir mal die datei an und was da alles drin steht ;)

Wenn ich das jetzt mal deute:

> // Generated by  : ImageConverter 565 v2.3

dann ist das nicht monochrom - also 1Bit / Pixel - sondern das 
5Rot6Gruen5Blau-Format für 16-Bit LCD-Farben, also 16 Bit/Pixel.

Du brauchst einen anderen Konverter un eine andere Grafik-Lib für 
Monochrom-Bilder.

von Thomas F. (igel)


Lesenswert?

peter schrieb:
> und schwarz weiß ist ja bereits wenn ich ein monochromes bitmap draus
> mache oder?

Dein Bild hat 16-Bit Farben von denen aber nur Schwarz und Weiß 
verwendet werden.
-> Falsch konvertiert.

von peter (Gast)


Lesenswert?

Thomas F. schrieb:
> peter schrieb:
>> aber schau dir mal die datei an und was da alles drin steht ;)
>
> Wenn ich das jetzt mal deute:
>
>> // Generated by  : ImageConverter 565 v2.3
>
> dann ist das nicht monochrom - also 1Bit / Pixel - sondern das
> 5Rot6Gruen5Blau-Format für 16-Bit LCD-Farben, also 16 Bit/Pixel.
>
> Du brauchst einen anderen Konverter un eine andere Grafik-Lib für
> Monochrom-Bilder.

aber ich habe in paint bereits aus dem png bild ein monochromes bitmap 
erstellt. das hab ich in den converterer geladen und mir die datei 
generieren lassen

von Stefan K. (stefan64)


Lesenswert?

In Deinem Bitmap ist jeder Pixel mit einem 16Bit Grauwert kodiert. Bei 
den allermeisten Pixeln benutzt Du aber nur schwarz (0xffff) oder weiss 
(0x0000) (Kodierung kann auch umgekehrt sein). Nur in den Übergängen 
zwischen schwarz-weiss hast Du manchmal Grauwerte. Falls Du diese nicht 
unbedingt brauchst, kommst Du auch mit einer Kodierung von 1 Bit pro 
Pixel aus - was den Speicherbedarg um den Faktor 16 verringert.

Falls Du das - aus welchen Gründen auch immer - nicht machen willst: die 
oben gezeigte Graphik eignet sich hervorragend für rlc. Würde sicher den 
Faktor 1:10 bringen.

Im Übrigen ist die Bildgröße 115 * 180 Pixel und nicht wie oben 
angegeben 115 * 160 Pixel.

von peter (Gast)


Lesenswert?

Stefan K. schrieb:
> In Deinem Bitmap ist jeder Pixel mit einem 16Bit Grauwert kodiert. Bei
> den allermeisten Pixeln benutzt Du aber nur schwarz (0xffff) oder weiss
> (0x0000) (Kodierung kann auch umgekehrt sein). Nur in den Übergängen
> zwischen schwarz-weiss hast Du manchmal Grauwerte. Falls Du diese nicht
> unbedingt brauchst, kommst Du auch mit einer Kodierung von 1 Bit pro
> Pixel aus - was den Speicherbedarg um den Faktor 16 verringert.


ok wo kann ich das am besten machen ?? natürlich würde schwarz weiß 
ausreichen

> Falls Du das - aus welchen Gründen auch immer - nicht machen willst: die
> oben gezeigte Graphik eignet sich hervorragend für rlc. Würde sicher den
> Faktor 1:10 bringen.
>
> Im Übrigen ist die Bildgröße 115 * 180 Pixel und nicht wie oben
> angegeben 115 * 160 Pixel.

ja stimmt. sorry.

von Stefan K. (stefan64)


Lesenswert?

Ich kenne ehrlich gesagt Dein Tool "ImageConverter 565 v2.3" nicht. Ist 
das bei Arduino mit dabei?

von peter (Gast)


Lesenswert?

oder würde es einfach genügen, wenn ich im code nur die 0x00 und die 
0xFF drin lasse und den rest rausnehme oder zerschiest mir das dann 
alles?

von Thomas F. (igel)


Lesenswert?

peter schrieb:
> ok wo kann ich das am besten machen ?? natürlich würde schwarz weiß
> ausreichen

Im Paint unter "Datei speichern" das Bildformat "BMP monochrom" 
auswählen.

(Habs nicht getestet)

von peter (Gast)


Lesenswert?

Thomas F. schrieb:
> Im Paint unter "Datei speichern" das Bildformat "BMP monochrom"
> auswählen.

das hab ich aber genau so gemacht

von Stefan K. (stefan64)


Lesenswert?

peter schrieb:
> oder würde es einfach genügen, wenn ich im code nur die 0x00 und die
> 0xFF drin lasse und den rest rausnehme oder zerschiest mir das dann
> alles?

Letzteres.

von Thomas F. (igel)


Lesenswert?

peter schrieb:
> das hab ich aber genau so gemacht

Dann hat der ImageConverter 565 das wieder in 16 Bit zurück verwandelt.

Andere Software verwenden.

von Stefan K. (stefan64)


Lesenswert?

Du brauchst einen Image-Konverter, der jedes Pixel in nur einem Bit 
speichern kann. K.A. ob das der ImageConverter 565 v2.3 kann.

Zusätzlich musst Du diese bit-kodierten Graphiken auch ausgeben können. 
Ob es dafür eine Funktion in Deiner Graphik-Library gibt, musst Du 
nachschauen.

von peter (Gast)


Lesenswert?

habt ihr ein gutes programm auf lager??

von Stefan K. (stefan64)


Lesenswert?

http://www.14core.com/c-array-generator/
Image to Array Generator
sieht aus, als ob es das macht, was Du willst. Pixels/Byte auf 8 
stellen.
Vorsicht: Habe ich nur gegoogelt und nicht selbst verwendet.

Zusätzlich musst Du diese bit-kodierten Graphiken auch ausgeben können.
Ob es dafür eine Funktion in Deiner Graphik-Library gibt, musst Du
nachschauen.

von Thomas F. (igel)


Lesenswert?

peter schrieb:
> habt ihr ein gutes programm auf lager??

Suche mal hier im Forum, dazu gabs in der Vergangenheit schon mehrere 
Anfrage.

z.B.
Beitrag "Grafikkonverter Tool für AVR/Mikrocontroller (BMP2C, BMP2ASM, BMP2BASCOM)"

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.