Displaytec 162C mit KS0070B an Atmega16?

Nicht alles im NET ist korrekt

Hallo @Buhh...
genau auf diesen Net-Beitrag "LCD an STK500 Board im Vierbitmodus" bin ich auch hereingefallen.
Das Ende bei mir letztes Jahr:
Nach kurzer Einschaltdauer Knacken... und Controllerchip raucht ab.
Die Ports waren auch direkt gegen Masse verdrahtet, das Prog passte aber nicht. Satter Kurzschluß. (Deswegen die von mir wärmstens empfohlenen Widerstände). Und ich hatte auch ein separates Netzteil verwendet.

Will nun hoffen, daß Dein Display das gut überstanden hat.

Oben im Prog wurde noch was geändert.

RS muß im Kommandomodus ja stets auf "LOW" stehen. Der "ori"- String ist auch nicht unbedingt nötig da, rem-men wir ihn einfach raus.


So ...unten das aktuelle Prog nochmals


Gruß von Oskar01
 

Anhänge

  • LCD_ATM16x.asm
    9,7 KB · Aufrufe: 10
Hallo zusammen,

genau auf diesen Net-Beitrag "LCD an STK500 Board im Vierbitmodus" bin ich auch hereingefallen.
Das Ende bei mir letztes Jahr:
Nach kurzer Einschaltdauer Knacken... und Controllerchip raucht ab.
Die Ports waren auch direkt gegen Masse verdrahtet, das Prog passte aber nicht. Satter Kurzschluß. (Deswegen die von mir wärmstens empfohlenen Widerstände). Und ich hatte auch ein separates Netzteil verwendet.

Will nun hoffen, daß Dein Display das gut überstanden hat.
@Oskar - den Tip von dir hab ich auch bei meinemersten 4-Bit-Betrieb beherzigt :D

@alle - so kann das gehen wenn man mal ein paar Bauteile sparen will. Aus dem Grund
stehen mir auch immer etwas die Haare zu Berge wenn der Vref vom ATmega mal wieder
direkt an Vcc geschaltet wird. Der arbeitet zwar als auch als Eingang, aber hier steht auch
die interne Referenzspannung an, wenn man sie benutzt. Also Kurzschluß der internen
2,56V-Referenz gegen +5V. Das ist auch nicht gut für den Chip. Vor allem weil man
sich das durch den Multiplexer für die Referenzspannung sparen kann (einfach auf AVcc
umschalten).

Gruß
Dino
 
Probieren geht über Studieren

Hallo allerseits,
hier nun noch ein Test-Video vom LCD-Initialisierungsprogramm, das unten nochmals angehängt wird.

Also:
Änderung:
Jetzt verwendete Quarzfrequenz: 10 MHz (Zeitschleifen angepaßt), so daß es durchaus auch bei den angeforderten 12 MHz laufen müßte.


Panne:
Habe selbst mal probiert,was passiert, wenn der Swap-String fehlerhaft ist:
Dann kommen z. T. Buchstaben und Zeichen aus dem "Kano"-Schriftsatz. Dasselbe Phänomen zeigte sich, wurde ein Enableimpuls bei Label "datenuebernahme" schlichtweg vergessen.
Wir brauchen im Vierbitmodus z w e i m a l Enable!

Werden die Argumente der allerersten Strings "verdreht", passiert folgendes:
Das LCD zeigt am Anfang permanent schwache schwarze Balken und überschreibt diese schwach mit den fehlerhaften Zeichen.
Hier wurde also ganz sicher falsch initialisiert, wenn die ominösen Balken weiterhin sichtbar bleiben:
Der String muß einfach rein - ganz am Anfang - , dann verschwinden diese Balken:


PHP:
lcd_achtbitinit:	; Acht-Bit Init:
;				; dreimal Hex 0x30 bzw. 0x03
push	temp			; ist immer notwendig, 
cbi	daten,	rs		; wenn einmal 8/4-Bit-Modus 
ldi	temp,	0x30; bzw.0x03	; gewechselt wird
out	daten,	temp		; dazu steht RegisterSelect-Bit
rcall	enable			; stets auf "low"
rcall	verz3			; und jedesmal einen Enable-
cbi	daten,	rs		; Impuls toggeln lassen
ldi	temp,	0x30;bzw. 0x03		
out	daten,	temp
rcall	enable
rcall	verz3			; dazwischen kurze Verzoegerung
cbi	daten,	rs
ldi	temp,	0x30;0x03
out	daten,	temp
rcall	enable
rcall	verz3
pop	temp
ret
;
lcd_acht_vier:		; Acht-zu-Vier-Bit-Modus-Wechsel 
;
push	temp
cbi	daten,	rs
ldi	temp,	0x20;bzw. 0x02	; zunaechst nur 4-Bit-Modus,
out	daten,	temp		; untere vier LCD-Port-Bits werden
rcall	enable			; ignoriert, aber immer noch
rcall	verz3			; 8-Bit-Befehlsbreite
pop	temp
ret




Dann, das kann man auf dem Video kaum erkennen, wird die Hintergrundbeleuchtung auf Portbit B3 per Transistor regelmäßig ausgetastet. (Und zwar immer dann, wenn das Label "kommando" aufgerufen wird, weil jetzt der "ori"-String mit Nullen dringeblieben ist.)
Also, erste Austastung: Bei Wechsel der Zeile am Ende vom Text "Das ist ein ... "
.....Positionierung.
Dann analog dazu immer, wenn wieder "positioniert" , Entry-Mode gewechselt wird aus dem laufenden Programm heraus, dann, wenn "Display clear" kommt. Das geht ja nur im Steuerwort-Mode, also über das Label "kommando", wie gesagt. Mit RS auf "Low".
Habe deswegen dahinter eine Verzögerung gesetzt, weil sonst der "Blip" kaum wahrgenommen werden kann. Diese Verzögerung kann später auch rausgeremt werden.

Noch etwas:
Die großen Verzögerungen sind eigentlich nur in der Initialisierung notwendig.
Hinterher reagiert die Textdarstellung im Display auch sehr schnell, so daß ASCII-Zeichen direkt ohne Pufferung vom UART in 9k6 Baudrate dargestellt werden können, blitzschnell.
Und das Ganze o h n e Busy-Flag-Abfrage. Jedenfalls bei dem Displaytech-LCD hier.
Andere LCDs könnten da etwas "träger" sein.

Aber:
"Probieren geht über Studieren", wobei wir beim Thema wären.

Viel Spaß noch beim Angucken des Videos:

http://www.kbra01.de/LCD_4BIN.MPG


Euer Oskar01

P.S.:
Die Änderung des aktuellen Programms beinhaltet nunmehr eine universellere Gestaltungsmöglichkeit der "Variablen".
Also: Die tatsächlich verwendete Portbitbelegung für Steuersignale RS und Enable kann direkt im Direktiventeil vorgenommen werden, ohne, daß das gesamte Programm abgeklappert werden muß.
Dasselbe gilt dann auch für die evtl. noch abzuändernden Zeitschleifenwerte.
Die sind jetzt zwar allesamt auf den Maximalwert eingestellt, können dann, wenn die Initialisierung endlich geklappt hat, noch verkleinert werden.

Ferner wurden die Programmabschnitte für Setzen/Löschen des RS-Bits und die Ausgabe auf den LCD-Ausgabeport so abgeändert, daß die geforderte
Timingbedingung, die Reihenfolge für RS- Daten-Out etc. mit "Sicherheitspausen" besser eingehalten wird. Die Daten stehen dann stabil am Bus an, die Datenübergabezeit hängt dann im Wesentlichen von der Anzahl der "nops" im Unterprogramm "enable" ab.
Hab's ausprobiert und funktioniert hier einwandfrei.
 

Anhänge

  • LCD_ATM16_.asm
    12,2 KB · Aufrufe: 13
Hallo Leute,

hab nun endlich meine Display platinen fertig.
Nur hat sich die Portbelegung wieder geändert.

RS ist auf PD 0
E ist auf PD 1

DB4-7 ist auf PD 4-7
Strom nun auch vom STK.

@Oskar...
könntest du mir kurz sagen wo ich die Datenports in deinem Prog. ändere? RS und E sind ja oben schon in der equ.
 
Hallo @Buuh,
lies den Kommentar im Programm mal durch.
Mit dem Ummodeln des Ausgabeports ist es nicht einfach so getan.
Das hatte ich mir nämlich auch schon überlegt, und hätte es gerne in den Direktiventeil als alternative Anweisungen reingeschrieben.


Also,
schau Dir mal den Kommentar zum Label "datenuebernahme" und "kommando"
an.
Hier siehst Du dann, daß sich auch etwas an der Befehlsfolge ändert,
das kann man nicht im Direktiventeil einfach so mit einer .equ-Anweisung
erreichen. Mit Makros wollte ich nicht gleich anfangen.

Der "swap"-String steht jetzt am Anfang, müßte bei der neuen Portzuweisung dann wieder wie ursprünglich
erst im zweiten Rutsch hinein. Das ist der Knackpunkt.


Nimm Dir mal 'was Zeit, wirst sehen, das kriegen wir schon hin.



Tausche die jetzt eingegebenen "Argumente" gegen die ausgeremten aus.



Gruß von Oskar01
 

Anhänge

  • LCD_ATM16_x.asm
    11,5 KB · Aufrufe: 7
Hi,
Nimm das neueste File.
Schau vorher nochmal das ASM File etwas genauer an.
Bis dann

Gruß von Oskar01
 
Hallo,

nach dem ich heute morgen die Ports nochmal auf eigene Faust geändert hab, läuft jetzt auf beiden Displays die Testfile von Oskar weitestgehend normal.
@Oskar ist es normal das im 2.Teil (text von rechts nach links) die 2. Zeile nur zur hälfte angezeigt wird?
ist nicht weiter schlimm viel mir jetzt nur kurz auf :D
 
Hallo @ Buhh,
erstmal herzlichen Glückwunsch,
es klappt.

Dann zu Deiner Frage,
ja, es ist so richtig.
Die zweite Zeile kommt im Rückwärtsgang
mit der "falschen" Positionierung.
Das soll zeigen, daß die Positionierungen, bzw. das Locate sehr
wichtig ist.


Trotzdem noch viel Spaß mit dem LCDisplay.


Gruß von Oskar01
 
Programmierkünste gefragt

Hallo @ Buhh,
wir könnten ja ein Mini-Projekt aufmachen,
und mal zeigen, was mit den LCDisplays alles so möglich ist.
Also in ASM programmieren.
Beim "Entry Mode Set" alle möglichen und unmöglichen Kombinationen durchspielen etc.

Hmmm?

Gruß von Oskar01
 
Hallo Oskar,

das hört sich zunächst mal gut an und würde sicher einigen helfen.
Nur steckt ja meine LCD Erfahrung auch noch in den Kinderschuhen...

Aber wenn du mir sagst wie kann ich dir sicher irgendwie helfen :D
 
OK

Hallo @Buhh...,
danke für Deine Bereitschaft, zu experimentieren.
Das Ganze wird ja erst dadurch interessant, weil ja offensichtlich nicht alle LCDs,
ich meine hier die "üblichen", also von 1x8 bis 4x20 - nicht die graphischen -
gleich "reagieren".
Hätte die Idee, das kleine Testprog in der Endlos-Schleife noch zu erweitern, dann vielleicht noch
der große Kick mit dem galoppierenden Pferd, was ich irgendwo mal gesehen habe, wovon - natürlich - der Code mal wieder hinter dem Berge gehalten wurde.
Da gibt es noch welche, die mit Extra-Controllern und den Escape-Sequenzen seriell arbeiten. Da sieht der ASM-Code für die MCU aber ganz anders aus.


Bleibe dran,

so long für heute,

Gruß von Oskar01
 
Hi,
ich habe auch veruscht mein Display anzusteuern.
Nur bis jetzt funktioniert die Initialisierung nur wenn ich einfach wil irgendwelche Zustände an den Ports ausgebe, mit Zufallszahlen, wie hier schon beschrieben.

Ich habe den asm Coder der hier ist auch verwendet, nur hat bis jetzt keiner funktioniert.

Woran kann das liegen?

P.S.: habe auch einen Meaga16 takt und port habe ich angepasst.
Ist auch der Kontroller KS0070b

hoffe ihr könnt mir helfen
 
Hi Spyro,

Hi,
ich habe auch veruscht mein Display anzusteuern.
Nur bis jetzt funktioniert die Initialisierung nur wenn ich einfach wil irgendwelche Zustände an den Ports ausgebe, mit Zufallszahlen, wie hier schon beschrieben.
das ist ja wie das Hornbacher Schießen :rolleyes:
Einfach mit der Schrotflinte draufhalten. Eine der Kugeln wird schon treffen :D
Da solltest du schon etwas systematischer und logischer vorgehen ;)

Ich habe den asm Coder der hier ist auch verwendet, nur hat bis jetzt keiner funktioniert.

Woran kann das liegen?
Stell doch mal deinen kompletten Code hier rein. Dann kann mal jemand
drüberschauen und sieht evtl wo es nicht paßt.

P.S.: habe auch einen Meaga16 takt und port habe ich angepasst.
Ist auch der Kontroller KS0070b

hoffe ihr könnt mir helfen
Helfen können wir (wir versuchen es wenigstens) ;) Aber Gedankenlesen
können wir leider noch nicht :eek:

Gruß
Dino
 
Systematisch vorgehen....

Hallo @Spyro01....,

wie @dino...schon sagte, ist der Begriff "Zufallswerte" wohl hier nicht der, welcher zum Ziele führt.

Als "Zufall" im digitalen Bereich kann man nun "Randomize" annehmen,
hier wird schon aus einer gegebenen Auswahl von Elementen eine zeitlich variierte Auswahl vorgenommen, die sich auch wiederholen kann. Im üblichen Sprachgebauch ist dies aber kein Zufall von völlig freier Wahl der Elemente.

Also,
systematische Vorgehensweise ist hier angsagt.

Leider muß man wohl die eine oder andere Stunde an "Studium" damit verbringen, um ein Problem anzugehen und schlußendlich zu einer Lösung zu kommen.


Habe - ohne Anspruch auf Vollständigkeit - einmal die wichtigsten Dinge im Zusammenhang mit einer Initialisierung von LCDs zusammengetragen.

Schau mal hier:

http://www.kbra01.de/lcd_2.htm


Beste Grüße,

Euer Oskar01

P.S.: Wenn nun spezielle Probleme auftauchen, bitte nochmals posten.
Wir führen gerne Schritt für Schritt durch den Dschungel.

Der verwendete Code und die Hardware müßte aber noch bekanntgemacht werden, sonst besteht kaum eine Chance, gezielt anzusetzen.

Bei BASCOM gibt es hier Experten, für C und ASM auch.
Bin mehr auf der ASM-Fraktion angesiedelt.
 

Ü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)