Fehler in der Anzeige

Yankee635

Neues Mitglied
26. Apr. 2008
30
0
0
bei Regensburg
Sprachen
Hallo,

ich habe ein Display 40*4 mit 2 Enableleitungen. Die Anzeige funktioniert einwandfrei im normalen Textmodus.

Wenn ich aber Bigdigits nutzen möchte dann fangen die Probleme an.

Die Anzeige der Bigdigits funktioniert in der Zeile 3 und 4, aber nicht in den Zeilen 1 und 2. Wenn ich aber die Zeile 1 mit 3 und 2 mit 4 tausche (die Daten welche angezeigt werden sollen) so zeigt er mir die Bigdigits richtig an.

Daher gehe ich einmal von aus das die Bigdigitchrs richtig sind. Ich vermute das irgendetwas mit Modus zur Anzeige von Bigdigits im ersten Controller nicht richtig funktioniert.

Das Display verhält sich wie 2x 40*2, auch der Interne DDRam vom Display wird so adressiert. Also Zeile 1 und 3 sind die selben DDRam-Adressen und bei Zeile 2 und 4 verhält es sich genauso.
 

Anhänge

  • 4 Zeilen LCD-Test Big.bas
    3,4 KB · Aufrufe: 17
  • lcd4e2.lib.txt
    4,2 KB · Aufrufe: 13
  • IMAG0030-1.jpg
    IMAG0030-1.jpg
    55,5 KB · Aufrufe: 22
neue Characters

Hallo @Y...,
freut mich, daß es mit der Initialisierung geklappt hat. (Nehme an, Du verwendest bei dieser "Großbuchstaben"-Darstellung dieselbe vorher beschriebene Routine.)

Aus dem unten angehängten Bascom-Programm werde ich nicht schlau, möchte und kann mich also dazu garnicht äußern.

Es gibt nur eine generelle Frage von mir:

Werden die neuen Characters bei jedem Start des Displays jedesmal neu programmiert oder hast Du sie einmal geprogt und dann hinterlegt unter anderen Adressen, da wo die japanischen (Kano-)Characters stehen zum Beispiel.

Das würde evtl. einiges erklären.
Denn nicht jeder Adressbereich im Character-RAM ist auch frei programmierbar und kombinierbar mit jeder Display-Adresse.



Gruß von Oskar01
 
Hallo Oskar,

ja ich habe das ganze jetzt unter Bascom versucht und nur 2 Tage gebraucht das Display zum laufen zu bringen da es eine seltsame Speicherbelegung hat und auch das Handling ist nicht ganz so wie es Bascom macht.

Aber deine Gedanken sind noch sehr gute Ansätze um zu schauen wo der Fehler liegen könnte. Obwohl die Character ja funktionieren und zwar alle, aber leider nur wenn ich sie in Zeile 3 und 4 schreibe.
 
Hi Yankee635,

bitte schick mir doch mal die genaue Bezeichnung Deines LCD-Displays und den ChipSatz. Hast Du noch Datenblätter die Du dem Thread anhängen kannst. In Bascom initialisierts Du KS077 richtig?

Ich würde mir das gerne mal ansehen, brauche aber "more Input". Danke!

Grüße,
ma
 
Hallo Markus,

jetzt kommt der Guru *freu.

Da das Datenblatt zu groß ist hier der Link.
Also Text schreibt er ganz normal in allen 4 Zeilen so wie es sein soll. Nur bei den Bigdigits macht er in der 1. und 2. Zeile Probleme. Wie schon gesagt, wenn ich die Zeilen vertausche werden sie richtig angezeigt bis auf die welche ich in die 1. und 2. Zeile schreibe.

Meinen Code habe ich am Anfang angehängt und die TxT-Datei enthält die Lib.
 
Hallo,

hier der link zum Datenblatt mit mehr Informationen.

Wenn ich aber die Zeile 1 mit 3 und 2 mit 4 tausche (die Daten welche angezeigt werden sollen) so zeigt er mir die Bigdigits richtig an.

Interessant wäre, wenn du die beiden Enable-Signale vertauschst, so dass die Reihenfolge der Übertragung zu den LCD-Controllern umgekehrt wird, es könnte eventuell etwas mit dem Timing zu tun haben. Wenn du sonst nichts an der Software änderst, werden dann die großen Ziffern nicht mehr richtig angezeigt, allerdings würde man die Segmentfehler noch sehen ... oder auch nicht mehr, bzw. dann in den Zeilen 3 und 4. Man könnte so den Fehler eventuell eingrenzen. Ich habe das Datenblatt überflogen, aber nicht gefunden, wie die LCD-Controller den Zeilen zugeordnet sind. (A = Zeile 1 und 2, B = Zeile 3 und 4?)

Grüße,
Dirk
 
Also es scheint mir ein Timingproblem zu sein. Wenn ich die Enableleitungen Softwaremäßig tausche, also ___lcde =0 anstatt von ___lcde=1 dann schreibt er mir Zeile 1 und 2 in die Zeilen von 3 und 4 und umgekehrt, dabei werden wieder die oberen Zeilen falsch dargestellt.

Wenn ich die Enableleitungen Hardwaremäßig tausche dann zeigt er mir Zeile 1 und 2 korrekt an, natürlich mit den Werten von Zeile 3 und 4 und umgekehrt. Dabei werden aber die Zeilen 3 und 4 falsch dargestellt.

Ich habe ja die Vermutung das irgendwie was falsch ist beim ersten Controller, irgend ein Timing. Also der anzeige nach zu urteilen liegt der Fehler wohl in der Software beim Enable 1 (___lcde=0). Ich habe aber in der Lib schon verglichen und keinen Unterschied entdecken können.

Die Speicherzuordnung habe ich einmal angehängt. Dabei haben die Zeilen 1 und 3 sowie die Zeilen 2 und 4 die selben Adressen.
 

Anhänge

  • Display.pdf
    181,8 KB · Aufrufe: 6
  • Enable hardwaremäßig vertauscht.JPG
    Enable hardwaremäßig vertauscht.JPG
    62,2 KB · Aufrufe: 10
  • Enable richtig.JPG
    Enable richtig.JPG
    65,5 KB · Aufrufe: 11
Hallo,

ich vermute auch, dass es am Timing liegt.

Lass doch den AVR einmal langsamer laufen, wenn der Fehler dann nicht mehr auftritt, wissen wir, dass es ein Timingproblem ist.

(Fusebit CKDIV8 aktivieren oder z.B. mit internem Oszillator und niedriger Frequenz laufen lassen).

Grüße,
Dirk
 
Tach auch :D

Also, von einem Guru bin ich ja noch mindestens soweit weg die die Erde vom Mond, ich habe vom tuten und blasen keine Ahnung und hangle mich auch von Idee zu Idee und von geistigem Lichtblitz zu fertigen Lösungen:p

Aber.........

Ich glaube aktuell auch an ein Timing-Problem. Mega langsamer laufen lassen ist eine Möglichkeit das mal zu probieren. Ich glaube das Grundproblem liegt daran, dass Du dem LCD Daten "zuschieben" möchtest wo es von Dir noch gar keine Daten haben will.

Aber fangen wir erstmal bei den Basics an.

1.
Soweit ich weiß verwendet die BASCOM Library nicht die Möglichkeit des Busy-Flag aus dem Controller auszulesen. Ergo musst Du sicherstellen, dass auf Deiner HW die R/W-Leitung auf GND gelegt ist. Ist das bei Dir der fall?

Wenn es im normalen Modus fuktioniert so bedeutet das noch lange nicht, dass die Beschaltung für eben Deine BigDigits korrekt beschaltet ist.

2.
Aus welchem grund machst Du ein CLS wenn das LCD noch garnicht initialisiert ist?
Bitte initialisiere Dein LCD nach folgendem Schema:
Code:
 ----- Konfiguration LCD Display -----
Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.4 , Rs = Portc.5
Config Lcd = 16 * 3 , Chipset = Dogm163v5
'Config Portc = Output                                       ' nicht zwingend erforderlich
'Config Lcdbus = 4                                           ' nicht zwingend erforderlich
Initlcd
Waitms 100
Cursor Off Noblink
Cls
Bring diese umstellung bereits abhilfe in Deinem Code?

3.
Mach mal nach den "Cursor Off Noblink" ein CLS und probiers aus, ob der Effekt dann weg ist. Bei CLS passiert in der BASCOM Lib und im Controller etwas mehr als nur den Bildschirm löschen.

4.
BASCOM wartet soweit ich weiß via Default 100µs nach der Übertragung von 2 Nibbles im 4-Bit-Modus an das Display. Eventuell reicht das bei Deinem Display nicht aus.
Du kannst folgendes mal probieren: Warte mal vor jedem LCD_Statement bei dem Du Daten auf das Display schreiben möchtest mit "waitms 50" 50 Milisekunden und geb dem Display mehr Zeit.
Bringt das was?

5.
Gebe zum Test dem Display nach der Umschaltung von lcde etwas mehr Zeit und warte mal "waitms 2". Bring das etwas?


Hmmmm, Du siehst, es sind einige Stellschrauben die ursächlich sein können. Habe aber fast Deine Initialisierung (siehe 1.) als Hauptgrund in verdacht.

Probiers einfach mal aus und geb uns Bescheid.

Grüße,
Ma
 
Hallo,

also ich habe an allen "Schrauben" gedreht und leider hat es nichts gebracht ausser das das Display noch langsamer wurde ( möchte den MC später mit 16 MHz laufen lassen).

Ich dachte das ich das INITLCD nicht benötige, so hatte ich die Beschreibung verstanden. INITLCD soll wohl nur einen Rest des Displays machen, aber da ich ja beide gleichzeitig an die Spannungsversorgung hänge wird der ja schon automatisch ausgeführt. Ich hatte gedacht Bascom generiert einen Code wo bei Start der Software im MC das Display automatisch initialisiert durch die Angaben zum Display im Kopf.

Zu meinem Leidwesen hat die LCD4E2.lib weder eine Busy-Flagabfrage noch unterstützt sie den 8 Bit-Modus. Ich habe aber noch zu wenig Einblick um meine eigene LIB zu schreiben.Die Initialisierung mit dieser LIB war bisher die einzige Möglichkeit das Display im normalen Modus zum laufen zu bringen.

Lg Yves
 
Hmmmmm, habe was interessantes gefunden:

Möglicherweise musst du dir das Datenblatt vom KS0066U (*) schnappen und
die Funktionen zur Ansteuerung selbst schreiben.

Die bequemen LCD Funktionen von Bascom setzen bestimmte Controller
voraus und deren Befehlssatz und Timing wird dann eingehalten.

Bei anderen sog. "kompatiblen" Controllern wie dem KS0066U können
Abweichungen insbesondere bei der Initialisierung des Displays notwendig
sein.

In bestimmten Fällen sind die Abweichungen einstellbar (CHIPSET
Parameter beim CONFIG LCD Befehl für "gängige" Displays), bei anderen
nicht.

Habe noch was interessantes gefunden:

KS-Controller nicht 100% identisch mit dem üblichen ist, daher funktioniert die Bascom Libary nicht optimal. Du musst das LCD etwas anders initialisieren.
Entweder du schreibst eine kleine Libary dafür oder aber du sendest nach dem Bascom "initlcd" einige Kommandos direkt an das LCD, dann gehts auch mit den Bascom Befehlen und der normalen Libary

In etwas so:
Code:

Call Rn_writelcdcode(&B00101100) ' Funktionsset RE=1
Call Rn_writelcdcode(&B00001001) ' 4 Bit-Datenlänge, extension
Call Rn_writelcdcode(&B00101000) ' Funktionsset RE=0

Call Rn_writelcdcode(&B00000110) ' Entry Mode Set Cursor Auto-Increment
Call Rn_writelcdcode(&B00001100) ' Display ein, Cursor aus, Blinken aus


Den Befehl "Rn_writelcdcode" musst du dir selbst definieren, der ist abhängig von deiner Belegung.Er gibt die Befehle in 4er Bits direkt an das LCD.
Siehe auch LCD-Datenblatt

Und noch was:

Den Code habe ich mal beigefügt:

Code:

'Pins des LCD-Modules setzen ggf. an eigene Anschlüsse anpassen

Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.1
Initlcd

'Config Lcd = 20 * 4 ' wird nicht benötigt daher auskommentiert
'Config Lcdbus = 4 ' oder weglassen :)

Call Lcdwrite(&B00101100)
Waitms 5

Call Lcdwrite(&B00001001)
Waitms 5

Call Lcdwrite(&B00101000)
Waitms 5

Call Lcdwrite(&B00000110)
Waitms 5

Call Lcdwrite(&B00001100)
Waitms 5

'...
' hier LCD - Ausgaben und Hauptprogramm
'...

'Schreibt die Initialisierungs - Bits zum LCD

Sub Lcdwrite(byval Zeichen As Byte)

' Höherwertiges Nibble setzen
If Zeichen.4 = 1 Then Portc.4 = 1 Else Portc.4 = 0
If Zeichen.5 = 1 Then Portc.5 = 1 Else Portc.5 = 0
If Zeichen.6 = 1 Then Portc.6 = 1 Else Portc.6 = 0
If Zeichen.7 = 1 Then Portc.7 = 1 Else Portc.7 = 0
' Höherwertiges Nibble übertragen
Portc.3 = 1
Waitms 1
Portc.3 = 0
Waitms 1

' Niederwertiges Nibble setzen
If Zeichen.0 = 1 Then Portc.4 = 1 Else Portc.4 = 0
If Zeichen.1 = 1 Then Portc.5 = 1 Else Portc.5 = 0
If Zeichen.2 = 1 Then Portc.6 = 1 Else Portc.6 = 0
If Zeichen.3 = 1 Then Portc.7 = 1 Else Portc.7 = 0
' Niederwertiges Nibble übertragen
Portc.3 = 1
Waitms 1
Portc.3 = 0
Waitms 1

End Sub


Das kann man zwar bestimmt noch besser machen, aber es funktioniert.

Ich habe jetzt "nur" noch das Problem, dass das LCD mit den Bascom-Befehlen
- Lowerline die dritte Zeile und mit
- Thirdline die Zweite Zeile anspricht.

Das ist zwar nicht schön aber kein Problem, da ich das ja im Code berücksichtigen kann. (Nur für die Dokumentation ist es etwas verwirrend.)

Wenn hier noch jemand einen Tipp für mich hat, ist der gerne willkommen, ansonsten lasse ich es so wie es jetzt ist.


Die ganzen Diskussionen im Netz zeigen, dass Du Dir ein wirklich tolles Ding rausgesucht hast um noch viel freude zu haben:D Aber das macht die ganze Sache spannend und toll, wenn man es zum Laufen bekommt.

Ich habe im Google mal "BASCOM KS0066" gegoogled und man findet ne ganze Menge Links zu Leuten die mit dem Ding kämpfen, gekämpt haben.

Ich glaube so auf die Schnelle bekommen wir die Lösung nicht hin. Aber vieleicht helfen Dir die obigen Kommentare. Es scheint nicht nur ein Timing-Problem sondern auch ein Initialisierungs-Problem und BASCOM-Treiberproblem zu sein.

Freue mich heute schon auf die Lösung!

Grüße,
Markus
 
Hallo,
also doch wieder "zu Fuß" mit Maschinensprache vielleicht noch Assembler und0101000010000100100 einige Äonen-Dimension niedriger, dann ist aber Schluß.
Woll?
Wie man eigene Charakters erzeugt und ausgibt, habe ich auch irgendwo mal gelesen.
Man kann nicht nur ins Display-Ram schreiben, auch ins Charakter-Ram.
Jedesmal mühselig Zeile für Zeile.

R/WQuer "high"
RS "low"
"Kommandomodus schreiben in LCD"
Adressenanwahl
.....
Charakterpixel
Enable
usw. usf.


Bis bald.....

(Übrigens bei mir:" no WinAVR installed, you can use some plugin instead"- Meldung bei Studio4. Bascom läuft also von vorne herein schon nicht, oder habe ich da was falsch verstanden?)
 
So ich konnte den Fehler eingrenzen, er liegt nicht in der Initialisierung, sondern in nachfolgendem Code aus der LIB.

Code:
 Ldi R24,0
* Sts {___LCDE},R24                 ; we use E1 now
 Ldi R24, 40                        ; 4 bit mode
 rcall _Lcd_control
 Ldi _temp1,14                      ; Display on, Cursor on, Noblink
 rcall _Lcd_control
 Ldi _temp1,6                       ; Cursor moves right, text doesn't move
 rjmp _Lcd_control                 [COLOR="Red"]; änder ich dieses rjmp in rcall funktionieren die 3. und 4. Zeile[/COLOR]
 Ldi R24,0
* Sts {___LCDE},R24                 ; we use E2 now
 Ldi R24, 40                        ; 4 bit mode
 rcall _Lcd_control
 Ldi _temp1,14                      ; Display on, Cursor on, Noblink
 rcall _Lcd_control
 Ldi _temp1,6                       ; Cursor moves right, text doesn't move
 Rcall _Lcd_control                 [COLOR="red"]; ändere ich dieses Rcall in Rjmp dann funktioniert die 1. und 2. Zeile[/COLOR]
[END]

Beides auf Rcall oder Rjmp bleibt es so bestehen wie der letzte Fehlerstand war. Also die Zeilen wo nicht funktionierten funktionieren immer noch nicht.

Also jetzt vermute ich eher das es ein Bascom interner Fehler ist.

LG Yves
 
^Rjmp im Unterschied zu rcall

Hallo @Y...,
der Unterschied liegt darin, daß der rjmp nur - glaube ich 23 Adressen weit springen kann, der rcall aber den "ganzen" Bereich abdeckt.
Wenn die angesprungenen Programmspeicherbereiche also zu weit auseinanderliegen, funktioniert rjmp nicht mehr.

Was mich bei diesen "Libraries" ungemein stört, ja, richtiggehend ärgert, ist, daß der Programmaufbau praktisch den Hauptteil außer acht läßt und sozusagen nur aus Unterprogrammen - "Labels" - besteht.
Die müssen eigentlich immer mit rcall aufgerufen und mit ret abgeschlossen werden. Oder per Interrupt-Einsprungadresse und mit reti.
Auch sollte SREG irgendwie gesaved werden. Mit push und pop auf Stack und zurück.

Sonst handelt man sich "Fuzzy-Logik" ein. Soviel zum Grundsätzlichen.

Also Unterprogrammaufruf von irgendwoher mit rcall

Dann Unterprogramm -

erst temp sichern
dann SREG sichern

push temp
mov temp, SREG
push temp (Push SREG geht ja nicht- daher der Move-Befehl vorher , sorry )


...
nun das Programm

am Ende dann
pop temp
mov SREG, temp
pop temp

Ja, ich kann auf Stack zweimal denselben Registernamen "temp"
nehmen, es wird ja der Inhalt auf dem Stack gesichert. Hintereinander.
Dann zum Schluß in umgekehrter Reihenfolge.




Gruß
K.-H. B.
 
Hallo Yves,

wenn _LCD_control eine Routine ist (ich gehe mal davon aus) und man mit rjmp in die Routine "springt", wird der code nach rjmp _LCD_control nicht mehr ausgeführt, das hat die gleiche Wirkung wie
Code:
rcall _LCD_control
ret
; ... code der nicht ausgeführt wird
Ich vermute wenn du in der Mitte ein rcall verwendest, läuft das Programm erst dann, wenn in der letzten Zeile rjmp verwendet wird. Im Moment fehlt da nämlich nach rcall _LCD_control ein ret.

Zudem sehe ich keinen Unterschied zwischen den Initialisierungen für E1 und E2. Die Initialisierung für E2 wird im Originalsourcecode nicht duchgeführt, zumindest sieht es ganz danach aus. Es könnte aber auch sein, dass Bascom auf Grund der Zuweisung von Pins zum LCD bestimmte Zeilen in der Library während der Kompilierung ändert, das weiss ich leider nicht, da bin ich kein Bascom-Experte.

Könntest du die gesamte Library mal anhängen, oder darf man diese nicht veröffentlichen?

Grüße,
Dirk
 
Ja, _LCD_Control ist eine Routine. Leider ist sie aber direkt in Bascom und somit läßt sich nicht nachvollziehen was dort eigendlich wie gemacht wird.

Der Unterschied in der Initialisierung von E1 und E2 liegt in der Routine ___LCDE begründet. Mit 1 oder 0 wird der Pointer an die jeweilige Stelle gesetzt.

Da ich zusammen mit Oskar das Display im AVR-Studio schon richtig zum laufen bekommen habe werde ich das Wissen nutzen und mir doch wohl oder übel meine eigene LIB schreiben müssen.

LG Yves
 
Noch ein paar Tips

Hallo @Y....,
auch, wenn es jetzt noch kein eins zu eins in Assembler übersetztes lauffähiges Proggi ist, hier noch ein paar Tips:
Also, ich würde vorschlagen, zunächst einmal die Adressen abzuklopfen.
Das Character-ROM sollte Dir dann alles Gespeicherte ausgeben mit dem
Programmdenkanstoß von angehängtem Proggi 4-Bit_0708.
(Da muß noch einiges auf angepaßt werden, bzw. das Label RS-Toggle muß rausgenommen werden, war sowieso nur ein Testlauf. Nehme an, es macht Dir keine sonderlichen Schwierigkeiten, die Sache anzupassen.)
Im Prinzip nichts anderes als eine Hochzählschleife, die dann den gesamten ASCII-Zeichensatz etc. abgibt.

Jetzt kannst Du überprüfen, ob alle Zeichen auch der richtigen Reihenfolge nach hintereinander dargestellt werden, oder ob irgendwo die Adresszuordnungen abbrechen und an anderer Stelle fortgeschrieben werden.

(Ist bei meinem 2x16-Display nämlich so, da die Adressen hier nicht konsekutiv dargestellt werden.)

Beim 4x40-organisierten Display sollte es eigentlich klappen, bzw. hier siehst Du dann, wo es hakelt. Dann ändere einfach die Adressen auf die richtigen ab. Hier kommt Dir noch zugute, daß Du zwar zweimal dieselben Adresszuordnungen hast, aber auch durch Möglichkeit von zwei Enableimpuls-Eingängen die jeweiligen Zeilen gezielt anzusteuern imstande bist. Sonst gäbe es ja nur Duplizierungen. Das scheint mir hierbei - glaube ich - das eigentlich nicht sonderlich schwierige aber dennoch problematische Ding bei Deinem Display zu sein.
Du siehst die "Bigfoot"-Zeichen als Zeichen insgesamt, es sind aber verschiedene einzeln zusammengesetzte, die nur dann einen Sinn ergeben, wenn sie tatsächlich genau positioniert worden sind. Auch sind normale Textbezeichnungen mit den "Bigfoot"-Zeichen kombiniert.

Wie dieses Adress-Schema aussieht, kannst Du dem Datenblatt vom DOG-M-Display (- mit freundlicher Genehmigung vorausgesetzt - abkopiert hier) entnehmen.
Dort sind dann auch die "frei" programmierbaren Adressen für selbsterstellte Characterpattern drin. Also, es sind - wenn ich es richtig gelesen habe nur ca. 7 zusätzliche Charakters möglich, denen weist Du dann einen "ASCII-Code" zu, also eine Character-RAM-Adresse, die mußt Du dann auch im Programm immer wieder verwenden.
Auch der Befehlssatz, wie man die Bigfoot-Zeichen reinbekommt ins Display, ist da irgendwo angegeben. Insgesamt sind dazu pro Charakter 8 Schreibvorgänge notwendig. Jedesmal enableimpulsgefolgt und so weiter. (Schönes Puzzlespiel! :)

Also, jetzt kommt für die Programmierung folgendes:
Nachdem Du nun einem "neuen" Charakter eine "freie" "ASCII-Code"-Adresse zugeordnet hast,
nehmen wir mal an Hex 01, (der ASCII-Code setzt sich ja aus Fernschreib-Steuercodes zusammen, die nicht alle "Buchstaben" und "Ziffern", bzw. "Satzzeichen" und "Sonderzeichen" enthalten, kann man bis Hex 13 - glaube ich - die Zeichenzuordnung ja anderweitig verwenden), kannst Du den neuen Charakter im Datenübernahmemodus einfach wie einen Textbuchstaben laden lassen, allerdings mit dem Hex- bzw. Binärcode diskret ausformuliert,
denn der Assembler wird jetzt im Assembliervorgang die in Anführungszeichen ' ' gesetzten für ihn "fremden" Buchstaben nicht ummodeln, da die Bigfoots keinem regulären Charakter im ROM zugeordnet sind -logisch.
Jetzt ist es für die korrekte Darstellung der "Bigfoots" aber unbedingt nötig, diese auch richtig zu positionieren. Dazu muß nun vor jeden zu sendenden Charakter im Kommandomodus die jeweilige Display-RAM- Adresse angewählt werden. Für den Anfang also 80, für die Folgezeile (3) C0 und so weiter nach Adresscounter-Schema. (In der Tabelle steht zwar 00 und 40, aber, um den Adressbereich überhaupt anzuwählen, muß zwingend das entsprechende Steuerbit, hier Bit 7, auch gesetzt sein.) Und die richtigen Enables dann.
Dann der Charakter im Datenübernahmemodus. Der Cursor, der intern weiterwirkt, wird so einfach "übertölpelt". Man kann das prinzipiell immer so machen, nur spart man halt Programmieraufwand, wenn der Cursor im Incrementmodus automatisch immer eine Stelle weiterspringt, dazu ist der Cursor auch eigentlich gedacht. Stört hier aber gewaltig.
Auch wenn im Initialisierungs-String der Cursor abgewählt wurde, existiert nur die Auswahlmöglichkeit zwischen Increment- und Decrement-Modus, die dritte Möglichkeit,
also überhaupt keine interne Adressensteuerung, ist nicht vorgesehen. Das entsprechende Flip-Flop wird mal auf Vorwärts- bzw. Rückwärtszählen gesetzt, auf beide Flip-Flop-Ausgänge denselben logischen Pegel zu setzen, geht nicht. Da führt bislang kein Weg vorbei, dieser Adresscounter muß zwingend irgendwie gesetzt werden. Vielleicht wird das ja mal, als Anregung an die Hersteller gerichtet, in die Praxis umgesetzt.

Also, noch etwas, da Du auch "normale" Textbausteine verwendest, störte hierbei das Adresseninkrement des Adresscounters, sprich verkappter Cursor, eigentlich nicht.
Nur, hier wird gemixt. Dazu würde ich empfehlen, jedesmal die Display-Ram-Adresse im Kommandomodus vor jedem zu sendenden Charakter, sei er nun "Normaltext" oder "Bigfoot" einzeln extra zu setzen. So bist Du auf der sicheren Seite und es gibt kein Chaos auf dem Display wie jetzt, woll?


Wohlgemertkt, das ist auch nur ein Beispiel, das unter Umständen nicht eins zu eins direkt verwendet werden kann, jedoch in Analogie umgesetzt, auch bei Dir vom Prinzip her funktionieren müßte.

Nur, wird das Display abgeschaltet, gehen die RAM-Inhalte ja verloren und müssen jedesmal bei Start wieder vom Proggi neu übergeben werden.
Eine fixe Maskenprogrammierung findet also nicht statt.

Übrigens,
im Prinzip sind im oben angegebenen BASCOM-Code diese Überlegungen schon mit enthalten, es fehlen allerdings die hier einzusetzenden Adressendefinitionen und weiteren Modalitäten, die von Fall zu Fall doch ziemlich variieren können.

Viel Spaß noch, wünscht,
Oskar01
 

Anhänge

  • 4-Bit_0708.txt
    6,2 KB · Aufrufe: 6
  • dogm1.png
    dogm1.png
    20,6 KB · Aufrufe: 3
  • dogm2.png
    dogm2.png
    57,6 KB · Aufrufe: 2
  • dogm3.png
    dogm3.png
    55 KB · Aufrufe: 3
So, nach langem suchen und probieren habe ich den Fehler nun endlich gefunden.
Dadurch das es zwei Controller sind muss ich die Sonderzeichen in beide schreiben damit die Anzeige richtig erfolgt.
Vielen Dank an alle für ihre Hilfe.

LG Yves
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)