Pixel setzen auf GLCD mit T6963c

Gast #1624819
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
Gast #1624835
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
Gast #1624842
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
Gast #1624844
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
Gast #1624845
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)) );

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.