Hallo Leute, kann mir jemand sagen wie ich ein einzelnes Pixel auf meinem GLCD mit T6963c setzen kann? Programmiersprache ist Assembler, C habe ich leider noch nicht drauf. Ich gehe jetzt mal davon aus, dass meine Initialisierung korrekt ist. Was wäre dann in welcher Reihenfolge zu tun? zB: 1. Kommando für Bitset senden 2. Adresspointer setzen (Grafikstartadresse+Offset) 3. 8Bit-Wert als Daten senden das oben genannte funktioniert natürlich bei mir nicht. Gruß, Jürgen
Hi Der T6963 hat spezielle Befehle zum Setzen/Löschen von Bits. MfG Spess
weiß ich ja, nur reicht das Kommando 'Bitset' allein nicht aus. Irgendwie muss ich dem Controller ja mitteilen welches Bit der Adresse er setzten soll. Im Moment sieht das bei mir so aus:
1 | lcd_set_pixel: |
2 | ldi lcdLSB,low (GFX_BASE) |
3 | ldi lcdMSB,high(GFX_BASE) |
4 | rcall SetAdressPointer |
5 | |
6 | ldi command, (BITSET) |
7 | rcall WriteCMD |
8 | |
9 | ldi lcdMSB, 1 |
10 | rcall Write1Byte |
11 | ret |
Hi Bei mir so (ohne Adresse setzen):
1 | ; Punkt setzen |
2 | ; in r17 Bitnummer |
3 | |
4 | set_bit: push r16 |
5 | push r17 |
6 | mov r16,r17 |
7 | ldi r17,bitmode+bitset |
8 | add r17,r16 |
9 | rcall wr_cmd |
10 | pop r17 |
11 | pop r16 |
12 | ret |
Die Bitposition ist Bestandteil des Kommandos. Dein > ldi lcdMSB, 1 > rcall Write1Byte kannst du dir sparen. MfG Spess
Ich habe nochmal genauer ins Datenblatt geschaut, ich glaube ich habe es jetzt. In dem Bitsetbefehl ist das zu setzende Bit mit einzurechnen. Danke für den Tip.
1 | lcd_set_pixel: |
2 | ldi lcdLSB,low (GFX_BASE) |
3 | ldi lcdMSB,high(GFX_BASE) |
4 | rcall SetAdressPointer |
5 | |
6 | ldi command, (BITSET)+3 |
7 | rcall WriteCMD |
8 | ret |
1 | void glcd_setpixel(unsigned int x, unsigned int y) // set single pixel in 240x128 array |
2 | {
|
3 | |
4 | unsigned int addr; // memory address of byte containing pixel to write |
5 | if( (x>=XMAX) || (y>=YMAX) )return; |
6 | addr = GLCD_GRAPHIC_HOME + (y*GLCD_GRAPHIC_AREA) + (x/GLCD_FONT_WIDTH); |
7 | glcd_set_address(addr); // set LCD addr. pointer |
8 | glcd_cput(0xf8 | (((GLCD_FONT_WIDTH - 1) - x % GLCD_FONT_WIDTH)) ); // set bit-within-byte command |
9 | }
|
hier was du suchst: glcd_cput(0xf8 | (((GLCD_FONT_WIDTH - 1) - x % GLCD_FONT_WIDTH)) );
Naja, umsonst war es trotzdem nicht, ich versuche mir auch nebenbei C beizubringen, ich werde wohl später darauf zurückgreifen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.