mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik T6963C mit 240x128 Display


Autor: David Geiger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,

ich versuche gerade einen t6963c mit 240x128 display anzusprechen. das 
ding ist richtig angeschlossen, steuerbefehle, data und commands 
schreiben und der statuscheck funktionieren auch. probleme hab ich 
allerdings noch mit der initialisierung. ich kann zwar den grafikmodus 
einstellen und sogar den cursor blinken lassen, allerdings haut 
irgendwas mit den speicherbereichen oder so noch nicht hin - auf jeden 
fall kann ich keine zeichen ausgeben...
weiß jemand, wie das richtig geht?

// Cursor Pointer
writedata($01);
writedata($01);
writecmd($21);

// Text Home Address
writedata($00);
writedata($08);
writecmd($40);

// Text Area Set
writedata($1e);
writedata($00);
writecmd($41);

// Graphics Home Address
writedata($00);
writedata($00);
writecmd($42);

// Graphics Area Set
writedata($1e);
writedata($00);
writecmd($43);

// Mode Set
writecmd($80); // OR, internal CG ROM

// Display Mode
writecmd($97); // Text on, Grafik off, Cursor, Blinken

// Cursorgröße
writecmd($A7); // 8 Linien groß

// Address Pointer
writedata($00);
writedata($08);
writecmd($24);

// 'hallo' schreiben
writedata($48);
writecmd($c0);
writedata($41);
writecmd($c0);
writedata($4c);
writecmd($c0);
writedata($4c);
writecmd($c0);
writedata($4f);
writecmd($c0);


Gruß, David

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi David,
vielleicht hilft dir meine Initialisierung weiter (auch 240x128):

  // Mode set: use CG ROM, OR text and graphics 0x80
  LCDWriteCommand(0x80);

  // Set text home address to $0000
  LCDWriteData(0x00);
  LCDWriteData(0x00);
  LCDWriteCommand(0x40);

  // Set text number of columns to 40.
  LCDWriteData(40);
  LCDWriteData(0);
  LCDWriteCommand(0x41);

  // Set graphics home address
  LCDWriteData(0x00);
  LCDWriteData(0x02);
  LCDWriteCommand(0x42);

  // Make sure the number of graphics "columns" is 40
  LCDWriteData(40);
  LCDWriteData(0);
  LCDWriteCommand(0x43);

  //Siehe Datenblatt ;-)
  LCDWriteCommand(0x9C);

Autor: David Geiger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi andreas,

danke für die schnelle antwort :).
funzt leider trotzdem noch nicht. was machst du denn, um was zu 
schreiben?

ich versuche einfach den address pointer auf den anfang des textbereichs 
zu setzen, also 00 00 bei deiner init und dann z.b. mit writedata($01) 
und writecmd($c0) ein ! an diese stelle zu schreiben. das müsste dann ja 
ganz links oben im lcd erscheinen?!

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meine Funktionen zum Text schreiben:

void LCDSetCursor(u08 x, u08 y) {
  LCDWriteData((30*y+x)&0xFF);
  LCDWriteData((30*y+x)>>8);
  LCDWriteCommand(0x24);
}


void LCDPutc(u08 c) {
  //Nicht vergessen: 0x20 vom ASCII-Wert abziehen!
  LCDWriteData(c - 0x20);
  LCDWriteCommand(0xC0);
}

Wenn es damit nicht funktioniert, liegt es vielleicht an den 
Schreib/Lese-Befehlen. Bist du sicher dass du das Timing genau einhälst?

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo ihr lieben Leute
hab' auch ein Problem mit meinem Grafik LCD - wollt allerdings keinen 
neuen Beitrag aufmachen. Ich hab' auch eine Ansteuerung für mein t6963c 
Controller geschrieben - das dumme ist: wenn ich ein einziges A sende 
ist mein ganzes Display voller A's, die alle ganz schnell laufen und 
plötzlich zu 1sen und Hyroglyphen werden - weiß jemand wie ich mein 
Display wieder zum stehen bringe????


mfg
Christian


PS: bei Intresse poste ich meinen Source (vielleicht hilfts ja dem 
David)

Autor: David Geiger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hast du vielleicht den automode angeschaltet?

wegen dem source: gerne :)

Autor: David Geiger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@andreas: kannst du mir das
LCDWriteData((30*y+x)&0xFF);
LCDWriteData((30*y+x)>>8);
mal genauer erklären? ich kenn mich mit c leider nicht so gut aus...
was soll das "(30*y+x)&0xFF" ("&" ??) und warum machst du danach ein 
bitshift um 8 nach rechts?
du rechnest da mit 30 spalten, oder? weil in der initialisierung bist du 
noch von 40 ausgegangen...

beim timing steht in einem tutorial, das ich hier hab, dass man beim 
lesen oder schreiben von daten 80 oder 150 ns warten muss. ich warte an 
den stellen eigentlich immer 1ms. muss man sonst noch irgendwo warten?

vielleicht kannst du mir ja mal deinen source code schicken.
mein writedata und writecmd stehen unten, die müssten doch eigentlich 
stimmen?!


const
  port : dword = $0378;
  WR_Lo : byte = $01;  // 0000 0001   take PC 1 Lo    Strobe   WR
  WR_Hi : byte = $fe;  // 1111 1110   take PC 1 Hi    Strobe   WR
  CE_Lo : byte = $02;  // 0000 0010   take PC 14 LO   Autofeed CE
  CE_Hi : byte = $fd;  // 1111 1101   take PC 14 HI   Autofeed CE
  CD_Lo : byte = $fb;  // 1111 1011   take PC 16 LO   init     C/D
  CD_Hi : byte = $04;  // 0000 0100   take PC 16 HI   init     C/D
  RD_Lo : byte = $08;  // 0000 1000   take PC 17 LO   SLCT IN  RD
  RD_Hi : byte = $f7;  // 1111 0111   take PC 17 Hi   SLCT IN  RD


procedure tform1.writedata(data: byte);
begin
  while (readstatus <> 3) do begin end; // auf ready warten
  portwriteb(port+2, ONE_DIRECT_PORT);  // direktionaler Port
  portwriteb(port, data);   // Daten schreiben
  portwriteb(port+2, CD_Lo);  // Data Read/Write
  portwriteb(port+2, CE_Lo);  // Chip aktivieren
  portwriteb(port+2, WR_Lo);  // Schreibmodus aktivieren
  sleep(1); // mind. 80ns warten
  portwriteb(port+2, CE_Hi);  // Chip deaktivieren
  portwriteb(port+2, WR_Hi);  // Schreibmodus deaktivieren
end;

procedure tform1.writecmd(cmd: byte);
begin
  while (readstatus <> 3) do begin end; // auf ready warten
  portwriteb(port+2, ONE_DIRECT_PORT);  // direktionaler Port
  portwriteb(port, cmd);    // Command schreiben
  portwriteb(port+2, CD_Hi);  // Command/Status
  portwriteb(port+2, CE_Lo);  // Chip aktivieren
  portwriteb(port+2, WR_Lo);  // Schreibmodus aktivieren
  sleep(1); // mind. 80ns warten
  portwriteb(port+2, CE_Hi);  // Chip deaktivieren
  portwriteb(port+2, WR_Hi);  // Schreibmodus deaktivieren
end;


gruß, david

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.