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
Sind irgendwelche Datenleitungen des Displays gleichzeit auch Programmierpins ? MISO,MOSI,SCLK ... dann steck mal den Programmer aus.
> Kommt dieses Problem jemandem bekannt vor?
Ich glaube ja.
Gruß,
Magnetus
>> Kommt dieses Problem jemandem bekannt vor? >Ich glaube ja. Mindestens zwei Fragen pro Tag ;)
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.
>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 !
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!
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.
Vielleicht bist Du auch zu schnell oben mit Deinem Mega8, mach mal ein Delay - 10ms- an den Anfang Deiner Main-Routine.
>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 ?
tja holger (mal wieder). Wir jungen Leute brauchen halt nicht soviel Info wie die Alten um ein Problem zu lösen ...
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
@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
@holger hab übrigens außer blöden Kommentaren von Dir noch nie in einem Beitag etwas hilfreiches gelesen.
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
@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
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!
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.
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?
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
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
Hier ist meine Kontonummer: ... nein, nur ein Scherz.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.