Forum: Mikrocontroller und Digitale Elektronik EA DIP162-D / STK500 / ATmega8 initialisierung


von Attila (Gast)


Angehängte Dateien:

Lesenswert?

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!

von Harald M. (mare_crisium)


Lesenswert?

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

von Attila (Gast)


Angehängte Dateien:

Lesenswert?

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 :-(

von Harald M. (mare_crisium)


Lesenswert?

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

von Attila (Gast)


Angehängte Dateien:

Lesenswert?

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

von Harald M. (mare_crisium)


Lesenswert?

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.

von Attila (Gast)


Lesenswert?

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! :-)

von Harald M. (mare_crisium)


Lesenswert?

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 ;-).

von Attila (Gast)


Lesenswert?

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

von Harald M. (mare_crisium)


Lesenswert?

Attila,

werd' mir das Datenblatt zu Gemüte führen. Prost!

Ciao,

mare_crisium

von Attila (Gast)


Lesenswert?

Hat noch jemand eine Idee? Ich bin mit meinem Latein am Ende.

von Attila (Gast)


Lesenswert?

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?

von Harald M. (mare_crisium)


Angehängte Dateien:

Lesenswert?

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

von Harald M. (mare_crisium)


Lesenswert?

Attila,

ausserdem wolltest Du hier

"...
sbi    PORTD,2        ;R/W=0
..."
sicher schreiben
"...
cbi    PORTD,2        ;R/W=0
..."

Ciao,

mare_crisium

von Attila (Gast)


Lesenswert?

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!

von Attila (Gast)


Lesenswert?

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?

von Harald M. (mare_crisium)


Lesenswert?

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

von Attila (Gast)


Angehängte Dateien:

Lesenswert?

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ö

von Harald M. (mare_crisium)


Lesenswert?

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

von Attila (Gast)


Lesenswert?

Harald!

Ja! Hat richtig Bock gemacht und wir können und sollten uns gerne 
austauschen. Wie am besten?

von Attila (Gast)


Lesenswert?

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!

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.