Forum: Mikrocontroller und Digitale Elektronik EA DOGM162 Problem


von Bruno M. (brumay)


Lesenswert?

Hallo,

vorweg: Ich weiß, daß dieses Thema schon oft behandelt wurde und ja, ich 
habe die diversen Beiträge gelesen!

Ich wollte bei einem Projekt das genannte Display mit einem ATmega 8 
einsetzen und versuche schon seit Tagen die Initialisierung 
hinzubekommen. Anfangs nur mit Hilfe der Datenblätter vom Display und 
vom Controller und später mit den diversen Codes im Forum. Allerdings 
beschränke ich mich im wesentlichen auf ASM.
Da alles erfolglos war habe ich
- zwei neue Displays gekauft
- den ATmega 8 gewechselt
- die Steckbrettschaltung in eine fest verdrahtete Version geändert.

Nach vielen vergeblichen Versuchen hatte ich dann gestern ein erstes 
Lebenszeichen mit dem Code von Bernhard (5V, 4Bit)

 Beitrag "5V 4Bit - DOGM162 DOGM081 EA DOGM163 Initialisierung Beispiel ATmega8 Assembler"

Nachdem es schon spät war habe ich alles unverändert gelassen und nur 
ausgeschaltet.
Als ich dann heute wieder eingeschaltet habe, tat sich wieder nichts.
Nach diversen Versuchen bin ich nun dahinter gekommen, daß das Display 
nur nach dem Flashen startet. Oft auch erst beim 2. Mal.

Das ist natürlich keine Lösung und ich frage mich was die Ursache sein 
könnte!
Ich habe vor der Initialisierung auch schon 1s Pause eingelegt, aber 
ohne Änderung.

Hat jemand einen Tip?

von Rick (rick)


Lesenswert?

Bruno M. schrieb:
> Hat jemand einen Tip?
Ja,
1. den verwendeten Code zeigen (Anhang),
2. den verwendeten Schaltplan anhängen (pdf),
3. die aufgebaute Schaltung zeigen (Foto),
4. das Datenblatt zum Display verlinken,
5. schreiben, welche Messmittel (Oszilloskop/Multimeter/Logikanalysator) 
zur Verfügung stehen.

von Bruno M. (brumay)


Lesenswert?

Rick schrieb:
> Bruno M. schrieb:
>> Hat jemand einen Tip?
> Ja,
> 1. den verwendeten Code zeigen (Anhang),
> 2. den verwendeten Schaltplan anhängen (pdf),
> 3. die aufgebaute Schaltung zeigen (Foto),
> 4. das Datenblatt zum Display verlinken,
> 5. schreiben, welche Messmittel (Oszilloskop/Multimeter/Logikanalysator)
> zur Verfügung stehen.

Code, Schaltplan sind im aufgeführten Link, die Schaltung entspricht dem 
Schaltplan, der Hinweis auf den Controller findet sich im Link.

Signale habe ich mit einem analogen Oszi geprüft. Ich kann kein Problem 
erkennen.

von Hmmm (hmmm)


Lesenswert?

Bruno M. schrieb:
> Nach diversen Versuchen bin ich nun dahinter gekommen, daß das Display
> nur nach dem Flashen startet. Oft auch erst beim 2. Mal.

Mit welchem Takt läuft der Controller?

von Bruno M. (brumay)


Lesenswert?

Hmmm schrieb:
> Bruno M. schrieb:
>> Nach diversen Versuchen bin ich nun dahinter gekommen, daß das Display
>> nur nach dem Flashen startet. Oft auch erst beim 2. Mal.
>
> Mit welchem Takt läuft der Controller?

Wie von Bernhard angegeben: 1 MHz

von Hmmm (hmmm)


Lesenswert?

Bruno M. schrieb:
> Wie von Bernhard angegeben: 1 MHz

Dann solltest Du Dir das mal mit einem Logic Analyzer (billiger 
Saleae-Clone reicht) ansehen.

Dass es mal funktioniert und mal nicht, klingt nach falschem (zu 
schnellem) Timing.

von Bruno M. (brumay)


Lesenswert?

Hmmm schrieb:
> Dann solltest Du Dir das mal mit einem Logic Analyzer (billiger
> Saleae-Clone reicht) ansehen.

Das kann ich mal versuchen! Ich meine, ich habe noch irgendwo einen 
vergraben.

von S. L. (sldt)


Lesenswert?

Wie kommt Bernhard S. auf die 10 us, bei einem CPU-Takt von 1 MHz?
1
; rcall 3 Takte                                                                 
2
;  ret  4 Takte                                                                 
3
;                                                                               
4
...
5
...
6
WAIT_10us:
7
ret

von Ob S. (Firma: 1984now) (observer)


Lesenswert?

S. L. schrieb:
> Wie kommt Bernhard S. auf die 10 us, bei einem CPU-Takt von 1 MHz?
>
>
1
> ; rcall 3 Takte
2
> ;  ret  4 Takte
3
> ;
4
> ...
5
> ...
6
> WAIT_10us:
7
> ret
8
>

Sei doch nicht so penibel. Bloß 30% zu kurz. Das stimmt doch fast ;o)

von Bruno M. (brumay)


Lesenswert?

S. L. schrieb:
> Wie kommt Bernhard S. auf die 10 us, bei einem CPU-Takt von 1 MHz?

Das ist zwar ein guter Hinweis, aber eine Änderung hat leider nichts 
gebracht.
Ich habe mir in der Zwischenzeit auch noch mal die Timing-Vorgaben im 
Datenblatt angesehen. Eigentlich hat Bernhard überall sehr viel Luft 
gelassen:
                                Soll         Ist
- vor Initialisierung          >40ms        100ms
- nach dem ersten Schritt       >1,6ms       10ms
- danach jeweils               >26,3us        1ms
- nach Initialisierung         >26,3us      100ms + 1s
bleibt noch das toggeln von EN, aber auch da ist mit 50us genug Zeit 
eingebaut.

von Hmmm (hmmm)


Lesenswert?

Bruno M. schrieb:
> - danach jeweils               >26,3us        1ms

Clear Display und Return Home brauchen mindestens 1.08ms.

von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Bruno M. schrieb:

> Ich habe mir in der Zwischenzeit auch noch mal die Timing-Vorgaben im
> Datenblatt angesehen. Eigentlich hat Bernhard überall sehr viel Luft
> gelassen:
>                                 Soll         Ist
> - vor Initialisierung          >40ms        100ms

Das ist oft ein kritischer Punkt, wenn man sein Gesamtsystem nicht 
überblickt. Was passiert auf den Leitungen, bevor der zuständige Treiber 
die Kontrolle darüber übernimmt?

Hier hauen gerne mal schlecht programmierte Bestandteile der ohne Sinn 
und Verstand zusammenkopierten Software rein. Oder auch genauso ohne 
Sinn und Verstand designte Hardware...

Bei der Identifizierung eines Problems in diesem Bereich hilft übrigens 
ein LA nicht. Da muss es schon wirklich ein Oszi sein.

von S. L. (sldt)


Lesenswert?

> ... daß das Display nur nach dem Flashen startet.
> Oft auch erst beim 2. Mal.

Bernhard S. hat das LCD auf den Port B gelegt - über diesen läuft aber 
auch das Programmieren (Flashen). Was passiert, wenn stattdessen Port D 
benutzt wird?

von S. L. (sldt)


Lesenswert?

Tja - ich nehme einen ATmega16 und ein uraltes 2*16 LCD, und es 
erscheint "HALLO", mit völlig unverändertem Programm.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Im 5V 4-Bit Modus ist Vin mit Vout zu verbinden und dort 5V 
einzuspeisen. Das DOGM163 läuft bei mir völlig problemlos, ich benutze 
aber SPI und 3,3V Betrieb.

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Bruno M. schrieb:
> Allerdings
> beschränke ich mich im wesentlichen auf ASM.

Ja, man kann sich auch selber Knüppel zwischen die Beine werfen.
Was stört Dich an zuverlässig funktionierenden C-Beispielen?

Da die Leitungen auf dem Glas sehr hochohmig sind, sollte man Code mit 
Busy Rücklesen nicht benutzen, sondern nur welchen mit Delays.

von Bruno M. (brumay)


Lesenswert?

Erstmal danke für das Interesse und die guten Ratschläge.

Ich habe den Fehler gefunden!
Ist mir zwar peinlich, aber da muß ich jetzt durch!

Da ich übernommene Codes auch verstehen möchte, schreibe ich sie 
grundsätzlich neu, auch wenn ich nichts ändern will. So auch hier.
Dabei habe ich aus Versehen das RS Signal vor der Initialisierung nicht 
auf low gesetzt. So nahm das Drama seinen Lauf!

von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Bruno M. schrieb:
> Erstmal danke für das Interesse und die guten Ratschläge.
>
> Ich habe den Fehler gefunden!
> Ist mir zwar peinlich, aber da muß ich jetzt durch!
>
> Da ich übernommene Codes auch verstehen möchte, schreibe ich sie
> grundsätzlich neu, auch wenn ich nichts ändern will. So auch hier.
> Dabei habe ich aus Versehen das RS Signal vor der Initialisierung nicht
> auf low gesetzt. So nahm das Drama seinen Lauf!

Also, wie von mir vermutet: Das Problem lag vor der eigentlichen 
Initialisierung.

Oder anders ausgedrückt: die Intialisierung ist offensichtlich 
unvollständig. Wenn der Zustand von RS eine Rolle spielt, dann hat die 
Initialisierung sich natürlich auch um dieses Signal zu kümmern.

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.