Forum: Mikrocontroller und Digitale Elektronik Bild darstellen an einem 128*160 tft


von Rolf (Gast)


Angehängte Dateien:

Lesenswert?

Guten Abend zusammen,

Ich versuche ein Bild an einem 1.8"TFT 
(http://blog.simtronyx.de/arduino-nano-mit-1-8-zoll-tft-display/) 
darzustellen, aber irgenden wie bekomme ich das nicht hin. Bei dem Code 
der in der ZIP funktioniert die darstellung, wenn ich ein eigens bild 
als bitmap anlege, bekomme ich nur punkte(wenn überhaut). Die Funktion 
zur darstellung sieht vollgnermassen aus:
1
prog_uint16_t test[0xBB8] PROGMEM ={
2
0x000........BITMAP
3
};
4
5
void drawPixel(int16_t x, int16_t y, uint16_t color) {
6
    if((x < 0) ||(x >= _width) || (y < 0) || (y >= _height)) return;
7
8
    setAddrWindow(x,y,x+1,y+1);
9
10
    RSPORT |= (1 << RS);
11
12
    spiwrite(color >> 8);
13
    spiwrite(color);
14
15
}
16
17
//const uint16_t *bitmap war vorher const uint8_t *bitmap
18
void drawBitmap(int16_t x, int16_t y, const uint16_t *bitmap,
19
        int16_t w,
20
        int16_t h,
21
        uint16_t color) {
22
int16_t i, j, byteWidth = (w + 7) / 8;
23
 for(j=0; j<h; j++) {
24
  for(i=0; i<w; i++ ) {
25
   if(pgm_read_byte(bitmap + j * byteWidth + i / 8) & (128 >> (i & 7))) {
26
        drawPixel(x+i, y+j, color);
27
            }
28
        }
29
    }
30
}
31
int main(void){
32
// init the 1.8 lcd display
33
init();
34
constructor(_width,_height);
35
fillScreen(ST7735_BLACK);
36
while(1){
37
setRotation(0);
38
// FLASH
39
drawBitmap(25,25,test,60,50,test);
40
myDelay(500);    
41
invertDisplay(1);
42
myDelay(500);
43
invertDisplay(0);
44
myDelay(1000);
45
    }
46
47
    return 0;
48
}

Hoffe jemand kann mir da helfen,

MfG Rolf

von holger (Gast)


Lesenswert?

>Hoffe jemand kann mir da helfen,

drawBitmap(25,25,test,60,50,test);

Das ist eine Funktion zum anzeigen einer einfarbigen
Bitmap aus einem Array vom Typ
1
uint8_t *bitmap
. Nur weil
du da ein
1
uint16_t *bitmap
 draus machst kannst du dein
Array damit noch lange nicht anzeigen.

Und den Pointer auf die Bitmap als Farbe zu übergeben ist
wohl auch falsch.

von Rolf (Gast)


Lesenswert?

Danke für den Hinweiss, habe mir eine eigene Funktion geschrieben und 
sie Funktioniert.

Da der Speicher vom m16 begrenzt ist und und ich die bilder nicht in 
voller Auflösung sehen kann. Wollte ich das gerne noch durch eine 
SD-Card erweitern. Ich weiss aber nicht wie ich an die Sache ran gegehen 
soll?

Kann mir jemand ein raht bzw. Tipp geben?

MfG Rolf

von Falk B. (falk)


Lesenswert?

@ Rolf (Gast)

>SD-Card erweitern. Ich weiss aber nicht wie ich an die Sache ran gegehen
>soll?

Siehe SD-Card. Man nehme eine der vielen, fertigen FAT Bibliotheken. 
Ich kann die von ELM CHAN empfehlen, läuft spitze!

von Rolf (Gast)


Lesenswert?

Die Lib habe ich gefunden bin da auch am durchlesen, worum es mir geht.
Wie lade ich die Bilder von der Karte bzw. als was hinterlege ich die 
bilder als C-file?

von Falk B. (falk)


Lesenswert?

@ Rolf (Gast)

>Die Lib habe ich gefunden bin da auch am durchlesen, worum es mir geht.

Satzbau?

>Wie lade ich die Bilder von der Karte bzw.

Datei öffnen, Datei blockweise lesen, dekodieren und auf das LCD 
schreiben. BMP ist am einfachsten, braucht aber viel Speicher. Ok, bei 
den heutigen GB Monstern ist das egal. JPG ist kompakt, braucht aber 
eine komplexe Dekodierung. Die gibt ea aber auch als fertige Lib bei ELM 
CHAN.

> als was hinterlege ich die bilder als C-file?

Gar nicht, man nimmt eines der gängigen Bildformate.

von Sascha W. (sascha-w)


Lesenswert?

>Falk Brunner schrieb:
>> @ Rolf (Gast)
>> als was hinterlege ich die bilder als C-file?
>
> Gar nicht, man nimmt eines der gängigen Bildformate.

oder einfach die binären  Bilddaten so wie sie sonst im Programm 
eingebunden währen. Das mach auf AVR-Seite am wenigsten Aufwand, Block 
in den RAM einlesen und dann genauso ausgeben wie jetzt aus dem Flash.

Sascha

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.