Eine Lcdanzeige mit einem Atmega8 steuern

OP #2036868
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
Gast #2041354
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..?
OP #2041436
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.
#2041456
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?
OP #2041472
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
#2041482
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.
OP #2041501
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 ??
#2041511
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.
#2041516
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.
Gast #2041627
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/
OP #2041628
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
Angehängte Dateien:
#2041648
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren