KS0108 Grafik anzeigen

Gast #2016592
Lesenswert?

Hallo, ich wollte mit der Lib von Ape ein Glcd ansteuern.
Nun hänge ich aber daran diegrafik anzuzeigen da kommt folgender Fehler
../main.c:21: error: incompatible type for argument 1 of 
'ks0108WriteData'
kann mir jemand helfen

gruß SIG

ach hier noch meine main.C
1
#include <inttypes.h>
2
#include <avr/io.h>
3
#include <avr/pgmspace.h>
4

5
#include "ks0108.h"
6
#include "bild.h"
7

8

9

10

11
int main(void) {
12
  volatile uint16_t i;
13
  struct font bild;
14
  
15
  for(i=0; i<15000; i++);
16
  
17
  
18
  
19
  ks0108Init();
20
  ks0108GotoXY(0,0);
21
  ks0108WriteData(bild);
22

23
  while(1);
24
}
Persönliche Seite #2016700
Lesenswert?

> Hallo, ich wollte mit der Lib von Ape ein Glcd ansteuern.

Die hier? 
Beitrag "KS0108 GLCD Routinen"

Darin ist kein "bild.h" und man kann deinen Quelltext nicht kompilieren.

Die ks0108WriteData dort hat als Prototyp:
void ks0108WriteData(uint8_t data);

Dein übergebenes Argument bild mit Datentyp struct font ist da wirklich 
seltsam: Adresse statt Bytewert. Man würde so etwas erwarten:
1
uint8_t bild[MAXBYTES] PROGMEM = { ... }; // Initialisierte Werte eintragen
2

3
int main(void)
4
{
5
  // for(i=0; i<15000; i++); durch _delay_ms(...) ersetzen!
6
  ks0108Init();
7
  ks0108GotoXY(0,0);
8
  for (uint16_t i = 0; i < MAXBYTES; i++)
9
  {
10
    ks0108WriteData( pgm_read_byte( bild+i ) );
11
  }
12
  while(1);
13
}

ADD: Siehe auch Beitrag "Bitmap auf KS0108"
Gast #2016797
Lesenswert?

Stefan B. schrieb:
> Die hier?

Ja genau das!

Stefan B. schrieb:
> ADD: Siehe auch Beitrag "Bitmap auf KS0108"

Habemal das ausprobiert sieht so aus:
1
#include <inttypes.h>
2
#include <avr/io.h>
3
#include <avr/pgmspace.h>
4

5
#include "ks0108.h"
6
#include "bild.h"
7

8
{
9
    ks0108ClearScreen();
10

11
    int offset = 0;
12
    int y = 0;
13
    int x =0;
14

15
    for(y=0; y<63 ;y=y+8)
16
    {
17
      for(x=0; x<64 ;x++)
18
      {
19
        ks0108GotoXY(0, 0);
20
        ks0108WriteData(ImageMap[offset]);
21
        offset++;
22
      }
23
    }
24
    
25
    for(y=0; y<63 ;y=y+8)
26
    {
27
      for(x=63; x<128 ;x++)
28
      {
29
        ks0108GotoXY(0, 0);
30
        ks0108WriteData(ImageMap[offset]);
31
        offset++;
32
      }
33
    }
34
}
und habe jetzt folgende fehlermeldung
../main.c:8: error: expected identifier or '(' before '{' token


Bin noch ein Anfänger also nicht Steinigen wegen den für manche Dumme 
fragen
#2016807
Lesenswert?

SIG schrieb:

> Habemal das ausprobiert sieht so aus:
> [c]
> #include <inttypes.h>
> #include <avr/io.h>
> #include <avr/pgmspace.h>
>
> #include "ks0108.h"
> #include "bild.h"
>
> {
>     ks0108ClearScreen();

Wo ist da das

int main()


> ../main.c:8: error: expected identifier or '(' before '{' token
>

Geh in die Zeile 8 und sieh nach was dort steht.
Wenn dir in der Zeile unmittelbar selber nix auffällt, dann untersuch 
auch mal die Zeilen davor.
Und siehe da: Ooops da ist der Funktionskopf mysteriöserweise 
verschwunden.

>
> Bin noch ein Anfänger also nicht Steinigen wegen den für manche Dumme
> fragen

Steinigen nicht.
Aber du solltest dir im klaren sein, dass ein GLCD nicht unbedingt etwas 
anfängertaugliches ist.
Gast #2016920
Lesenswert?

Karl heinz Buchegger schrieb:
> Wo ist da das
>
> int main()

danke jetzt sind die Fehler eg aber mein Atega 16 ist jetzt zu 100,3% 
voll kann das sein?

Sascha Weber schrieb:
> SIG schrieb:>     for(y=0; y<63 ;y=y+8)
>
>>     {
>
>>       for(x=0; x<64 ;x++)
>
>>       {
>
>>         ks0108GotoXY(0, 0);
>
>>         ks0108WriteData(ImageMap[offset]);
>
>>         offset++;
>
>>       }
>
>>     }
>
>
> immer wiederks0108GotoXY(0, 0);  ?????
>
> Sascha

was möchtest du mir damit sagen?
Persönliche Seite #2016974
Lesenswert?

SIG schrieb:

> danke jetzt sind die Fehler eg aber mein Atega 16 ist jetzt zu 100,3%
> voll kann das sein?

Alles kann sein.

Aber zum Nachvollziehen und Erklären müsste man genauer wissen, was du 
machen willst und was du machst.

Und so lange wie Quellcode (Definition von ImageMap), Dateien (bild.h) 
fehlen und genaue Infos, was du wie machst, kann man das nicht.

Für mich sieht es im Moment so aus, als ob ImageMap komplett im RAM 
liegt, statt wie in meinem Vorschlag im FLASH. Dass du dann irgendwo in 
Probleme reinläufst ist wahrscheinlich. Ich vermute die 100.3% 
beziehen sich aufs RAM, oder?

Überleg mal, wann du die Info gegeben hast, dass du einen Atmega16 
benutzt... wieviel RAM hat der? Wie gross wäre ein Bild auf dem GLCD 
128x128 = 2KB? Go figure.

Und von den Compilereinstellungen und dem genauen Typ des GLCD und 
dessen Datenblatt usw. sind wir noch meilenweit entfernt...

>>>       for(x=0; x<64 ;x++)
>>>       {
>>>         ks0108GotoXY(0, 0);
>>>         ks0108WriteData(ImageMap[offset]);
>>>         offset++;
>>>       }
> was möchtest du mir damit sagen?

Dass es sinnlos ist, ein Bild auf das Display zu schreiben und bei jedem 
Byte (= 8 Bildpunkte) immer zurück an Position 0,0 zu springen. Wenn du 
das willst, wären nämlich 8 LEDs ausreichend.
Gast #2017016
Lesenswert?

Ich wollte erstmal nur ein Bild auf dem GLCD anzeigen.
ich habe das Display von Pollin 124x64
http://www.pollin.de/shop/dt/NTc1OTc4OTk-/Bauelemente/Aktive_Bauelemente/Displays/LCD_Modul_TG12864B_03.html

Stefan B. schrieb:
>>>>         ks0108GotoXY(0, 0);

Ich dachte ich müsste hier angeben wo er das Bild setzten muss

Im anhang noch den Ordner wo ich alles drin habe

Ich Proggramiere mit dem AVR Studio4
Angehängte Dateien:
Persönliche Seite #2017073
Lesenswert?

Mach es wie Holger schreibt. S. Anhang, ist aber ungetestet
1
AVR Memory Usage
2
----------------
3
Device: atmega16
4

5
Program:    2556 bytes (15.6% Full)
6
(.text + .data + .bootloader)
7

8
Data:          3 bytes (0.3% Full)
9
(.data + .bss + .noinit)

Das Bildformat in bild.h ist seltsam und IMHO komplizierter als nötig in 
main.c zu verarbeiten. Eigentlich sind die Routinen in der Lib so 
geschrieben, dass man die 128x64 linear adressieren kann. Die Aufteilung 
auf Chip0 und Chip1 und das Hochzählen der XY Position kann die Lib 
alleine machen. Bin aber nicht tiefer eingestiegen.
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren