PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LCD will nicht so ganz ?!



ProgDom
31.03.2005, 13:36
Hallo,
ich hab jetzt mal wieder so ein typisches Problem von einem Anfänger, bei dem man nicht einmal weiß, woran es denn liegt.
Ich würde mich sehr freuen, wenn mir einige von euch helfen könnten.

Ich habe ein LCD und habe noch nie ein solches mit meinem Atmega8 angesteuert. Ich habe jetzt ersteinmal folgende Verbindungen vorgenommen:
1 -> Vss -> GND
2 -> Vdd-> +5V
3 -> Vo -> -3V
4 -> RS -> PC4 am AVR
5 -> RW -> GND
6 -> E -> PC5 am AVR
7 -> DB0-> GND
8 -> DB1-> GND
9 -> DB2-> GND
10-> DB3-> GND
11-> DB4-> PC0 am AVR
12-> DB5-> PC1 am AVR
13-> DB6-> PC2 am AVR
14-> DB7-> PC3 am AVR
Wie man vermutlich schon erkennen kann, möchte ich das LCD im 4-Bit Modus ansprechen.
Wenn ich den Strom am Display anschalte sehe ich auch schwarze Balken, wie es üblich ist und auch soll. Ich kann das Display jedoch nicht ansprechen. Zurzeit verwende ich folgenden Assembler-Code von www.mikrocontroller.net:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; LCD-Routinen ;;
;; ============ ;;
;; (c)andreas-s@web.de ;;
;; ;;
;; 4bit-Interface ;;
;; DB4-DB7: PC0-PC3 ;;
;; RS: PC4 ;;
;; E: PC5 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



;sendet ein Datenbyte an das LCD
lcd_data:
mov temp2, temp1 ;"Sicherungskopie" für
;die Übertragung des 2.Nibbles
swap temp1 ;Vertauschen
andi temp1, 0b00001111 ;oberes Nibble auf Null setzen
sbr temp1, 1<<4 ;entspricht 0b00010000
out PORTC, temp1 ;ausgeben
rcall lcd_enable ;Enable-Routine aufrufen
;2. Nibble, kein swap da es schon
;an der richtigen stelle ist
andi temp2, 0b00001111 ;obere Hälfte auf Null setzen
sbr temp2, 1<<4 ;entspricht 0b00010000
out PORTC, temp2 ;ausgeben
rcall lcd_enable ;Enable-Routine aufrufen
rcall delay50us ;Delay-Routine aufrufen
ret ;zurück zum Hauptprogramm

;sendet einen Befehl an das LCD
lcd_command: ;wie lcd_data, nur ohne RS zu setzen
mov temp2, temp1
swap temp1
andi temp1, 0b00001111
out PORTC, temp1
rcall lcd_enable
andi temp2, 0b00001111
out PORTC, temp2
rcall lcd_enable
rcall delay50us
ret

;erzeugt den Enable-Puls
lcd_enable:
sbi PORTC, 5 ;Enable high
nop ;3 Taktzyklen warten
nop
nop
cbi PORTC, 5 ;Enable wieder low
ret ;Und wieder zurück

;Pause nach jeder Übertragung
delay50us: ;50us Pause
ldi temp1, $42
delay50us_:dec temp1
brne delay50us_
ret ;wieder zurück

;Längere Pause für manche Befehle
delay5ms: ;5ms Pause
ldi temp1, $21
WGLOOP0: ldi temp2, $C9
WGLOOP1: dec temp2
brne WGLOOP1
dec temp1
brne WGLOOP0
ret ;wieder zurück

;Initialisierung: muss ganz am Anfang des Programms aufgerufen werden
lcd_init:
ldi temp3,50
powerupwait:
rcall delay5ms
dec temp3
brne powerupwait
ldi temp1, 0b00000011 ;muss 3mal hintereinander gesendet
out PORTC, temp1 ;werden zur Initialisierung
rcall lcd_enable ;1
rcall delay5ms
rcall lcd_enable ;2
rcall delay5ms
rcall lcd_enable ;und 3!
rcall delay5ms
ldi temp1, 0b00000010 ;4bit-Modus einstellen
out PORTC, temp1
rcall lcd_enable
rcall delay5ms
ldi temp1, 0b00101000 ;noch was einstellen...
rcall lcd_command
ldi temp1, 0b00001100 ;...nochwas...
rcall lcd_command
ldi temp1, 0b00000100 ;endlich fertig
rcall lcd_command
ret

;Sendet den Befehl zur Löschung des Displays
lcd_clear:
ldi temp1, 0b00000001 ;Display löschen
rcall lcd_command
rcall delay5ms
ret
und

.include "m8def.inc"

.def temp1 = r16
.def temp2 = r17
.def temp3 = r18


ldi temp1, LOW(RAMEND) ; LOW-Byte der obersten RAM-Adresse
out SPL, temp1
ldi temp1, HIGH(RAMEND) ; HIGH-Byte der obersten RAM-Adresse
out SPH, temp1

ldi temp1, 0xFF ;Port D = Ausgang
out DDRC, temp1

rcall lcd_init ;Display initialisieren
rcall lcd_clear ;Display löschen

ldi temp1, 'A' ;Zeichen anzeigen
rcall lcd_data

ldi temp1, 'B' ;Zeichen anzeigen
rcall lcd_data

ldi temp1, 'C' ;Zeichen anzeigen
rcall lcd_data

ldi temp1, 'D' ;Zeichen anzeigen
rcall lcd_data

loop:
rjmp loop

.include "lcd-routines.asm" ;LCD-Routinen werden hier eingefügt
Leider hat das nichts am LCD verändert. Es sind immernoch nur die Balken zu sehen.

Ich weiß nicht, ob es an dem Code oder an der Hardware liegt, da mein LCD etwas anders ist. Aus diesem Grund habe ich einmal Datenblatt und Ansteuerhinweis unten angefügt !


Ich hoffe, dass mir jemand bei meinem Problem helfen kann, da ich gerne mal "normale" Zeichen auf meinem LC-Display sehen möchte.
**********************
MFG
ProgDom

ProgDom
01.04.2005, 13:58
Ich dachte mir, das das Interesse an so einem Problem nicht sehr groß sein würde, aber kann sich nicht doch jemand einmal mit dem Problem befassen ?
Ich wäre sehr sehr dankbar.

*************
MFG
ProgDom

bertl100
01.04.2005, 14:02
Ich kann dir leider nicht helfen, da ich nur in Bascom programmiere.
In Bascom müsstest du die pins einzeln konfigurieren und dann gehts auch.
Such einfach mal nach "LCD" im Forum.

Robert

tobimc
01.04.2005, 14:06
Hi ProgDom

Ich würde dir ja helfen, aber mit ASM kenne ich mich leider ÜBERHAUPT nicht aus!

Nur die Standardsachen:
- Kontrast?!
- Kabel
- Spannungen
- Sicher, dass man für 4-Bit die unteren 4 auf GND legen muss?
- Dein Atmel noch ganz (hatt ich auch schon, ESD)

Ganz liebe Grüße,
Tobi

Marco78
01.04.2005, 14:10
Mit BASCOM hätte ich evtl auch helfen können :(

Den Beitrag habe ich schon gelesen, hachdem du das erste mal geschrieben hast.
Und eigentlich sollte es ja nicht so sein, das sich einige nicht auf das Anfängerniveau runterlassen und deshlab nicht antworten.

Mal ganz blöd gefragt, die Masse vom LCD ist mit Masse vom AVR verbunden?
Der Code von MC.net wird wohl richtig sein, wenn er da steht. Und wenndu schwarze Balken auf dem LCD siehst, ist Kontrast auch vorhanden.

ProgDom
01.04.2005, 16:34
Das Problem scheint wohl unlösbar zu sein, da ich aufgrund meiner mangelnden Elektronikkenntnisse ein Fehler gemacht habe.

Marco78 hatte mich bereits vor einiger Zeit darauf hingewiesen, doch irgendwie habe ich deien Antwort leider nie gesehen, sry !!!
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=7221&lcd+5v Der letzte Beitrag.
Ich werde dann mal doch die Schaltung bauen. Blöd nur, dass ich diese wichtige Antwort nie gesehen habe, ärgert mich sehr, aber thx !!!

ProgDom
01.04.2005, 17:28
Ich bin zur Zeit noch am überlegen, ob die Kondensatoren in der Schaltung https://www.roboternetz.de/phpBB2/download.php?id=2305 Kerkos oder Elkos sind ?! Was sollen das denn wohl sein ?

tobimc
01.04.2005, 17:32
HI

Das sind ELKOs wenn mich nicht alles täuscht!
Aber wiso willst du einen Temperaturausgleich für deinen Kontrast haben?

Ganz liebe Grüße,
Tobi

ProgDom
01.04.2005, 17:40
Das wird kein Temperaturausgleich, sondern eine Möglichkeit ein -5V an die Steuerelektronik eines +5V und GND Atmega8 anzuschließen.
Weil aufgrund der folgenden Umstände kann man anders ein -5V LCD nicht in die Schaltung integrieren:

Je nachdem wie das LCD angeschlossen ist, hat man 4 oder 8 Datenleitungen (die Steuerleitungen lassen wir mal außen vor)
Diese werden mit bestimmten Spannunge angesprochen. Sagen wir mal alles bis 1V ist low und alles über 3V ist High.
Und diese Spannung bezieht sich auf Masse (GND) und zwar auf die, die am LCD angeschlossen ist.
Aber diese Masse ist ja schon um 5V positiver als die Masse der restlichen Elektronik.
Weil die Masse für's LCD im Prinzip ja auch 5V hast.
Wenn der µC oder was auch immer das LCD anspricht und +5V für High ausgibt, sind das für die LCD-Elektronik nur 0V. Wenn vom µC 0V für Low ausgegeben wird, kommen am LCD -5V an. Weil es unterschiedliche Massepotentiale sind.

tobimc
01.04.2005, 18:01
Hi

Achso... *oops*
Müssten Elkos sein!

Grüße;
Tobi

ProgDom
07.04.2005, 19:00
Ich bin zur Zeit noch am überlegen, ob die Kondensatoren in der Schaltung https://www.roboternetz.de/phpBB2/download.php?id=2305 Kerkos oder Elkos sind ?! Was sollen das denn wohl sein ?

Jetzt wollte ich gleich anfangen die Schaltung zu bauen und tobimc hatte mir ja schon geholfen bei der Überlegung, ob es sich beide den Kondensatoren um Kerkos oder Elkos handelt.
Tobimc sagte ja, dass es sich wohl um Elkos handelt. Dieser Meinung bin ich auch ! Jedoch passt die Polung der Elkos dann glaube ich nicht, denn vom ICL7660 ist der 2 ein positiver Anschluss und Pin 4 ein negativer. Beim zweiten Elko, der nicht am ICL ist ist es jedoch doch eigentlich umgekehrt, oder ?

Kann sich vllt. einmal jemand das Datenblatt anschauen und sagen, was denn jetzt wierum muss, damit ich endlich die Schaltung bauen kann ?

Vielen, vielen Dank !!!
***********************
MFG
ProgDom

ProgDom
07.04.2005, 21:14
^
|
|

würde mich sehr freuen, wenn das jemand beantworten könnte, damit ich die Schaltung endlich bauen kann ! PLZ !!!

Marco78
08.04.2005, 18:29
Ähmm, kannst du nicht auch im Datenblatt nachschauen ;)
Es wäre möglich, das der verpolt eingebaut werden muss. Der 7660 ist ja eine Ladungspumpe.
Solltest du selbst nachgeschaut haben und nix gefunden haben, oder es nicht verstanden habe, werd ich mal nachschauen, wenn sonst keiner schneller war. Aber ich muss jetzt erstmal wech.

Worstcase
14.04.2005, 19:46
ei sicher ist der kondensator richtig die schaltung soll ja eine negative kontrastspannung erzeugen. damit ist der kondensator mit + an der masse richtig da der konsensator ja na -5 angeschlossen ist. also potential mässig betrachtet liegt die spannung vollkommen richtig am kondensator an. und keine sorge die leistung die diese schltung erzeugt ist so gering selbst wenn der c falsch eingebaut ist hochgehen tut der bestimmt nicht.

*sicheres auftreten trotz völliger ahnungslosigkeit *
*starke behauptungen sind besser als schwache vermutung*

los_iveos
21.04.2005, 10:35
Hi ProgDom!

Es ist gut möglich das dein LCD funktioniert und es doch am Kontrast liegt. Ich hatte ein ähnliches Problem.... nach dem Power-on-reset des LCD erscheinen die netten schwarzen balken. Das ist ja auch gut so. Aber Du musst den Kontrast nochmal nachregeln, um Zeichen sehen zu können. Ich hab das an einem 4x16 LCD durch und hab nur mal durch Zufall den Kontrast des Displays nachgeregelt und es ward Licht ..neh! Zeichen. Also Probiers mal! Ich hab eine eine positive Spannung für den LC Treiber Verwendet (Poti 0V-5V Bereich). Die schwarzen Balken nach Reset sind nur da, damit Du siehst, das das LCD funktioniert, bzw. die Kontrastspannung ausreichend ist (wird in Deinem Fall aber mit -3V schon zu viel sein).

Sag mir bitte mal bescheid, ob ich richtig lag!!! (darkmoon79@web.de)

Monaco
28.04.2005, 17:21
Überprüfe als erstes ob die Balken erscheinen, falls dies der Fall ist ist schonmal alles richtig angeschlossen nun kann es eigendlich nur noch an der Initialisierung liegen.
http://wwwiti.cs.uni-magdeburg.de/~buchmann/privat/generator.htm
Falls du dich mit ASM net so auskennst versuchs mal mit dem Generator und schau ob du dort alles nachvollziehen kannst.

MFG