Hallo!
Zunächst noch:
1) STK läuft mit externem 8 MHZ Quarz
2) Initialisierungsroutine vom Datasheet des EA DIP162 übernommen und
BEIDE Varianten probiert: Einmal mit der in dem Tutorial empfohlenen 3
mal 00110000 (fals das Gerät schon im 4 bit modus ist) und auch ohne
probiert.
3) Verkabelung mehrfach geprüft und auch, wegen Fehlern, umgelötet und
daher alle Pins einzeln eingeschaltet und mit dem Multimeter geprüft.
Auch die Benachbarten Pins geprüft. (Übersprechen)
4) Eine Woche das Forum umgegraben aber entweder wurde ein anderes
Problem besprochen oder die links waren veraltet.
5)Pins in der Dokumentation vom Atmega8 gecheckt ob da vielleicht mit
dem STK eine kollision vorherscht.
Und? Ja nix! Es passiert nix!
Um sich ein bild von der gradezu lächerlichen Situation zu machen: Das
Programm war mal für einen 8 bit LCD ausgelegt und spuckte Daten eines
GPS aus.
1) Es ist mir ein Rätsel wie ich das denn bitteschön hinbekommen habe
wenn ich an einer initialisierung KLÄGLICH scheiter.
2) Und jetzt kommts: Als ich das etwas umgemodelte 8 bit programm mit
falscher (!!!!) Belegung von Pin 4-7 startete passierte etwas. Nichts
was nachvollziehbar war aber immerhin waren lustige Anfürungsstriche auf
dem ganzen Display verteilt und der Cursor blinkte mal hier und mal da.
Das aber nur am Rande. Es könnte ja jemanden amüsieren. ;-)
Nach einer starken Beruhigungstablette und 2 Bier bin ich nun in der
Lage dieses posting zu erstellen und bitte: (Wenn alle mit dem Lachen
oder auch mit den genervt verdrehten Augen fertig sind)
Schaut doch bitte mal drüber!
Vielen Dank!
Attila,
der vermutlich entscheidende Fehler ist die fehlende Initialisierung von
PORTD. Irgendwo musst Du dem armen ATmega erklären, welche Pins Ein- und
welche Ausgänge sein sollen. Auch sonst gibt's an Deinem Programm noch
allerhand zu verbessern: Wenn Du jemals Interrupts verwenden willst,
dann solltest Du schon jetzt die Interrupttabelle einstellen (siehe
Datenblatt Seite 44). Dein Programm funktioniert momentan nur, weil
darin noch keine "sei"-Anweisung vorkommt.
Ciao,
mare_crisium
Harald!
Aua aua was für ein Fehler! Peinlich! Daran liegt es aber leider nicht.
Die Mängel in diesem Programm sind mir sehr bewusst. Ich
reduziere/lösche halt, wenn ich nicht weiterkomme ALLES, was ich im
Moment nicht brauche und baue das "Schloss" lieber von vorne wenn das
"Fundament" steht.
Nachtrag: Das Display "lebt" d.h. Kontrast lässt sich verstellen.
Anbei der korrigierte Code. Trotzdem tut sich nichts :-(
Attila,
ja, mit dem Rückzug aufs Allernotwendigste hast Du allerdings sehr recht
;-). Ich hab' gerade nochmal meine eigene Bibliothek angeguckt. Mein
Display hing an einem ATmega16 mit 16MHz. Da habe ich zwischen
LCD_ENABLE:=1 und LCD_ENABLE:=0 insgesamt 11 "nop"s eingeschoben.
Stimmen Deine Fuses ("Ext. Crystal/Resonator Medium Freq....") und die
Jumper (Kapitel 3.7.4 des STK500-Handbuchs, Seite 3-18)? Ansonsten spiel
doch mal an den "nop"s.
Ciao,
mare_crisium
Harald!
Ich hab mal mehr nop s reingemacht. Vergiss aber bitte nicht: Das Ding
lief mal! Mit 3 nops und die Anschlüsse 4-7 zu 7-4 vertauscht! Also da
kam nur Kraut und Rüben aber es hat sich wie ein Display benommen! Meine
Fuses sind glaube ich ganz ok: Ext. Clock, Startup time:6 CK+64ms. Hat
bislang bei allen möglichen Applikationen funktioniert.
Vielleicht werden ja jetzt die Beruhigungspillen verständlicher ;-)
Attila,
wem sagst Du das!!! Diese Art von Krisen mit der lieben Hardware kennt
jeder MC-Liebhaber :-D. Aber da muss man durch.
Wenn das mit den vertauschten Leitungen was gebracht hat, dann versuch'
doch mal das Display an PORTC zu hängen. Vielleicht hängt es ja mit den
ominösen "alternative functions" zusammen. Mir ist schon vorgekommen,
dass manche Pins nicht reagierten, wenn der ATmega im ST500 steckte.
Stecke ich ihn - ohne ihn umzuprogrammieren - in mein selbstgebautes
Board, dann sind sie mit einem Mal wieder aktiv. Deshalb probier's mal.
Ciao,
mare_crisium
Edit: Ich sehe gerade: PORTC hat nicht genug Pins - also versuch' mal
PORTB.
Edit: Geht auch nicht, weil da ja der Quarz dran hängt :-(. Kein guter
Rat.
Harald!
Also: Genau auf diesem STK500 mit genau diesem ATmega8 und genau diesem
LCDisplay und genau dem PORTD und gleichen fuses hat das Display wie ein
Display funktioniert wenn: (Festhalten bitte!)
1)Die Anschlüsse die an 4-7 dransollen falsch rum , also 7-4
angeschlossen waren.
und
2) Der Code murks war d.h. teilweise noch für 8 bit ausgelegt und nicht
korrigiert war. Also: Zufallstreffer die ich aber absolut nicht mehr
nachvollziehen kann.
Ich kann es noch genauer beschreiben: Als die Pins 4-7 noch vertauscht
waren kam nach der init nix. Schrieb man dann noch ein "A" rein (8 bit
modus, Reste des ursprünglichen Programms!) blinkte der Cursor im
UNTEREN (!!!!!!!!) Displayteil links. Bei "Ö" in der Mitte und bei "B"
unten Rechts im Display. Nur der Cursor wohlgemerkt! Alles klar? ;-) ;-)
;-)
Ich hol mir nochn Bier! Sonst halt ich das nicht aus! Unfassbar! :-)
Attila,
neuer Versuch: Weil das mit den vertauschten Leitungen was gebracht hat
- kann es sein, dass das Display die Datenbits im unteren Nibble
erwartet? Also statt "ldi temp, 0b00110000" mal "ldi temp,
0b00000011" schreiben.
Die dreimal Enable am Anfang musst Du wieder aktivieren - sonst geht gar
nix.
Ciao,
mare_crisium
Edit: Und sach' ma' den Displaytyp. Ich würde gern mal ins Datenblatt
gucken ;-).
Harald!
Um den vertauschten Leitungen gerecht zu werden müsste ich ja statt
00110000, 11000000 schreiben ne? ;-) Aber ich werde deinen Vorschlag auf
jeden Fall ausprobieren. Man erlbt immer die lustigsten Sachen!
Die 3 mal 00110000 sind ja nur für den Fall das man den Zustand des
Displays nicht kennt! Bei einem frisch eingeschalteten und somit im 8bit
Mode arbeitenden braucht man die 3 mal nicht!
Es ist ein EA DIP162 DN3LW
http://www.lcd-module.de/pdf/doma/blueline-w.pdf
Schau mal da die initialisierungsbespiele an. Da ist nichts mit 3 mal
was abschicken. Es ist mir aber auch egal wenn man es reintut.
Hauptsache es läuft! ;-)
Ich werde mich jetzt dem Bier frönen ;-) Ich hoffe wir können morgen
weitermachen! :-)
cheers
Gesammte Werkstatt auseinandergebaut und wieder zusammengesteckt.
Alle Störgrößen wie Lautsprecher,Kabel etc. aus dem Weg geräumt.
Alle Anschlüsse und Spannungen überprüft.
Altes 2*8 Display angeschlossen.
Altes Programm was dieses Display im 8 bit mode angesteuert hat (und
funktionierte) hoch gefahren.
ISP Mode gecheckt
Alle Fuses gecheckt.
Geht nicht! Nur der schon oft besagte Balken.
Ob ne Therapie wohl hilft? Oder ein anderes Hobby?
Attila,
im Anhang ist das Datenblatt für den KS0070B-Controller von Samsung. Ich
nehme stark an, dass der (oder ein Vergleichstyp) auch in Deinem Display
werkelt. Die Befehle sind hier ausführlicher beschrieben als im
Datenblatt des Displays (ab Seite 17). Vllt liefert das einen
Anhaltspunkt?
Ciao,
mare_crisium
Harald!
Vielen Dank, es ist tatsächlich sehr schön geschrieben gab mir
allerdings auch keinen Anhaltspunkt.
Auch was das R/W betrifft hast Du natürlich recht. Ich habe es geändert
aber es hat sich , erwartungsgemäss, nichts geändert.
Ich kann mit der Symptomatik nichts anfangen: Meine 8 bit applikation
mit 2*8 Display vom gleichen Hersteller funktioniert ja plötzlich auch
nicht. Hätte übrigens bei durchsicht des vor einem halben Jahr
erstellten Codes garnicht funktionieren dürfen!
Ich glaube das ist der Knackpunkt hier: Ich bin froh das ich mir nicht
ein Oszilloskop, Netzteil und Tischmultimeter gekauft habe. Ich erkenne
nämlich das ich offensichtlich keine Ahnung habe und bisher wohl nur
Zufallstreffer gelandet habe.
Anders lässt sich die Situation hier nicht erklären!
Hab nochmal das Programm hochgefahren was mir vor 2 Tagen brav GPS
Koordinaten auf dem 2*8 Display ausgegeben hat.
Natürlich funktioniert es nicht. Man sieht nur acht Balken (abhängig vom
Kontrast)
Könnte das Display gegrillt sein? Also somit alle meine 3 Displays? Und
warum? Wie grillt man ein Display? Würde es denn dann überhaupt noch was
zeigen?
Attila,
nee, nu mal' mal nicht gleich so rabenschwarz! Meiner Erfahrung nach
liegt die Ursache für 80-90% der Fehler, wie Du gerade einen vor der
Brust hast, in der Software. Hardware zu grillen ist bei den modernen
Bauteilen heutzutage gar nicht so einfach.
Dass der Fehler mit der "sbi"-Anweisung nicht ausschlaggebend sein kann,
hatte ich schon geahnt. Du verwendest ja Bits 1-3 für die
Steuerleitungen. Also werden RS und R/W jedesmal auf Null gesetzt, wenn
Du das Kommandobyte "0b00100000" in den Port schreibst. Was machst Du
übrigens mit PORTD.0?
Ciao,
mare_crisium
Harald!
Das 2*8 Display runtergerissen. Das EA DIP162 wieder drangemacht und
siehe da: Ich sehe einen blinkenden Cursor.
Normalerweise müsste ich jetzt Freudentänze veranstalten. Es gelingt mir
aber nicht wiel ich ABSOLUT KEINE AHNUNG habe wieso das jetzt plötzlich
geht??????? Anbei der aktuelle Code.
Richtig! Die Leitungen 1-3 werden bei jedem Befehl auf 0 gesetzt, daher
muss ich auch bei der Ausgaberoutine aufpassen dass ich nicht RS auf 0
lasse, sondern nach der Ausgabe an den Port RS und E auf H setze.
PORTD,0 soll irgendwann (seufz) mal mit RS232 gefüttert werden.
Damit Du weisst was ich vorhabe: Das ganze soll dann auf einem ATmega 32
laufen:
1) Ein GPS auslesen (Hab ich schon als Routine fertig)
2) Ein Modellbau-Servo steuern(Hab ich auch schon fertig)
3) Die Position auf einem Display zeigen (Ich dachte ich hätte das
fertig ;-)))
Am Ende wird es ein Boot was auf einem See ein viereck abfährt. Es ist
so eine Art Wette ;-)
Schonmal vielen Dank für deinen support! Spitze!
tschö
Attila,
prima, dass Du jetzt wieder eine funktionierende Kombination hast.
Schade, dass wir den Fehler nicht gefunden haben. - Interessante
Anwendung, die Du da vorhast. Wenn Du Interesse hast, können wir uns mal
über die Kursregelung unterhalten ;-). Das Viereck muss ziemlich gross
sein - GPS ist nur auf ca. 10m genau. Damfino
(http://members.aon.at/wstocke6/page_1_1.html) benutzt GPS deshalb nur
eingeschränkt für die Navigation seines Rasenmähers ;-).
Hat Spass gemacht,
mare_crisium
Ach so: Was die Genauigkeit von GPS betrifft: ich stimme Dir nicht zu.
Seitdem der Bill die "selective availability" ausgeschaltet hat geht es
unglaublich gut. Hab sehr viel mit GPS zu tun und staune täglich
Bauklötzchen wie genau das eigentlich ist. Ausserdem 10 meter auf einem
See? Wen juckt es? Es soll ja nur ein Viereck gefahren werden!