Forum: Mikrocontroller und Digitale Elektronik Pixel setzen auf GLCD mit T6963c


von pacer (Gast)


Lesenswert?

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

von spess53 (Gast)


Lesenswert?

Hi

Der T6963 hat spezielle Befehle zum Setzen/Löschen von Bits.

MfG Spess

von pacer (Gast)


Lesenswert?

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

von spess53 (Gast)


Lesenswert?

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

von pacer (Gast)


Lesenswert?

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

von pixel (Gast)


Lesenswert?

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)) );

von spess53 (Gast)


Lesenswert?

Hi

>hier was du suchst:

Es ging um Assebler!

MfG Spess

von spess53 (Gast)


Lesenswert?

Hi

>Es ging um Assebler!

Natürlich 'Assembler'.

MfG Spess

von pacer (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.