www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme mit T6963 Display


Autor: Christoph Hess (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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);
}

Autor: Christoph Hess (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt es im Forum jemand der schon einmal eine C Routine für Pixel
löschen geschrieben hat?

Autor: thkais (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Marko B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Christoph Hess (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Marko,

hast du dazu schon eine C Routine geschrieben?

Autor: Marko B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, aber ich dachte Du kommst selber drauf. :P
/*
** set the pixel at x,y
*/
void lcd_px_set(unsigned int x, unsigned int y)
{
  lcd_setptr(GFX_START + (y*LINE_LENGTH) + (x/6));  
  lcd_wr_cmd(0xf8 | (5-(x % 6)));
}


/*
** clear the pixel at x,y
*/
void lcd_px_clr(unsigned int x, unsigned int y)
{
  lcd_setptr(GFX_START + (y*LINE_LENGTH) + (x/6));  
  lcd_wr_cmd(0xf0 | (5-(x % 6)));
}

Autor: Christoph Hess (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Marko,

danke für den Code.
Für was genau steht GFX_START und LINE_LENGTH?

Autor: Marko B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Thomas K. (thkais)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.