Forum: Mikrocontroller und Digitale Elektronik T6963C Sourcecode


von Fichte (Gast)


Lesenswert?

Hay @all

Habe hier mal die Such Funktion Benutz aber kein so wirkliches
Ergebniss nun Frage ich selber mal. Ich bräuchte einen test Sourcecode
in C für ein 128x64 LCD mit einen T6963C Controller wenn möglich mit
Anschluss belegung den ich habe eins Geschenkt Bekommen aber das Funz
nicht bzw. ich weiss nun nicht wie ich es Ansteuern kann.


MFG: Fichte

von Eddi (Gast)


Lesenswert?

Schau mal bei :
http://home.t-online.de/home/holger.klabunde/avr/avrboard.htm#t6963

Muss dann allerdings angepasst werden, da der Code fuer ein 240x64
Display ist.
Die Anschlussbelegung (typabhaengig) solltest Du auf den entsprechenden
PC-Modding Seiten finden, oder halt im Datenblatt.

Gruss
Eddi

von Fichte (Gast)


Lesenswert?

Hay @all

Hat jemand sowas in Codevision schon gemacht.???

von Thomas Diehl (Gast)


Lesenswert?

Hallo,

ich habe den Sourcecode von Holger Klabunde in CAVR "portiert".
Funktioniert aber nicht richtig, liegt vielleicht daran
das ich ein 128x240 Pixel Display benutze.
Das Display zeigt beim einstellen des Display-Modes
wirre Muster. Lediglich ein blinkender Cursor war mal
irgendwo zu sehen. Bleibe aber am Ball.

mfg,
TD

von Fichte (Gast)


Lesenswert?

@ all

Ich habe nun ein Sourcecode selber Beschrieben der Wunderbar in
Codevision Funktioniert.!!!!


MFG: Fichte

von Michael (Gast)


Lesenswert?

da ja nun der nicht ungerechtfertigte kommentar entfernt worden ist:

fichte: kannst du sagen, wie du was gemacht hast. oder hüllst du dich
wie bei deiner mfa in schweigen wenn nachgefragt wird...

von Fichte (Gast)


Angehängte Dateien:

Lesenswert?

So gut das hier der jenige kein Recht bekommt der Sagte ich bin ein
Grossmaul bitte da habt ihr den Sourcecode Ist zwar schade das hier
einige denken sie sind die Prinzen aber das ist ja Normal.!!!


MFG: Fichte

von StephanW (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe ein Board mit PIC18F458 und diesem LCD gebaut (240x64). Falls
ihr damit was anfangen könnt, gebe ich euch hier den Treiber
(CCS-C-Compiler).

Grüße Stephan

von Timo Birnschein (Gast)


Lesenswert?

Hallo,

ich habe den Scourcecode von Fichte für AVR gcc angepasst und beginne
grade damit ein 240*128 Display anzusteuern. Ich habe hier zur Zeit so
nette Muster in der unteren Hälfte.
Ich gehe davon aus, dass ich die Adressbereiche von T_BASE und G_BASE
ändern muss, damit das geht. Hat jemand dazu die Adressen parat?

Gruß und danke für die Scourcen! Sehr gute Funktionen :)

Timo

von Ralf (Gast)


Lesenswert?

T_BASE??? G_BASE???

Ich hab mir den Source-Code nicht angesehen, aber das hört sich nach
der Text-Home- bzw. Graphic-Home-Adresse an, die der T6963C-Controller
braucht, um zu erkennen, wo in seinem RAM Text bzw. Grafik hinterlegt
ist.

Ich habe bei meinen Routinen festgelegt, dass der Grafikbereich ab
Adresse 0x0000 beginnt. Die Länge des Grafikbereiches ist dann

x * y / 8

x und y ist die Anzahl der Pixel. Durch 8 teilen musst du, da das RAM
des T6963 ja byteweise orientiert ist. Falls du mit den Fontselect-Pins
des Displays eine andere Breite als 8 für die Buchstaben gewählt hast,
musst du anstatt 8 durch die entsprechende Breite teilen...

Das Ergebnis der oben genannten Formel ist bei mir die Startadresse des
Textbereiches, kann also ohne weitere Umschweife verwendet werden... Da
ich das restliche RAM des Displays nicht weiter verwende, sind keine
weiteren Berechnungen notwendig.

Also nochmal in Kurzform:

G_BASE = 0x0000
T_BASE = x * y / 8

Falls das nun überhaupt nicht das war, was ich vermutet hatte, einfach
den Beitrag ignorieren grins

Ralf

von Timo Birnschein (Gast)


Lesenswert?

hm, du hast schon recht. ich glaube der Treiber von Fichte ist für ein
Display < 240*128, denn ich habe auch Probleme bei der Zeilenlänge
ect.

Außerdem ist dem Datenblatt des t6963c zu entnehmen, dass bei
übergroßen Displays - so wie meins hier - eine obere und eine untere
hälfte des Displays angesteuert wird. Ich bin mir noch nicht ganz
sicher in wie weit das den Treiber betrifft und wie ich ihn umschreiben
muss.

Das untersuche ich noch, aber vielleicht hat ja jemand schon comments
dazu.?

Gruß timo

von Ralf (Gast)


Lesenswert?

Glaube nicht, dass dein Display zwei Treiber verwendet.
Meine hier sind 240x128 und haben nur einen Treiber.
Die funzen wunderbar.

Wenn ich das Datenblatt des T6963C jetzt richtig im Kopf habe, würde
das bei einem Display mit zwei getrennten Bildschirmhälften so
aussehen, dass eine Hälfte des Grafikbereichs z.B. bei 0x0000 startet,
die andere bei 0x8000 (so steht es als Beispiel im Datenblatt).
Begründet wird dies damit, dass jede Hälfte ein eigenes RAM hat...

Hast du denn zwei RAMs drauf?!? Ich glaube nicht...

Ich vermute eher folgendes:

Du hast gesagt, das du in der unteren Hälfte wirre Muster hast...
Das riecht für mich danach, dass einfach das Display-RAM nicht komplett
bei der Initialisierung gelöscht wurde... Ich vermute, deine
Initialisierung geht von einem 240*64 Display aus, deswegen hast du nur
die obere Hälfte gelöscht...

Ich gehe bei meiner Initialisierung immer wie folgt vor:

1. Initialisierung des T6963C (Grafik-Home, -Bereich, Text-Home,
-Bereich, usw.) Alle nötigen Register eben setzen...
2. Löschen des kompletten Display-RAMs über die AutoWrite-Befehle des
T6963C
3. Einschalten des Display über den Display-Mode-Befehl des T6963C
4. FERTIG

Ab da wird dann mit Pixeln und Buchstaben gespielt ;-)
Versuch das mal bei dir...


Ralf

von Timo Birnschein (Gast)


Lesenswert?

Hast recht, ich habe nur ein Ram und das Display läuft mit einem
Driver.
Ich arbeite im Augenblick auf den Routinen rum, die Fichte geschrieben
hat, allerdings blicke ich bei seinen Lösch-Geschichten nicht ganz
durch. Das Display löscht nicht alles und wenn, dann nur
Streifenweise.
Ich habe ein paar Sachen geändert, allerdings hat das bisher keinen
Positiven Effekt gehabt.
Warscheinlich werde ich meinen eigenen Driver schreiben müssen, damit
es funktioniert... :(

Ralf, kannst du mir evtl nochmal deinen Sourcecode geben? Evtl kann ich
damit mehr anfangen. :)

Gruß
Timo

von Ralf (Gast)


Lesenswert?

Mit meinem wirst du so viel nicht anfangen können, da er für 8051er
geschrieben ist und du wie ich vermute, einen AVR verwendest...

Besser wäre es, wenn du mal deinen hier postest, dann können alle
reingucken.

Für das löschen des RAMs sieht es bei mir so aus:
1
void T6963C_CLRRAM(void) {
2
 _16BIT uiTemp;
3
4
 uiTemp.uiData = 0x0000;  //Adress-Pointer des T6963 setzen
5
 T6963C_WRD(uiTemp.ucData[1]);
6
 T6963C_WRD(uiTemp.ucData[0]);
7
 T6963C_WRC(ADR_PTR_SET);
8
9
 T6963C_WRC(AWRITE);  //Auto-Write-Modus setzen
10
11
//0x00 ins Display-Ram schreiben
12
 for(uiTemp.uiData = 0x0000; uiTemp.uiData < (LCD_RAM * 1024);
13
uiTemp.uiData++)
14
  T6963C_AWRD(0x00);
15
16
 T6963C_WRC(ARESET);  //Auto-Write-Modus beenden
17
}

T6963C_WRD ist das Schreiben von Daten.
T6963C_WRC ist das Schreiben von Kommandos.
LCD_RAM aus der for-Schleife ist in einer Header-Datei definiert und
gibt die Größe des Display-RAMs in kB an.

Ach ja, das ist jetzt mein erster Versuch mit dem Syntax-Highlighting,
also bitte nicht lachen, wenn es schiefgeht...

Ralf

von Timo Birnschein (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

sorry, dass ich mich nicht gemeldet habe, aber ich bin diese Woche
einfach nicht dazu gekommen!

Mein Scourcecode basiert immernoch auf dem von Fichte, allerdings habe
ich ein paar mehr kommentare eingefügt und die ein-oder andere
Codezeile geändert.
Der Display Code gliedert sich in folgende Dateien:
glcd-befehle.h
glcd-definitionen.h
glcd-helper.h -- diese Datei war notwendig, da Fichte offenbar einen
komplett anderen Compiler verwendet, denn meiner kann constanten nicht
durch ein Suffix wie LCDPORT.0 erweitern. Deswegen musste ich das per
hand machen.

Bitte seht mir meine erneute Implementierung von sbi und cbi nach! Ich
kenne die Disskussion, wollte aber damals, als ich dieses Grundgerüst
erstellte, nicht darauf verzichten. Mittlerweile verwende ich auch den
_BV() Weg!

Verhalten:
Das Programm startet.
Die verschiedenen Programmteile werden jeweils initialisiert.
Es läuft alles durch, es sollte auch alles laufen. Die Camera Routinen
laufen zur Zeit nicht mit meiner Camera, allerdings experimentiere ich
da noch. Bilder sind damit (vorrausgesetzt man deaktiviert den
Autobelichter) möglich.
Es werden Textzeilen auf das Display ausgegeben.
Mit einer Eingabe von 'a' über den rs232 Port läuft das Programm
weiter. Das ist zu debugging Zwecken eingebaut worden um den
Programmfluss kontrolliert ablaufen zu lassen.

Bei Verwendung von lcd_txt_clr() wird ein Teil des Displays gelöscht
und ich kann Zeichen schreiben. Es ist allerdings nur das obere Drittel
frei. Außerdem bricht ab dem 30. Zeichen die Zeile um, obwohl er noch in
der ersten schreiben kann. Das sieht so aus, dass ich auch mehr Zeichen
in die erste Zeile schreiben kann (!achtung hier) diese jedoch bereits
in der Zweiten NOCHMAL auftauchen. Das irritiert mich sehr, ist auch
abhängig davon, ob ich 6pixel oder 8 pixel Zeichen schreibe.

Bei Verwendung von lcd_grf_clr() passiert nichts. Das mag daran liegen,
dass evtl nichts in dem Speicherbereich lag. Wenn ich anschließend
versuche Text zu schreiben, zeigt mit das Display nichts davon an.
Setze ich die Startadresse um, also beispielsweise innerhalb meines
Textspeichers im Display, dann tauchen entsprechend Pixel inrgendwo im
Bereich der ersten Pixelzeilen auf. Offenbar wird beim schreiben der
Pointer nicht korrekt gesetzt.
Pixel setzen - per SetPixel(x,y); kann ich garnicht. Keine reaktion
bisher.


Zusammenfassend:
Der Speicher wird nicht gelöscht.
Ich kann per goto(x,y) nicht genau festlegen wo ich schreiben will.
Die Textzeichen tauchen ab dem dreisigsten Zeichen in der darunter
liegenden Zeile redundant auf.


Der Code liegt wie immer im Anhang. Vielen Dank für die Unterstützung!

MFG
Timo

von Timo Birnschein (Gast)


Angehängte Dateien:

Lesenswert?

Nachtrag:

ich habe mir nochmal egnauestens die Initialisierung des T6963C
angeschaut und musste noch ein paar Dinge ändern. Nach der Änderung
wird zwar der Speicher scheinbar gelöscht, allerdings .... das müsste
ich fotografieren, sonst ist das zu schwer zu erklären. ich versuche
das heute nachmitag zu schaffen...

Bitte nochmal die eine Datei ziehen, die im Anhang ist, und damit die
anderen ersetzen.

Dankeschön :)

von Timo Birnschein (Gast)


Angehängte Dateien:

Lesenswert?

Hier die versprochenen Bilder. Den knackser unten links nicht beachten.
Das Display ist optisch leicht defekt, der Controler läuft jedoch
einwandfrei. Das Teil dient ja nur zum testen - erstmal :)

mir fällt grade ein: Wenn ich Linien zeichne, dann bekomme ich statt
Linien viele unregelmäßig angeordnete Character Symbole auf den Screen.
Das habe ich leider vergessen zu fotografieren und nun ist die Camera
weggefahren...

Gruß
Timo

von Ralf (Gast)


Lesenswert?

Dass du anstatt einer Linie Buchstaben bekommst, lässt vermuten, dass du
dein Projekt aus unterschiedlichen Code-Teilen einfach
zusammengestückelt hast. Das wiederum lässt vermuten, dass diese
Code-Teile den Grafik- und den Text-Bereich des Displays anders
erwarten, als du ihn initialisiert hast...

Ralf

von Timo Birnschein (Gast)


Lesenswert?

Nun, Tuvok, das ist ein logischer Schluss :)

Wie ich bereits mehrfach erwähnte, basiert mein T6963C Treiber auf dem
Code von Fichte. Fichte ist der Typ, der ein paar Posts weiter oben
seinen Source Code zur Verfügung gestellt hat.

Du hattest mich darum gebeten meinen Code hochzuladen, damit du ihn dir
ansehen kannst. Hast du etwas gefunden, dass falsch aussieht?

Gruß
Timo

von Ralf (Gast)


Angehängte Dateien:

Lesenswert?

Hm... mal ganz nebenbei, Neelix, du bist nicht zufällig StarTrek-Fan?
grins

Okay, hab mir den Code angesehen... und gleich wieder vergessen!!!
Denn das verwirrt mich total:

- Wie kann es in einem Projekt mehr als eine MAIN-Funktion geben?
- Seit wann stehen Funktionen in Header-Dateien?
- ...

Da mach ich mir gar nicht die Mühe nach einem Fehler zu suchen, da ist
gar keine Struktur drin.
Bevor es jetzt Gemaule gibt: Das soll keine Kritik sein, wenn es so
funktioniert, solls ja recht sein, ich kann halt so nix damit
anfangen...

Ich habe mir aber dafür schnell die Mühe gemacht, dir einige meiner
Code-Fetzen rauszusuchen. Siehe Anhang, vielleicht kannst du sie dir
entsprechend umbauen.

Ach ja, fast hätte ich es vergessen: Diese Funktionen sind noch nicht
die endgültige Version, aber funktionsfähig (auf meinem System).
Ich habe sie vor ein paar Wochen nur mal eben schnell
zusammengezimmert, um zu sehen, ob die Hardware prinzipiell läuft.

Ralf

von Timo Birnschein (Gast)


Lesenswert?

Der Doctor hat mich optisch verändert, ich wusste nicht, dass er die
Nachbildung Neelix Talaxianischen Kopfes so gut hinbekommen hat =)

StarTrek schaue ich äußerst gerne :)

Hm, ja ich bin über die Lösung mit den h-Dateien auch nicht glücklich
:(
Zwei main-Funktionen? Das ist in der Tat eine peinliche Sache. Die
zweite wird nicht von mir kommen.... grübel

Danke für deine Codefragmente! Ich werde die mir in aller Ruhe mal
durchsehen. Das wird mir sicher helfen :)

Gruß
Timo

von Ralf (Gast)


Lesenswert?

Ja, ich bin auch ST-Fan.
Widerstand ist zwecklos ;-)

Bei dir klemmts an der Übersichtlichkeit, deswegen wirst du den Fehler
nicht selber entdeckt haben.
Guck dir meinen Code mal an, wenn Fragen sind, sag Bescheid.
Per Email gehts auch, musst halt hier Bescheid sagen...

Ralf

von Daniel (Gast)


Lesenswert?

hi ich hab mal ne kleine frage und zwar: was heisst das columns und 00h
beim display mode?
ich habe ein 240x128display was ich über den lpt1 anspreche aber
irgendwie klappt das mit der initialisierung nich so wie ich mir das
vorstelle...
könnt ihr mir da weiter helfen?
schon mal danke
daniel

von Ralf (Gast)


Lesenswert?

Columns heisst Spalten und 00h ist die kleinste Zahl ohne negatives
Vorzeichen. grins
Sorry für die blöde Antwort mit dem 00h, aber du solltest schon
schreiben, in welchem Zusammenhang die 00h auftaucht. Der Verweis auf
den Display-Mode ist da nicht hilfreich.

Und für dein Problem mit deiner Schaltung, da solltest du wenigstens
mal deinen Code posten, damit man mal sehen kann, was wo passiert...

Ralf

von Daniel (Gast)


Lesenswert?

Ups.. tut mir leid ich wolle eigentlich Text-Area und Grafik-Area sagen
nich Display-Mode.
Einen richtigen Quelltext habe ich leider noch nicht ich hab bisher nur
so n batch-programm geschrieben was nur vorsucht alles zu initialisieren
und dann einen buchstaben auf das lcd schreibt er nimmt leider aber nie
den buchstaben den ich mir aussuche und oft auch verschiedene :-/

von Ralf (Gast)


Lesenswert?

Deswegen hab ich gesagt, poste den Code. In deinem Fall eben die
Batch-Datei oder halt das, woraus man sieht, wie deine Initialisierung
aussieht usw.

Ralf

von Daniel (Gast)


Angehängte Dateien:

Lesenswert?

ok also das hier ist der grund quell text .. mit d(); und c(); sende ich
jeweils comandos an lpt 1 und checke den status.
wie ist das denn mit den columns .. sind das zeilen in pixel ? oder auf
den ram bezogen?
übrigends wenn ich versuche in das lcd etwas reinzuschreiben tut er das
manchmal auch .. nicht die zeichen die ich möchte aber wenigstens
irgendetwas .. allerdings schreibt er weiter aus dem lcd raus und kommt
dann immer erst so nach 3-4sekunden wieder auf das lcd.
deswegen hatte ich vermutet das mit der initialisierung bzw. den
columns etwas nicht stimmt

von Ralf (Gast)


Lesenswert?

Deine Kommentare im Code stimmen nicht. Die AutoWrite-Kommandos sind Bx
und nicht Cx. Ausserdem setzt du den Adresspointer für den
Grafikbereich völlig falsch.

Und dann ist da noch die Frage nach dem Timing. Wie schnell werden die
Daten ausgegeben? Benutzt du ein Timeout nach jedem Schreiben von
Kommandos und Daten oder verwendest du die Status-Abfrage des
Displays?

Deine Angaben für die Text- und die Grafik-Area unterscheiden sich,
dass ist eigentlich selten der Fall bzw. nötig.

Ich könnte jetzt noch ein paar Sachen anführen, aber ich hab grad keine
Zeit.

Und ich hab weiter oben mal Code-Fetzen gepostet, guck da mal rein, ich
verwende ebenfalls ein 240x128. Und mein Code funktioniert.

Ralf

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.