Forum: Mikrocontroller und Digitale Elektronik T6963c Text wiederholt sich


von GLCD User (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe ein Problem mit einem 240x128 Pixel LCD (T6963c)
Es wird der Test den ich Ausgebe in jeder Zeile dargestellt...

Hoffe das mit jemand helfen kann

mfg

von GLCD User (Gast)


Lesenswert?

keiner eine idee?

von GLCD User (Gast)


Lesenswert?

push

von Thomas K. (tkroth) Benutzerseite


Lesenswert?

Hast du anstelle WriteString einmal WriteStringPGM versucht?

von GLCD User (Gast)


Lesenswert?

Kann ich nicht da ich einen C8051F330 MC verwende
Habe den betreffenden code eh auskommentiert

mfg

von Ralf (Gast)


Lesenswert?

grins

Mag es vielleicht daran liegen, dass du das Display tatsächlich so 
initialisiert hast, dass dein Grafikbereich nur eine Buchstabenzeile 
umfasst?

Ändere mal
1
#define GLCD_GRAPHIC_AREA  (GLCD_PIXELS_PER_LINE / GLCD_FONT_WIDTH)

in
1
#define GLCD_GRAPHIC_AREA  ((GLCD_PIXELS_PER_LINE / GLCD_FONT_WIDTH) * (GLCD_NUMBER_OF_LINES / 8)

Das sollte helfen :)

Ralf

von Ralf (Gast)


Lesenswert?

Kommando zurück, das machst du ja weiter unten... Sorry... Ausserdem 
müsste es ja auf den Text bezogen sein, nicht auf Grafik...

Hm...

Hast du geguckt, ob deine DEFINES alle das richtige Ergebnis liefern? 
Grafiken machen keine Probleme oder?

Ralf

von GLCD User (Gast)


Lesenswert?

bei grafik tut sich gar nichts :(

von Ralf (Gast)


Lesenswert?

Okay, nachdem ich mich mal n bisschen reingelesen hab in deinen Code, 
hätte ich mal folgende Anmerkungen:

1. Die Sourcen sind wohl ursprünglich für einen AVR geschrieben. Also 
schmeiss mal die ganzen Bit-Schiebereien etc. raus, und steuere die 
Ports direkt an. Du kannst entweder mittels #define oder durch 
sbit-Deklaration für die einzelnen Portbits entsprechende Namen 
vergeben. Also entweder statt der vorhandenen #defines
1
#define GLCD_CD      0
2
#define GLCD_RD      1
3
#define GLCD_WR      2
4
#define GLCD_CE      3
5
#define GLCD_RESET    4
6
#define GLCD_FS      5
nimmst du
1
#define GLCD_CD      Px_y  //Port eintragen
2
#define GLCD_RD      Pa_b
3
#define GLCD_WR      Pm_n
4
...

2. Wie schnell lief der AVR, von dem du die Sourcen hast? Ein SiLabs 
8051-Controller (oder generell ein 8051) hat eine andere Taktaufteilung 
als ein AVR, daher können auch einfach schon die Delays falsch sein.
Ich glaub, dass du den T6963C zu schnell ansteuerst. Für den ersten 
Versuch würd ich also einfach die Delay-Funktion vergrößern, dann siehst 
du schon mal ob es daran liegt.

Ralf

von A. B. (funky)


Lesenswert?

ja, das kann gut ein Geschwindigkeitsproblem sein.
Ich habe auf Arbeit auch ein wenig mit dem Ding gekämpft, habe aber 
meine SOurcen momentan nicht hier....deshalb nur aus dem Gedächtnis.

Ich habe mir Deinen Quelltext jetzt nicht allzugenau angesehen, aber ich 
hatte auch das Problem das Text doppelt erschien, unerklärliche 
Pixelfehler aufgetreten sind usw. und das obwohl die gleiche Libary die 
wir geschrieben hatten auf einer langsameren CPU wunderbar 
funktionierte.
Letzendlich hat folgendes zum Ziel geführt:

Ich habe im Quelltext gesehen, das du bei allen Funktionen die direkt 
auf das Display zugreifen(also Status abfragen, Kommando schreiben, 
Daten schreiben, Daten lesen) alle Leitungen gleichzeitig 
setzt/ausliest.

Schreibe dir mal Makros zum setzen und löschen aller einzelnen 
Leitungen(CE, WR, CD usw) und rufe diese nacheinander auf.
Hast Du das entsprechende Datenblatt? In dem wird beschrieben wie die 
Reihenfolge zu sein hat

Dann wird aus etwas wie:
GLCD_CTRL_PORT &= ~((1 << GLCD_WR) | (1 << GLCD_CE) | (1 << GLCD_CD));

sowas
UNSET_WR;
SET_CE;
SET_CD;  (natürlich muss die Reihenfolge stimmen)

und es sollte laufen. Das scheint ja eine fertige Libary zu sein die Du 
da benutzt, so das ich erstmal nicht davon ausgehe, das dort 
irgendwelche größeren Fehler drin sind und es prinzipiell funktionieren 
sollte

Ich denke das könnte schon zum Erfolg führen.

von A. B. (funky)


Lesenswert?

ps: Beachten das einige Signalleitungen invertiert sind!!! Das kann 
einen ziemlich verarschen!(spreche aus eigener Erfahrung :/)

Und hier ist das Datenblatt: 
http://www.datasheetcatalog.com/datasheets_pdf/T/6/9/6/T6963C.shtml 
falls du es noch nicht hast

Auf Seite 9 ist zum Beispiel der Ablauf für Status-Read angegeben:
/RD auf Low
dann /WR auf High
dann /CE auf Low
und dann CD auf High
dann die Datenbits setzen
und dann den Status checken.

Wenn Du das so für die 4 genannten Funktionen machst sollte es gehen

Der Controller hat übrigends noch einen Auto read/write Modus. Dann wird 
nur ein Kommando gesendet, und man kann munter seine Daten 
draufschreiben. Macht das ganze etas fixer. Aber ist erstmal nicht 
wichtig solange gar nix geht ;)

pps: alle Datenleitungen setzen und dann einfach ein langes Delay hatte 
bei mir damals nicht zu Erfolg geführt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.