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
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
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
@ all Ich habe nun ein Sourcecode selber Beschrieben der Wunderbar in Codevision Funktioniert.!!!! MFG: Fichte
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...
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
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
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
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
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
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
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
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
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
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 :)
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
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
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
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
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
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
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
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
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 :-/
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.