www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD an ATMehga16


Autor: nick01 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich versuche seit zwei Tagen ein Standard-LCD an einem ATMEGA16 zu
betreiben und schaffe es einfach nicht. Ich habe mit AVRStudio4
folgendes Programm geschrieben:

.include "m16def.inc"

.def  TEMP = R16
.def  DATA = R17
.CSEG
RJMP  START
.ORG  $10



START:
  LDI    TEMP,LOW(RAMEND)    ;Stack-Initialisierung
  OUT    SPL,TEMP
  LDI    TEMP,HIGH(RAMEND)
  OUT    SPH,TEMP


  RCALL  DINIT
  LDI    DATA,'U'
  RCALL  WRTCHAR
  RJMP  ENDE

DINIT:
  RCALL  BUSY
  LDI    DATA,0x38        ;0x38 = 8bit-Mode
  RCALL  WRTCMD
  LDI    DATA,0x0E        ;0x0E = Display on, cursor on
  RCALL  WRTCMD
  LDI    DATA,0x02        ;0x02 = cursor at home position
  RCALL  WRTCMD
  LDI    DATA,0x01        ;0x01 = display clear
  RCALL  WRTCMD
RET

WRTCMD:
  RCALL  BUSY
  CBI    PORTA,PA0        ;RS = 0 -> command
  ;SBI    PORTA,PA2        ;Enable = 1
  CBI    PORTA,PA1        ;RW = 0 -> write
  OUT    PORTB,DATA        ;Kommando aus Register DATA auf PortB 
ausgeben
  RCALL  PULSE_EN
  ;CBI    PORTA,PA2        ;Enable = 0
  RCALL  BUSY
RET

WRTCHAR:
  SBI    PORTA,PA0        ;RS = 0 -> command
  ;SBI    PORTA,PA2        ;Enable = 1
  CBI    PORTA,PA1        ;RW = 0 -> write
  OUT    PORTB,DATA        ;Zeichen aus Register DATA auf PortB ausgeben
  RCALL  PULSE_EN
  ;CBI    PORTA,PA2        ;Enable = 0
  RCALL  BUSY
RET

BUSY:
  CBI    PORTA,PA0        ;RS = 0 -> command
  SBI    PORTA,PA2        ;Enable = 1
  SBI    PORTA,PA1        ;RW = 1 -> read
  IN    R18,PORTB        ;PortB in Register R18 ablegen
  ROL    R18            ;Register nach links Rotieren (falls Bit7=1 -> 
C=1)
  CBI    PORTA,PA2        ;Enable = 0
  BRCS  BUSY
  RET

PULSE_EN:
  SBI    PORTA,PA2
  NOP
  NOP
  NOP
  CBI    PORTA,PA2
  RET

ENDE:
  RJMP  ENDE

.EXIT

__________________________________________________________


Sieht jemand einen Fehler? Bin für jeden Tipp dankbar!!

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Sieht jemand einen Fehler?"


Ja, der Fehler ist: Du hast das Datenblatt nicht gelesen.

Da steht nämlich groß und breit die richtige Initsequenz drin und auch,
daß zwischen den Kommandos entsprechende Wartezeiten einzufügen sind.


Ich glaube auch der RW-Pin muß vor E gesetzt werden.
Und vor dem Lesen noch 1 oder 2 NOPs einfügen.


Bzw. guck Dir mal meinen ATTiny12 Code an. Da ergibt sich durch das
Schieben automatisch eine Wartezeit, so daß ich für die Datenbytes kein
Busy-Wait brauche.
Die langen Initwartezeiten müssen natürlich mit einer Warteschleife
gemacht werden.


Peter

Autor: nick01 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Peter,

Ich habe das Enablen ja über ein Unterprogramm PULSE_EN gemach - nach
dem RS und RW setzen, habe ja ein ";" davor!
Die Warteschleife sollte doch entfallen, wenn ich immer das Busy-Flag
abfrage, oder?

nick01

Autor: Rick Dangerus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jein.
IMO sind beim Initialisieren trotzdem Wartezeiten notwendig. Guck mal
im Tutorial oder suche mal bei google (+HD44780 +initsequenz o.ä.).

Rick

Autor: Gerald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

also ich habe meine Displays am ATmega 16 zum Laufen gebracht nachdem
ich mich an Init-Anweisungen mit den entsprechenden Zeiten vom
Datenblatt gehalten habe, als Grundlage habe ich das Datenblatt KS0066U
verwendet.
Die Displays laufen im 8Bit-Modus und stammen von Reichelt.
Wichtig ist das Einhalten der Zeitschleifen, sonst geht garnichts.


Gruss

Gerald

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weis jemand wie lange das Enable-Bit gesetzt bleiben muss, dazu steht 
leider nichts genaues im Datenblatt :( ...

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Halt, ich habs gefunden.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Die Warteschleife sollte doch entfallen, wenn ich immer das Busy-Flag
> abfrage, oder?

In der Initsequenz steht die Busy-Abfrage noch nicht zur Verfügung. Was 
Busy frühstens abfragbar ist, steht auch im Datenblatt LCD-Controller.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
s/Was/Wann/g ;-)

Autor: Jörn Paschedag (jonnyp)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Busy Flag steht schon zur Verfügung, dafür ist es ja da. Aber peter 
dannegger hat schon Recht mit dem Blick ins Datenblatt. Schau dir mal 
das Timing Diagramm mit den Zeiten an, die sind im Verleich zu den 
häufig benutzten Taktfrequenzen der Atmega äußerst lahm (E Cycle Time 
1µs).
Wenn du deinen MC mit 1MHz oder weniger taktest kommst du vielleicht 
hin.
(Teste das mal). Sonst helfen nur die hier bereits erwähnten 
Zeitschleifen.

Autor: Stefan (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Die Initsequenzen, die ich bisher gesehen habe, legen mir nahe, dass das 
Busyflag (BF) in der Initialisierungssequenz nicht von Anfang an zur 
Verfügung steht und eigene Wartezeiten unabhängig vom BF notwendig sind.

Zur Verdeutlichung  was ich meine, habe ich einen Screenshot aus dem 
Datenblatt vom HD44780 angehängt. Ich lese das so, dass die Wartezeiten 
>15ms, >4.1ms und >100µs selbst eingerichtet werden müssen.

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey Leute, der Thread ist mehr als ein Jahr alt... Den hat Peter nur 
wieder ausgegraben

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.