Probleme mit T6963 Display

Gast #215902
Lesenswert?
• ▲
▼
Hi,

ich habe ein display vom Typ T6963 an einen AVR angeschlossen. Es
funktioniert ja auch schon so weit ganz gut.
Z.B. möchte ich ein Pixel bzw. meherer Pixel löschen können.
Das mit dem Pixel setzen funktioniert auch super nur die Routine
ClearPixel funktioniert nicht.


void LCD_PutPixel(unsigned char x, unsigned char y, unsigned char Set)
{
unsigned int XY;
unsigned char bitByte;

  XY=0x0000;
  XY=XY+(y*22);
  XY=XY+(x/6);


       out(0x24, XY & 0x00FF, XY>>8);
  bitByte=5-(x % 6);

  if (0 != Set)
   {
          bitByte |= 0xF8;
         }
        else
         {
          bitByte|=0xF0;
         }

  out(bitByte, 0, 0);    //0b1111SXXX , s is set/reset, xxx is bit 
number
xxx
          //(Each memorybyte i six graphics bits (pixels))
}

void lcd_clear_pixel(unsigned char x, unsigned char y)
{
unsigned int XY;
unsigned char bitByte;
unsigned char data;

  XY=0x0000;
  XY=XY+(y*22);
  XY=XY+(x/6);


       out(0x24, XY & 0x00FF, XY>>8);
  data = 5-(x % 6);


    /* Read existing display */
    out(0xC5,0,0);
    data = (~data) & read_data();

    /* Write modified data */
    out(0xC0,0,data);
}
Gast #215904
Lesenswert?
• ▲
▼
Die Frage ist wahrscheinlich, ob Deine "read_data" Subroutine
funktioniert, vielleicht wird auch einfach die falsche Speicherstelle
gelesen.
Ich würde hierzu den Speicher des Displays mit einem Muster
beschreiben, und schauen, ob das herauskommt, was erwartet wird.
Gast #215907
Lesenswert?
• ▲
▼
Ja, aber ich dachte Du kommst selber drauf. :P
1
/*
2
** set the pixel at x,y
3
*/
4
void lcd_px_set(unsigned int x, unsigned int y)
5
{
6
  lcd_setptr(GFX_START + (y*LINE_LENGTH) + (x/6));  
7
  lcd_wr_cmd(0xf8 | (5-(x % 6)));
8
}
9

10

11
/*
12
** clear the pixel at x,y
13
*/
14
void lcd_px_clr(unsigned int x, unsigned int y)
15
{
16
  lcd_setptr(GFX_START + (y*LINE_LENGTH) + (x/6));  
17
  lcd_wr_cmd(0xf0 | (5-(x % 6)));
18
}
Gast #215909
Lesenswert?
• ▲
▼
GFX_START = Startaddresse des Grafikspeichers, welche mit dem Befehl
"Set Graphic Home" eingestellt wird.

LINE_LENGTH = Zeilenlänge des Displays (z.B. bei einem 128x64 Display
und 6x8 Font: 22).
#215910
Lesenswert?
• ▲
▼
@Christoph:

Tja, wenn man nur abschreibt, ohne zu verstehen, dann kommt so etwas
raus.
Deine LCD_PutPixel aus dem allerersten Post benutzt bereits die
internen Befehle des T6963. Mit dem letzten Parameter kannst Du sogar
bestimmen, ob der Pixel gesetzt oder gelöscht werden soll.
Ich habe mich zwar gewundert, warum da zwei Subroutines für den
gleichen Zweck stehen, dachte mir aber, daß es einen Sinn haben müßte.
Zuviel gedacht.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren