Forum: Mikrocontroller und Digitale Elektronik Eine Lcdanzeige mit einem Atmega8 steuern


von G. M. (knut89)


Lesenswert?

Moin,

ich hab da ein Problem, und zwar möchte ich mit einem Atmega 8 eine Lcd 
Platine (HD44780 ), mit dem integrierten Controller (ST7066) zu steuern.
Also vorab die Platine ist korrekt angeschlossen der Kontrast ist auch 
richtig angeschlossen und funktioniert.
Mein Problem ist, dass die LCD Anzeige nicht anzeigt und nur der 
schwarze Balken blinkt.
Hier der Code:

$regfile = "m8def.dat"

$crystal = 4000000

$baud = 19200

$hwstack = 32

$swstack = 10

$framesize = 40
$sim

Config Lcdpin = Pin , Port = Portb , E = Portd.6 , Rs = Portd.5

Dim A As Byte

Config Lcd = 20 * 4 , Chipset = Ks077

Cls
Lcd "60"

Wait 1

Lowerline

Wait 1

Lcd "Shift this."

Wait 1

For A = 1 To 10

  Shiftlcd Right

  Wait 1

Next



For A = 1 To 10

  Shiftlcd Left

  Wait 1

Next



Locate 2 , 1

Lcd "*"

Wait 1



Shiftcursor Right

Lcd "@"

Wait 1



Home Upper

Lcd "Replaced."

Wait 1



Cursor Off Noblink

Wait 1

Cursor On Blink

Wait 1

Display Off

Wait 1

Display On

Thirdline

Lcd "Line 3"

Fourthline

Lcd "Line 4"

Home Third
Home Fourth

Home F

Locate 4 , 1 : Lcd "Line 4"

Wait 1

Deflcdchar 1 , 225 , 227 , 226 , 226 , 226 , 242 , 234 , 228       '

Deflcdchar 0 , 240 , 224 , 224 , 255 , 254 , 252 , 248 , 240

Cls



Lcd Chr(0) ; Chr(1)





_temp1 = 1

!rCall _write_lcd

End

Also das ist der beispiel Code aus Bascom mit der Umwandlung für meine 
Schaltung.
Kann einer einen Fehler im Code finden.


Vorab schon mal danke

Gruß Knut

: Verschoben durch User
von G. M. (knut89)


Lesenswert?

Also habe jetzt fest gestellt das die anzeige nicht initialisiert ist. 
Wie mache ich das denn ? ich weis was im Datenblatt steht weis nur net 
wie man das umsetzten.
Vielleicht einer ne ahnung

Gruß knut

von Thomas Kiss (Gast)


Lesenswert?

Sowas ?

Config Lcdpin = Pin , Db7 = Portb.0 , Db6 = Portb.1 , Db5 = Portb.2 , _
      Db4 = Portb.3 , E = Portb.4 , Rs = Portb.5
   Config Lcd = 20 * 4
   Cls
   Cursor Off

Die Datenleitung soll auch irgendwie zum LCD....oder sehe ich es 
falsch..?

von XXX (Gast)


Lesenswert?

Hallo

Da kommt doch fast jeden Tag eine Anfrage wegen dieses Displays.
Gib doch einfach mal oben rechts bei "mikrocontroller.net durchsuchen"
als Suchbegriff HD44780 ein. Da erscheint so einiges brauchbares.

Gruß
Joachim

von G. M. (knut89)


Lesenswert?

@ xxx:Auf die Idee kam ich auch schon findet man nix brauch bares

@Thomas: also ich wollte die Anzeige eigendlich im 8 bit modus 
betreiben.
   die daten kommen ja auch an Zahlen werden angezeigt nur buchstanben 
nicht da kommen irgendwelche komischen zeichen.

irgend wie bekomme ich es nicht hin das busy bit abzufragen und die 
Anzeige zu initialisieren.

von Karl H. (kbuchegg)


Lesenswert?

G. Matthias schrieb:
> @ xxx:Auf die Idee kam ich auch schon findet man nix brauch bares
>
> @Thomas: also ich wollte die Anzeige eigendlich im 8 bit modus
> betreiben.
>    die daten kommen ja auch an Zahlen werden angezeigt nur buchstanben
> nicht da kommen irgendwelche komischen zeichen.

Das deutet auf einen Verdrahtungsfehler hin. Wahrscheinlich hast du 2 
Leitungen vertauscht.
Wenn du von einem Buchstaben zb 'A' sagen würdest, welches Zeichen 
stattdessen kommt, könnte man mithilfe des ASCII Codes wahrscheinlich 
sogar sagen, welche beiden Leitungen vertauscht sind.

>
> irgend wie bekomme ich es nicht hin das busy bit abzufragen und die
> Anzeige zu initialisieren.

Was jetzt?
Ist das LCD initialisiert (kannst du etwas ausgeben) oder nicht?

von G. M. (knut89)


Lesenswert?

Ausgeben kann ich etwas aber nur zahlen der rest wird entweder nicht 
angegeben oder es sind komische symbole verdrahtungs Fehler hab ich als 
erstes aus geschlossen hab die Leitungen 8 mal durch geklingelt.

weis nicht genau ob si initialisiert ist wie gesagt nur die Zahlen 
werden aus gegeben.

komisch ist nur das zum beispiel 6-3-2 = 1 immer wieder ganz kurz auf 
leuchtet und sonst = als 1 aus gegeben wird und die Rechnung als ein 
Zeichen

von Karl H. (kbuchegg)


Lesenswert?

G. Matthias schrieb:

> angegeben oder es sind komische symbole verdrahtungs Fehler hab ich als
> erstes aus geschlossen hab die Leitungen 8 mal durch geklingelt.

Dein µC gibt aber für ein 'A' nicht den ASCII Code eines anderen 
Zeichens aus.
Wenn du
   LCD "A"
machst, dann gibt dein Programm den ASCII Code für A,
nämlich Hex 41 oder eben binär 01000001 auf die Datenleitungen
Und dein LCD weiß das auch und aktiviert bei diesem Inhalt der 
Datenleitungen die Pixel, die für dich ein A ergeben.
Hast du allerdings beispielsweise Leitung DB6 mit Leitung DB7 
vertauscht, dann gibt zwar der Prozessor nach wie vor das Bitmuster 
01000001 aus, aber durch den Leitungsdreher versteht dein LCD 10000001 
und malt dann ein ganz anderes Zeichen hin (irgendein japanisches 
Sonderzeichen)

Die Leitungen müssen auch nicht unbedingt vertauscht sein, es könnte 
auch ein Kurzschluss zwischen den Leitungen sein.
Dann versteht dein LCD anstelle des vom µC vorgesehenen
    0100001
eben beispielsweise (Leitung DB6 mit DB7 kurz geschlossen)
    1100001
und das ist dann wieder irgendein anderes Sonderzeichen.

> weis nicht genau ob si initialisiert ist wie gesagt nur die Zahlen
> werden aus gegeben.

Wenn du ausgeben kannst, dann ist es auch initialisiert.

>
> komisch ist nur das zum beispiel 6-3-2 = 1

Test abspecken.
Ein einzelnes A ausgeben und dann das Programm in eine Endlosschleife 
schicken. Und dann gibst du bescheid, was am LCD zu lesen ist. Mal das 
Zeichen ab oder mach ein Photo wenn du es nicht beschreiben kannst.

Eine Übersicht über den Standardzeichensatz eines HD44780 findest du bsp 
hier.
http://de.wikipedia.org/wiki/HD44780

Mit der Kenntnis von ein paar ausgegebenen Zeichen und dem was statt 
dessen angezeigt wird, kann man schon ganz gut einkreisen, wo du dich 
verlötet hast.

von G. M. (knut89)


Lesenswert?

also jetzt gibt die Anzeige nur noch einen schwarzen Balcken aus


hier noch mal der code hab ein bisschen was verändert.

'abschluss_projekt_gniza.BAS: Temperaturabhänige Lüftersteuerung

'----------------------------------------------------------
$regfile = "m8def.dat"
$crystal = 4000000
$baud = 19200

$hwstack = 32

$swstack = 10

$framesize = 40



'
Ddrd = &B01111110
Ddrc = &B00000000
Ddrb = &B11111111
Admux = &B11000000

Adcsra = &B11100010

Portd = &B11111101
Portc = &B11111100
Portb = &B11111111
Mcucr = &B00001110
Gicr = &B11000000
Sreg.7 = 1

'Config Lcdpin = Pin, Db0 = Portb.0   Db1 = Portb.1 Db2 = Portb.2, Db3 = 
Portb.3,   Db4 = Portb.4,   Db5 = Portb.5, Db6 = Portb.6,  Db7 = 
Portb.7,  E = Portd.6 , Rs = Portd.5 ,

Config Lcdpin = Pin , Port = Portb , E = Portd.6 , Rs = Portd.5

Dim Lb As Word
Dim Hb As Word
Dim A As Word
 Dim B As Byte

Config Lcd = 20 * 4
Do

  Cls
  Locate 1 , 1
  Lcd ""




'

   Hb = Adch
   Lb = Adcl
   Hb = Hb And &B00000011
   Hb = Hb * 256
   A = Lb + Hb

   Udr = A
   Waitms 500


    If A > 601 Then
      Portd.1 = 1

         Elseif A < 586 Then
            Portd.1 = 0


    Waitms 1
    End If

     Loop
benutze aber auch eine HD44780 mit Ks066 und st 7066 muss ich da irgend 
was besonderes beachten ??

von G. M. (knut89)


Lesenswert?

Weiß auch das jetzt bei LCD "" nichts drine steht war beabsichtigt

von Karl H. (kbuchegg)


Lesenswert?

Eine Übersicht über den Standardzeichensatz eines HD44780 findest du bsp
hier.
http://de.wikipedia.org/wiki/HD44780

Mit der Kenntnis von ein paar ausgegebenen Zeichen und dem was statt
dessen angezeigt wird, kann man schon ganz gut einkreisen, wo du dich
verlötet hast.

von Karl H. (kbuchegg)


Lesenswert?

G. Matthias schrieb:
> Weiß auch das jetzt bei LCD "" nichts drine steht war beabsichtigt

Ist das wirklich so schwer zu verstehen?

Mach

  ....

  LCD "A"

  Do
  Loop

und dann identifizier hier

http://de.wikipedia.org/wiki/HD44780

welches Zeichen anstelle des A auftaucht.
Dann machst du dasselbe noch für ein paar andere Buchstaben die in der 
Codetabelle ein wenig auseinander liegen.

Immer
    was soll sein      was ist

dann schauen wir uns die Binärcodes an und suchen nach Gemeinsamkeiten 
wie Vertauschungen oder Kurzschlüsse, die dieses Verhalten erklären.

von Karl H. (kbuchegg)


Lesenswert?

G. Matthias schrieb:
> also jetzt gibt die Anzeige nur noch einen schwarzen Balcken aus

Jetzt hast du die Initialisierung zerstört.
Lass sie so wie sie war!


Du kannst nicht ein LCD so initialisieren, dass es zwar Ziffern aber 
keine Buchstaben anzeigt! Entweder es ist initialisiert, dann zeigt es 
an oder es ist nicht initialisiert, dann zeigt es einen Balken.
Eine andere Möglichkeit gibt es in Bezug auf die Initialisierung nicht.

von G. M. (knut89)


Lesenswert?

wie initialisiere ich das ding den über haupt ??
sry aber ich bin kein entwickler oder so was bin auszubildender im 3 
lehrjahr

von Karl H. (kbuchegg)


Lesenswert?

Ich geb auf

von Thomas Kiss (Gast)


Lesenswert?

google mal nach einem Pascom standard Programm.

Du möchtest eine LCd Anzeige in 8 Bit modus ansteuern ?

Also :
$regfile = "m8def.dat"
$crystal = 4000000
$baud = 19200
$hwstack = 32
$swstack = 10
$framesize = 40

 $lcd = &HC000       'Adresse LCD Daten
 $lcdrs = &H8000     'Adresse LCD Register select

 Config Lcdbus = 8   'LCD im 8-Bit Bus Mode
 Config Lcd = 20 * 4 4

 Do

 Cls                 'loesche das LCD Display
 Locate 1 , 1        'Cursor auf 1 Zeile, 1 Spalte
 Lcd "Bla Bla"  'String auf Display anzeigen
 Locate 2,1
 LCD "Test"

Loop

Wenn es nicht funzt, denke ich hast ein Problem mit der Verdrahtung..

Oder probiere erstmal im einfachen 4 Bit Modus :
http://halvar.at/elektronik/kleiner_bascom_avr_kurs/lcd_textanzeige/

von G. M. (knut89)


Angehängte Dateien:

Lesenswert?

also bei diesem programm kommt diese zeichen in der ersten zeie ein mal 
und in der zweiten ist nur der schwarze balken



                                   $regfile = "m8def.dat" 
' specify the used micro

$crystal = 1000000                                          ' used 
crystal frequency

$baud = 9600                                               ' use baud 
rate

$hwstack = 32                                               ' default 
use 32 for the hardware stack

$swstack = 10                                               ' default 
use 10 for the SW stack

$framesize = 40                                             ' default 
use 40 for the frame space











'Config Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2 , Db6 = Portb.3 , 
Db7 = Portb.4 , E = Portb.5 , Rs = Portb.6

'Config Lcdpin = Pin , D0 = Portb.0 , D1 = Portb.1 , D2 = Portb.2 , D3 = 
Portb.3 ,
'D4 = Portb.4 , D5 = Portb.5 , D6 = Portb.7 , D7 = Portb.6 , E = Portd.6 
, Rs = Portd.5

Config Lcdpin = Pin , Port = Portb , E = Portd.6 , Rs = Portd.5


 Ddrd = &B01100010
Ddrc = &B00000000
Ddrb = &B11111111
Admux = &B11000000

Adcsra = &B11100010

Portd = &B10011101
Portc = &B11111100
Portb = &B00000000
Mcucr = &B00001110
Gicr = &B11000000



 Do


Dim A As Byte

Config Lcd = 20 * 4 ,




If Portb.6 = 0  Then

   Portb = &B00111000
   Portb = &B00001111
   Portb = &B00000001
   Portb = &B00000110
Else
 Loop
End If




Locate 1 , 1
Lcd "A"

Do
Loop
  End

und das heist dann

von G. M. (knut89)


Angehängte Dateien:

Lesenswert?

nöpe wie eben schwarzern balken und der schwarze block verdrahtung ist 
in ordnung hab alles durch geklingelt passt ist genau so angeschlossen 
wie es sein soll

von G. M. (knut89)


Angehängte Dateien:

Lesenswert?

sry falsches geht nur zu öffnen mit eagle das jetzt der schalt plan

von Karl H. (kbuchegg)


Lesenswert?

G. Matthias schrieb:
> nöpe wie eben schwarzern balken und der schwarze block

IN deinem ersten Programm (ganz oben) hattest du doch eine korrekte 
Initialisierung mit der du aufs LCD ausgeben konntest und auch was 
gesehen hast. Ich versteh nicht, warum du die nicht weiter benutzt.

> verdrahtung ist
> in ordnung hab alles durch geklingelt passt ist genau so angeschlossen
> wie es sein soll

Kann nicht sein. Denn sonst würde es funktionieren.

von spess53 (Gast)


Lesenswert?

Hi

>sry falsches geht nur zu öffnen mit eagle das jetzt der schalt plan

Das auch nur mit Eagle.

MfG Spess

von Thomas Kiss (Gast)


Lesenswert?

Läuft es im Bascom Simulator ??????

von G. M. (knut89)


Lesenswert?

Also es war eine Verdrehung zwischen db6 und db7 aber auf der  Hardware 
war alles okay dort hab ich nicht fest gestellt wird vielleicht ein 
Fehler beim compilieren oder beim schreiben gewesen sein danke noch mal 
an alle und vor allen an Karl.


Gruß knut

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.