Gast
#3492219
Hallo Freunde, Hat jemand von euch die Library des KS0108 evtl. um die Funktions zum schreiben eines Bitmaps ergänzt ?!
|
Anzeige
|
Library KS0108
Gast
#3492219
Hallo Freunde, Hat jemand von euch die Library des KS0108 evtl. um die Funktions zum schreiben eines Bitmaps ergänzt ?!
Gast
#3492238
wenn das mal alles so einfach währe :D Wie muss ich denn da vor gehen ?! Jan.H schrieb: > Hat jemand von euch die Library des KS0108 evtl. um die Funktions zum > schreiben eines Bitmaps ergänzt ?! Ja, irgendjemand sicher.
Gast
#3492248
:D Könntet ihr diese hier mal hochladen?! Das Thema hatten wir am Dienstag schon einmal: Beitrag "KS0108 GLCD BITMAP Funktion"
Gast
#3492251
Jan.H schrieb: > wenn das mal alles so einfach währe :D > Wie muss ich denn da vor gehen ?! Bitmap bitweise auslesen. Ein Byte zusammenstellen und dieses an den KS0108 uebertragen. Genaue Datenanordnung aus dem Datenblatt vom KS0108 in Information bringen. Im Normalfall wird die Library eine Funktion beinhalten, mit der du einzelne Pixel setzen kannst. Die koenntest du dafuer verwenden.
Gast
#3492271
das müsste doch eigentlich so gehen oder nicht ?!
nur leider tut es das nicht :(
void LoadBitmap(unsigned char *bitmap)
{
uint16_t i, j,by;
for(i=0; i<64; i+=8)
for(j=0; j<128; j++)
{
by=pgm_read_byte(bitmap++);
ks0108GotoXY(j, i);
ks0108WriteData(by);
}
}
Jan.H schrieb: > by=pgm_read_byte(bitmap++); Die unsigned char die du an die Funktion übergibst ist nicht im Flash. Vllt. könnte man Genaueres dazu sagen, wenn man wüsste welche Bibliothek du umbauen willst. Welchen Compiler, welchen µC?
Gast
#3492282
Max H. schrieb: > Jan.H schrieb: >> by=pgm_read_byte(bitmap++); > Diene unsigned char die du an die Funktion übergibst ist nicht im Flash. Wie meinst du das jetzt ?! Meinst du mein Bitmap?
Gast
#3492293
Jan.H schrieb: > Max H. schrieb: >> Jan.H schrieb: >>> by=pgm_read_byte(bitmap++); >> Diene unsigned char die du an die Funktion übergibst ist nicht im Flash. > > Wie meinst du das jetzt ?! Meinst du mein Bitmap? Max H. schrieb: > Vllt. könnte man Genaueres dazu sagen, wenn man wüsste welche Bibliothek > du umbauen willst. > Welchen Compiler, welchen µC? Ich benutze einen Atmega32 / AVR - GCC / Bibliothek habe ich mal als .ZIP angehangen Hast du es versuch geschaft mit der funktion ks0108WriteData(by); nur ein Streifenmuster zu zeichenen. Ca. so:
Gast
#3492307
Das klappt alles wunderbar... Ich kann auch Schriften mit div. Schriftarten anzeigen lassen... Jan.H schrieb: > ...ap(unsigned char *bitmap) Ich weiß nicht wie es beim GCC für AVR ist, aber es kann sein, dass man Daten aus dem Progmem anders an die Funktion übergeben muss.
Gast
#3492314
Max H. schrieb: > Jan.H schrieb: >> ...ap(unsigned char *bitmap) > Ich weiß nicht wie es beim GCC für AVR ist, aber es kann sein, dass man > Daten aus dem Progmem anders an die Funktion übergeben muss. okay... was gibt es denn noch für möglichkeiten ?! Jan.H schrieb: > okay... was gibt es denn noch für möglichkeiten ?! 1. Es mit einer kleinen Bitmap aus dem RAM versuchen 2. Nachsehen wie man bei AVR-GCC variablen aus dem Progmem übergibt
Gast
#3492318
Jan.H schrieb: > Ich kann auch Schriften mit div. Schriftarten anzeigen lassen... Na ja, genauer gesagt, die lib vom Fabian Thiele kann das, und du kannst das Beispielprogramm daraus laufen lassen. Im Netz gibt es einige libs für graphische Displays am AVR, die auch bitmaps anzeigen können. Auch wenn die nicht direkt für einen ks0108 sind, lassen die sich doch leicht anpassen. Bemüh halt google mal etwas ausführlicher. Oliver Welches Programmiergerät hast du?
Gast
#3492346
void LoadBitmap(unsigned char *bitmap)
{
uint16_t i, j,by;
for(i=0; i<64; i+=8)
for(j=0; j<128; j++)
{
by=pgm_read_byte(bitmap++);
ks0108GotoXY(j, i);
ks0108WriteData(by);
}
}
______________________________________________________
der code klingt ja wirklich logisch...
was ich noch nicht ganz so verstehe...
ich rufe ja mit
LoadBitmap die Funktion auf...
Was muss ich denn dort noch für Parameter eingeben?!
LoadBitmap(TestBMP); ?! Wie wird das verlinkt ?!
Woher weiß die Funktion wo sich die Daten für das BMP befinden?
Gast
#3492358
Vilex schrieb im Beitrag #3492288:
> Lern einfach programmieren....Dummkopf :P
Warum beleidigst Du eigentlich? Willst du direkt auf die Fresse oder
erst nach der Arbeit vorm Firmengelände?
Gast
#3492394
Max H. schrieb: > Welches Programmiergerät hast du? AVR ISP MKII Jan.H schrieb: > Max H. schrieb: >> Welches Programmiergerät hast du? > > AVR ISP MKII Sry. Der Post sollte in einen anderen Thread.
Gast
#3492497
Das mit dem Bitmap, hat jetzt geklappt ;) Womit stelle ich ein das es auf dem ganzen GLCD nur einmal angezeigt wird ?! Mit i & j ?! Der rechte Bildteil wird auch links angezeigt. Ich denke mir, dass irgendetwas mit CS1 und CS2 nicht stimmt. http://embedded-lab.com/blog/wp-content/uploads/2011/12/GLCD_Pages.jpg Was passiert, wenn du nur ein einzelnes Byte auf der rechten hälfte einschaltest? Und was wenn nur eines auf der linken? OT: Was ist eurer Meinung nach die kleinste vernünftige Schriftgröße für GLCD?
Gast
#3492512
Max H. schrieb: > Der rechte Bildteil wird auch links angezeigt. Ich denke mir, dass > irgendetwas mit CS1 und CS2 nicht stimmt. Normalen Test kann ich ja Prima ausgeben... Ist das bitmap so gewollt wenn es nicht doppelt wäre? Oder ist es auch abgeschnitten? Falls ersteres ist es ganz einfach:
die size könntest du natürlich auch am Anfang des Bitmaps im PROGMEM mitspeichern. LG, Sean
Gast
#3492526
Sean Goff schrieb: > Ist das bitmap so gewollt wenn es nicht doppelt wäre? Oder ist es auch > abgeschnitten? Falls ersteres ist es ganz einfach: es ist so aber halt doppelt... muss ich die size nicht auch in der header datei schreiben?! Bei meinem Beispiel musst du die Grösse beim Funktionsaufrauf angeben: LoadBitmap(bitmap, 64, 64); du könntest es aber auch z.B. so machen:
Dein Bitmap währe dann um 2 Bytes verschoben, und die ersten 2 Bytes enthalten die Grösseninformation.
Gast
#3492582
Jetzt ist es auf einer Seite... nur leider sieht man jetzt nicht wirklich mehr eine schicke Animation... Hmm 1 Mb ist ein bisschen gross... Aber lade doch mal dein gesamtes Projekt (inklusive .h bitmap) hoch, ich schaus mir mal an.
Gast
#3492608
Sean Goff schrieb: > Hmm 1 Mb ist ein bisschen gross... > Aber lade doch mal dein gesamtes Projekt (inklusive .h bitmap) hoch, ich > schaus mir mal an. Bilder sind auch dabei! Versuche es mal mit diesem .c, ich habe da so einen Verdacht.
Gast
#3492620
Sean Goff schrieb: > Versuche es mal mit diesem .c, ich habe da so einen Verdacht. Ist immer noch das gleiche Nächster Versuch...
Gast
#3492631
Sean Goff schrieb: > Nächster Versuch... also das ändert leider auch nichts :( Aber ohne Animation funktioniert es?
Gast
#3492661
genau das gleiche :D
Gast
#3492663
Diese Funktion macht das richtig. Zumindest bei mir.
Gast
#3492674
Nachtrag: SetPixel muss natürlich auch die Pages des GLCD berücksichtigen:
Gast
#3492695
OldMen schrieb: > Nachtrag: > SetPixel muss natürlich auch die Pages des GLCD berücksichtigen:// > //Set a Pixel within the RAM-Buffer > //val=0; Pixel clear > //val=1; Pixel set > // > unsigned char SetPixel(unsigned int x, unsigned int y, unsigned char val > ) > { > unsigned char *p, tmp; > int idx; > > > > if(x >= LCD_WIDTH) return 1; //Out of bounds > if(y >= LCD_HEIGHT) return 1; würdest du vill. die .c & .h als .Zip anhängen?
Gast
#3492811
Kann mir mal jemand diesen Fehler erklären ?!
Gast
#3492900
also
im header steht...
void LoadBitmap(unsigned char *bitmap)
im source file steht...
void LoadBitmap(unsigned char *bitmap)
{
uint8_t i, j,by;
for(i=0; i<64; i+=8)
for(j=0; j<128; j++)
{
by=pgm_read_byte(bitmap++);
ks0108GotoXY(j, i);
ks0108WriteData(by);
}
}
& dann kommt er mit so einer fehlermeldung ?! was ist da los ???
Gast
#3493061
Hallo Jan, die Fehlermeldung: undefined reference to 'ks0108DrawBitmap' und der oben gepostete Code haben ja scheinbar erstmal nichst miteinander zu tun , ich vermute mal, du hast dir irgendwo eine ältere/unvollständige Library heruntergeladen und willst jetzt im Programm eine nicht enthaltene Funktion abrufen. Gruß, Micha
Gast
#3493231
Micha schrieb: > Hallo Jan, > die Fehlermeldung: undefined reference to 'ks0108DrawBitmap' und der > oben gepostete Code haben ja scheinbar erstmal nichst miteinander zu tun > , ich vermute mal, du hast dir irgendwo eine ältere/unvollständige > Library heruntergeladen und willst jetzt im Programm eine nicht > enthaltene Funktion > abrufen. > > Gruß, > Micha Wenn ich den Code im Hauptprogramm schreibe funktioniert alles... Wieso kann ich die Funktion so nicht einfach in die .c Datei schreiben und in dem Header sie dann aufrufen ?!
Gast
#3493257
Jan, einfache Frage: WO definierst du denn die Funktion ks0108DrawBitmap() ?
Gast
#3493272
Micha schrieb: > Jan, > einfache Frage: > WO definierst du denn die Funktion ks0108DrawBitmap() ? Ich möchte eine neue Funktion einfügen... void LoadBitmap(unsigned char *bitmap) { uint8_t i, j,by; for(i=0; i<64; i+=8) for(j=0; j<128; j++) { by=pgm_read_byte(bitmap++); ks0108GotoXY(j, i); ks0108WriteData(by); } }
Gast
#3493280
Micha schrieb: > Jan, > einfache Frage: > WO definierst du denn die Funktion ks0108DrawBitmap() ? Ich habe das aktuelle Programm noch mal mit angehangen! Ist vill. einfacher dort gleich alles sich an zu schauen... Definiert wird sie ja in meiner Header... die Funktion steht im Quellcode
Gast
#3493452
Ah ja, die Funktion ks0108DrawBitmap() wird also in "ks0108.c" definiert wie auch die Funktion LoadBitmap() dort definiert wird; wieso hast du eigentlich die LoadBitmap-Funktion im Hauptprogramm nochmal definiert ? Als Assembler-Freak ohne AVR-GCC Kenntnisse würde ich jetzt sagen, da wird was nicht gelinkt. Sind denn die beiden C-Source-Dateien in deinem Projekt richtig eingetragen ? Wenn die nicht zusammen compiliert werden , können die ja auch nicht gelinkt werden, nicht wahr.
Gast
#3493455
muss ich, wenn ich in der .c Datei was änder auch die .c Datei in meinem Hauptprogramm #includen?!
Gast
#3493516
Mahlzeit ! Das ist es ja eben, was ich bzgl. AVR-GCC auch nicht weiß. Kann hier leider auch nicht "auf die Schnelle" ein neues Studio installieren, da Atmel mir noch keinen Download-Schlüssel geschickt hat. Wenn ich aber in der "Linker Address Map" im .\debug-Verzeichnis nachschaue, finde ich keinen Eintrag zu 'ks0108DrawBitmap()' ! War da nicht was mit dem Aufruf von "make clean" oder so, was den Compiler zwingt, alle zu verlinkenden Dateien nochmal neu zu übersetzen ?
Gast
#3493542
Wenn ich das Makefile mal nach <makefile_lesen.txt> kopiere und dann darin lese finde ich: C_SRCS += \ ../GLCD_17.01.2014.c \ ../ks0108.c ... OBJS += \ GLCD_17.01.2014.o \ ks0108.o Übrigens, wenn man das Datum der verschiedenen Dateien im .\debug-Verzeichnis betrachtet, ist ks0108.c wohl tatsächlich nicht neu übersetzt worden. Da hakt es also.
Gast
#3493857
Jan, nach der Installation des Studios kommt bei mir folgendes raus: ------ Clean started: Project: GLCD_17.01.2014, Configuration: Debug AVR ------ Build started. Project "GLCD_17.01.2014.cproj" (Clean target(s)): Target "Clean" in file "C:\Programme\Atmel\Atmel Studio 6.1\Vs\Compiler.targets" from project "C:\Dokumente und Einstellungen\Micha\Eigene Dateien\AVR_TESTDIR\JAN\GLCD_17.01.2014\GLCD_17.01.2014\GLCD_17.01.2014. cproj" (entry point): Using "RunCompilerTask" task from assembly "C:\Programme\Atmel\Atmel Studio 6.1\Extensions\Application\AvrGCC.dll". Task "RunCompilerTask" C:\Programme\Atmel\Atmel Studio 6.1\shellUtils\make.exe clean rm -rf GLCD_17.01.2014.o ks0108.o rm -rf GLCD_17.01.2014.d ks0108.d rm -rf "GLCD_17.01.2014.elf" "GLCD_17.01.2014.a" "GLCD_17.01.2014.hex" "GLCD_17.01.2014.lss" "GLCD_17.01.2014.eep" "GLCD_17.01.2014.map" "GLCD_17.01.2014.srec" Done executing task "RunCompilerTask". Done building target "Clean" in project "GLCD_17.01.2014.cproj". Done building project "GLCD_17.01.2014.cproj". Build succeeded. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|