Forum: Mikrocontroller und Digitale Elektronik Nach Reset macht das Display nicht was es soll


von matze (Gast)


Lesenswert?

Hallo,

Eine Frage. Ich habe ein kleines Programm für den atmega8 in assembler 
geschrieben. Dabei nutze ich ein Standart 16x2 Display für die 
Textanzeige. Ich habe außerdem einen Resetknopf eingebaut. Nun tritt 
folgendes Problem auf: wenn ich resete fumktioniert das Display nicht 
mehr richtig. D.h. konkret nur die erste Zeile wird beschrieben und nur 
in hohem Kontrast. Dieser Fehler ist auch beim Programmieren manchmal 
aufgetreten, wenn das ich noch an der Displayinitialisierung 
rumgebastelt hab oder ähnliches.

Das merkwürdige ist dabei: Ich dachte, dass beim Reset im Prinzip der 
Controller einfach neu gestartet wird von Anfang an. Insofern müsste es 
ja das gleiche sein wie wenn ich das ganze Gerät abschalte und wieder 
anschalte. Dann tut das Display nämlich was es soll.

Kommt dieses Problem jemandem bekannt vor?

Gruß und vielen Dank

Matze

von Analog (Gast)


Lesenswert?

Sind irgendwelche Datenleitungen des Displays gleichzeit auch 
Programmierpins ? MISO,MOSI,SCLK ... dann steck mal den Programmer aus.

von Magnus Müller (Gast)


Lesenswert?

> Kommt dieses Problem jemandem bekannt vor?

Ich glaube ja.

Gruß,
Magnetus

von holger (Gast)


Lesenswert?

>> Kommt dieses Problem jemandem bekannt vor?

>Ich glaube ja.

Mindestens zwei Fragen pro Tag ;)

von matze (Gast)


Lesenswert?

es ist kein programmer drin. das problem ist, dass ich eine eigene 
platine erstellt habe, bei der dieses problem nun das erste mal 
auftritt. bei einer modulplatine auf der ich die schaltung 
zusammengesteckt hatte hatte das problem nicht. ich hab schon überprüft 
ob ich den reset-taster vielleicht irgendwie falsch gelegt habe oder der 
pull-up-widerstand falsch ist oder sonst was. nur irgendwie gehen mir 
langsam die lösungen aus. ich hab auch die controller durchgetauscht um 
zu sehen ob es an der software liegt aber irgendwie nicht.

gut wäre wenn ich einfach nen kleinen tip bekomme wo ich suchen könnte - 
scheinbar liegt es ja an der hardware. wenn der reset-taster richtig 
belegt ist bleibt ja nur noch die beschaltung. was kann ich da falsch 
machen, welche pins sollte ich prüfen. ich verwende das LCD 162 DIP 
(Artikelnummer Reichelt) mit dem Standartcontroller.

von holger (Gast)


Lesenswert?

>scheinbar liegt es ja an der hardware.

Stimmt deine Tastatur gibt nur noch kleine Buchstaben aus.

By the way: Deine Hardware kennt hier leider keiner !

von Analog (Gast)


Lesenswert?

Prüf mal Dein Timing, Signalleitungen bei der alten Steckbrett-Variante 
länger ? Mach mal Dein Protokoll für das Display entwas langsamer - paar 
NOPs rein!

von Marko H. (vitis01)


Lesenswert?

auch die initialisierung könnte fehlerhaft sein, schau mal dein
timing im oszi an.
was die hardware angeht kann man leider nix sagen ohne
schaltplan.

von Analog (Gast)


Lesenswert?

Vielleicht bist Du auch zu schnell oben mit Deinem Mega8, mach mal ein 
Delay - 10ms- an den Anfang Deiner Main-Routine.

von holger (Gast)


Lesenswert?

>Vielleicht bist Du auch zu schnell oben mit Deinem Mega8, mach mal ein
>Delay - 10ms- an den Anfang Deiner Main-Routine.

Vieleicht schliesst er mal ein paar 100nF Kondensatoren
in seiner Schaltung an. Aber das ist nur geraten.

Schaltung: Unbekannt !
Software:  Unbekannt !

Was soll man dazu noch sagen ?

Rate mal mit Rosental ?

von Analog (Gast)


Lesenswert?

tja holger (mal wieder). Wir jungen Leute brauchen halt nicht soviel 
Info wie die Alten um ein Problem zu lösen ...

von Otto (Gast)


Lesenswert?

vermutlich hängt es damit zusammen, dass das Display nicht "resettet" 
wird und der Controller "mitten im Laufen" abgewürgt wird - unter 
Umständen sendet er dabei auch "versehentlich" irgendwelche Kommandos.

Gruss Otto

von Analog (Gast)


Lesenswert?

@holger.

Hier geht es klar um ein Timing-Problem, da es mit einem anderen 
(Schaltungstechnisch) gleichen Aufbau ja funktioniert. Außerdem brauchst 
Du ja nix zu sagen

von Analog (Gast)


Lesenswert?

@holger

hab übrigens außer blöden Kommentaren von Dir noch nie in einem Beitag 
etwas hilfreiches gelesen.

von matze (Gast)


Lesenswert?

erst mal vielen dank, werde mir das timing mal genauer anschauen und ein 
bisschen am programm rumbasteln.

aber mal im ernst - das ist schon ein merkwürdiges forum hier. bei 
vielen anderen foren (ein gutes cad-forum das ich kenne z.b.) ist es so: 
ich schreibe eine frage und ein paar leute äußern ihre ideen dazu und 
geben vielleicht noch den hinweis welche informationen ihnen noch 
weiterhelfen oder sie posten einen link der mit dem thema allgemein zu 
tun hat. hier läuft es so ab: ich poste eeine fragt und bekomme dann 
eine vielzahl von antworten und in jeder zweiten wird prinzipiell 
erstmal rumgestänkert, kritisiert, vom thema abgewichen oder sonstwas. 
das ist schade, denn einige hier scheinen sich echt um die frage kümmern 
zu wollen.

z.b. "Analog": der schreibt einfach was ihm dazu einfällt. daraufhin 
muss "magnus müller" erstmal einen beitrag schreiben der im prinzip 
völlig überflüssig ist und nur den thread unnötig vergrößert - hast du 
zu viel zeit?  "holger" antwortet auch prmt darauf - was macht ihr 
eigendlich den ganzen tag? "marco hörner" gibt dann einen weiteren guten 
tip und bittet indirekt um mehr informationen - super! dann macht 
"holger" schon sein drittes unnötiges posting an diesem tag in einem 
thread innerhalb einer halben stunde - was für eins schwachsinn.


naja. vielen dank den paar sehr hilfreichen usern, denn jetzt habe ich 
eine quelle an der ich suchen kann und hoffentlich zu einer lösung 
kommen kann. den anderen kann man nur sagen: sucht euch nen job.

gruß

matze

von [Frank] (Gast)


Lesenswert?

@matze

das kenne ich auch. Die Ursache liegt meines Erachtens darin, das der E 
Pin des Displaycontrolers (als einziger Eingang) keinen Pullup besitzt. 
Während Reset hängt der Pin in der Luft. Ein 100K Widerstand nach Masse 
hat das Problem gelöst.

Gruss

Frank

von Bensch (Gast)


Lesenswert?

Der Beschreibung nach (wenn sie denn stimmt..) sieht es so aus, dass der 
Displaycontroller beim Reset in einem Zustand hängt, in dem er sich 
nicht richtig konfigurieren lässt. Nutze die Dinger seit Jahren nicht 
mehr und bin auch zu faul zum suchen, aber meine mich zu erinnern, dass 
man am Anfang der Initialisierung 3x das Reset-Kommando ausgibt, um ihn 
in einen definierten Zustand zu versetzen. Delays nicht vergessen!

von Hans-jürgen H. (hjherbert) Benutzerseite


Lesenswert?

Wenn das Display mit 4 bit angesteuert wird, will es immer zweimal 4 bit 
haben. Da gibt es keine Synchonisierung. Vom Reset des uC kriegt das 
Display nichts mit. und hält dann das erste Byte der Initialisierung für 
das 2 byte der vor dem Reset begonnenen Sequenz.

Vielleicht hilft es trotz 4 bit-Anschluß, während des Reset erst mal auf 
8 Bit zu schalten, damit sich die Datenkopplunng zum Display 
synchronisiert.

Etwa so:

Sende2nibblesvon( 0x22 ); // schalte auf 8-bit Betrieb
delay(1.65ms);
Sende2nibblesvon( 0x22 ); // schalte auf 8-Bit-Betrieb
delay(1.65ms);
Sende2nibblesvon( 0x28 ); // schalte auf 4-Bit Betrieb und Display ein
delay(1.65ms);

Mich wundert eh, wie lange die Datenübertragung im nichtabgesicherten 
4-Bit plus 4-Bit Modus gut läuft. Braucht nur mal ein Takt nicht 
angenommen werden, schon werden high und low Nibble auf immer 
vertauscht.

von matze (Gast)


Angehängte Dateien:

Lesenswert?

Vielen Dank soweit.

Ich habe nun den 100k widerstand an Pin 6 (Enable) ausprobiert und ein 
bisschen mit den Delay-Zeiten rumgespielt vor allem vor der 
Initialisierung des Displays. hat aber alles nichts genützt.

Gibt es im Assembler-code einen Befehl, der quasi alles auf Null bringt? 
also jede undefiniertheit oder vorherige Porgrammierung eliminiert? naja 
eigendlich ist das ja der reset button.

hab die displayinitialisierung mal angehängt - vielleicht ist da ja 
grundlegend etwas falsch.

noch jemand ne idee?

von holger (Gast)


Lesenswert?

Ja, da fehlt der Software Reset. Sieht ungefähr so aus:

powerup:    rcall   wait5ms
            dec     r18
            brne    powerup            ; Power-Up Wartezyklus min 30 ms

            ldi     r16, 0b00110000         ; Software Reset
            out     PORTD, r16

            rcall   LCD_enable              ; Enable-Impuls
            rcall   wait50ms

            rcall   LCD_enable              ; Enable-Impuls
            rcall   wait5ms

            rcall   LCD_enable              ; Enable-Impuls
            rcall   wait5ms

            ; sende init 1
            ldi     r16, 0b00100000         ; 4 Bit Modus aktivieren
            out     PORTD, r16
            rcall   LCD_enable              ; Enable-Impuls
            rcall   wait5ms

von Bensch (Gast)


Lesenswert?

... sag ich doch.

von matze (Gast)


Lesenswert?

wann ruf ich den powerup denn auf - als erstes?

von matze (Gast)


Lesenswert?

hat sich erledigt

von matze (Gast)


Lesenswert?

Super! das wars. Vielen Dank, ich stehe tief in deiner Schuld - das war 
nämlich mein letzter Haken an meinem Projekt - Nun läuft die ganze 
Schaltung endlich fehlerfrei!

Vielen Dank!

Matze

von Bensch (Gast)


Lesenswert?

Hier ist meine Kontonummer:   ... nein, nur ein Scherz.

von Alexander H. (ill_son)


Lesenswert?

moin,

wollte mal mitteilen, dass dieser Threat soeben mein Problem mit der 
Displaykommunikation nach einem Reset gelöst hat.
Hoch die Tassen ;-)

Danmke & Gruß, Alex

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.