Nach Reset macht das Display nicht was es soll

Gast #780040
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
Gast #780059
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.
Gast #780069
>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 !
Gast #780073
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!
Gast #780103
>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 ?
Gast #780115
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
Gast #780116
@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
Gast #780202
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
Gast #780429
@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
Gast #780482
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!
Persönliche Seite #780814
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.
Gast #780981
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?
Angehängte Dateien:
Gast #781029
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
Gast #781057
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.