mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik KS0108 Grafik anzeigen


Autor: SIG (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
#include <inttypes.h>
#include <avr/io.h>
#include <avr/pgmspace.h>

#include "ks0108.h"
#include "bild.h"




int main(void) {
  volatile uint16_t i;
  struct font bild;
  
  for(i=0; i<15000; i++);
  
  
  
  ks0108Init();
  ks0108GotoXY(0,0);
  ks0108WriteData(bild);

  while(1);
}

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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:
uint8_t bild[MAXBYTES] PROGMEM = { ... }; // Initialisierte Werte eintragen

int main(void)
{
  // for(i=0; i<15000; i++); durch _delay_ms(...) ersetzen!
  ks0108Init();
  ks0108GotoXY(0,0);
  for (uint16_t i = 0; i < MAXBYTES; i++)
  {
    ks0108WriteData( pgm_read_byte( bild+i ) );
  }
  while(1);
}

ADD: Siehe auch Beitrag "Bitmap auf KS0108"

Autor: SIG (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
#include <inttypes.h>
#include <avr/io.h>
#include <avr/pgmspace.h>

#include "ks0108.h"
#include "bild.h"

{
    ks0108ClearScreen();

    int offset = 0;
    int y = 0;
    int x =0;

    for(y=0; y<63 ;y=y+8)
    {
      for(x=0; x<64 ;x++)
      {
        ks0108GotoXY(0, 0);
        ks0108WriteData(ImageMap[offset]);
        offset++;
      }
    }
    
    for(y=0; y<63 ;y=y+8)
    {
      for(x=63; x<128 ;x++)
      {
        ks0108GotoXY(0, 0);
        ks0108WriteData(ImageMap[offset]);
        offset++;
      }
    }
}
 

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

Autor: SIG (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan B. schrieb:
> for (uint16_t i = 0; i < MAXBYTES; i++)

wofür steht bei dir eigentlich MAXBYTES???

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SIG schrieb:
> Stefan B. schrieb:
>> for (uint16_t i = 0; i < MAXBYTES; i++)
>
> wofür steht bei dir eigentlich MAXBYTES???

Für die Anzahl der Bytes in den Daten

Siehe
...
uint8_t bild[MAXBYTES] PROGMEM = { ... }; // Initialisierte Werte eintragen
...

Autor: Sascha Weber (sascha_w)
Datum:

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

Sascha

Autor: SIG (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Wenn du das willst, wären nämlich 8 LEDs ausreichend.

Könnte man doch ein schönes Schütteldisplay draus bauen;)

Autor: ISG (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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-/Baueleme...

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

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dein bild.h belegt 1kB RAM.
Pack es ins PROGMEM (Flash).

Autor: Stefan B. (stefan) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Mach es wie Holger schreibt. S. Anhang, ist aber ungetestet
AVR Memory Usage
----------------
Device: atmega16

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

Data:          3 bytes (0.3% Full)
(.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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.