Probleme mit T6963 Display

Gast #215902
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
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
Benutz doch einfach den "Bit Set/Reset" Befehl des T6963. Dann mußt Du
auch vorher nichts vom Display lesen um ein Bit zu löschen. So wie du es
jetzt machst ist es etwas umständlich.
Gast
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
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).
@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

Eine eigene Frage? Dieser Thread ist über 21 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.