Hjälp med LM16A211 LCD

Lysdioder, Optiska sensorer, Fiberoptik, Displayer, Lasrar, Optiska kopplare
xezer
Inlägg: 65
Blev medlem: 8 mars 2005, 20:41:21

Hjälp med LM16A211 LCD

Inlägg av xezer »

För er som läste min förra tråd så kan jag nu upplysa om att det till slut blev en LM16A211 LCD :D

Jag får dock inte denna att fungera riktigt som den ska, i sanningens ord så får jag den inte all fungera alls :(

jag har anslutit den som följande:

1 | VSS | GND
2 | VDD | +5V
3 | V0 | +3V
4 | RS | 0V
5 | R/W | 0V
6 | E |+5V
7-14 är databitar som jag har anslutit till ett K8055, http://www.kjell.com/content/templates/ ... 7160&path=

Genom det har jag skrivit ett program i c++ som skickar ut dessa signaler som ska, om jag har förstått det, initiera LCDn.

00001100 //function set 8 bit
(vänta 5msek)
00001100 //function set 8 bit
(vänta 5msek)
00001100 //function set 8 bit
(vänta 5msek)
00111100 //Function set
(vänta 5msek)
00001000 //Display Off
(vänta 5msek)
00000001 // Display Clear
(vänta 5msek)
00000100 // Entry Mode Set
(vänta 5msek)

Jag är rätt osäker på att jag har initierat displayen rätt.
Sen när jag har anslutit +5V till VDDn så ligger så gott som alla pinnar på ca 4V, ska det vara så?
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Inlägg av v-g »

'E' måste du väl 'stroba' mellan varje kommando eller minns jag helt fel nu?
xezer
Inlägg: 65
Blev medlem: 8 mars 2005, 20:41:21

Inlägg av xezer »

Om du med stroba menar att ge på-av för varje kommando så fungerade inte det heller :/
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Inlägg av v-g »

av på av så menade jag ja. Samtidigt måste datat finnas på "datapinnarna".
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Eftersom du har lagt både "E" och "RS" fast till 5V resp 0V så har du
uppenbarligen inte läst på tillräckligt om HD44780 LCD'er.

Läs på, koppla sedan rätt, och återkom om ändå inte fungerar.

Personligen tycker jag att de två PDF'erna på denna sida är bra :
http://www.epemag.wimborne.co.uk/resources.htm
xezer
Inlägg: 65
Blev medlem: 8 mars 2005, 20:41:21

Inlägg av xezer »

Tack, har läst på lite nu och ska börja initiera LCDn i 4bits mode.
Som det är nu ser processen ut såhär:
RS = 0.

Kod: Markera allt

    init_0011();  // 8bits function
    strob();
    init_0011();
    strob();

    init_0011();   // 4bits function
    strob();
    init_0010();
    strob();
    
    init_0010();   //
    strob();
    init_1010();
    strob();
    
    init_0000();   //Display off
    strob();
    init_1000();
    strob();
    
    init_0000(); //Clear display
    strob();
    init_0001();
    strob();
    
    init_0000(); //Set entry mode
    strob();
    init_0110();
    strob();
    
    init_0000(); //Display on, cursor, blink 
    strob();
    init_1111();
    strob();
init_XXXX() sänder ut värdet och sätter på E.
strob() sätter av E och tar bort alla signaler.

Jag får ingen reaktion ifrån LCDn, tycker att cursorn borde blinka :/
Vad kan jag ha gjort för fel?
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Inlägg av v-g »

Och du är säkert på att ditt vellemankort levererar några utsignaler? Kontrollera gärna med lysdiod + motstånd.

Annars är det bara att se till att (ex)kod 0011 verkligen ger 0011 på porten och att det är rätt kopplat till rätt del av portarna D0-D7. Sen strobe (av)-på-av

Bild
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Prova att lägga kontrastpinnen till 0V istället för 3V.
Bäst är att lägga dit en 10k trimpot så att du kan justera
kontrsatspänningen enkelt. Varför har du valt just 3V ??
xezer
Inlägg: 65
Blev medlem: 8 mars 2005, 20:41:21

Inlägg av xezer »

V-G: När jag läste av ut-strömmen från kortet så var den inte på mer än 0.6V och det slog mig att den spänningen ändast var till som collector-spänning, och visst var det så..
Har bara behövt använda de digitala input kanalerna tidigare så hade inte stor koll på outputen.
Klantigt misstag..

Nu blir det inköp av transistorer imorgon :)


Sodjan: Det stod i databladet att man skulle ha en spänning inom intervallet 0-5V, så 3 kändes bra :)
Har ingen trimpot hemma :/
Såg senare i en av pdf:erna du länkade till att vissa LCDer ville ha en negativ spänning och att man därför bör sätta den som 0V.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

De som vill ha en negativ kontrastspänning är de som kallas
"extended temperature range". Det gäller inte för just denna.

De flesta LCD'er ger en "bild" (kanske inte optimal) om man "jordar"
kontrastpinnen. Med en 10 k trimpot kan man justera kontrasten som
man vill ha den.

> Nu blir det inköp av transistorer imorgon...

Till vadå ?
xezer
Inlägg: 65
Blev medlem: 8 mars 2005, 20:41:21

Inlägg av xezer »

Nu är det strax dags att lägga ner det här och gå och lägga sig, men innan;
Jag skrotade K8055an och stack till stan och köpte mig en PIC16F628A :D
Har suttit och försökt lista ut vad som är fel med koden i några timmar nu men kan inte finna vad det är :(

såhär ser kopplingen ut:
RB0 -> E
RB1 -> RS
RB2 -> RW
RB3-RB7 -> DB4-DB07

Finns säkert ett flertal konkreta fel som jag inte lagt märke till.
Tack på förhand!

Sodjan:
Det blev mycket bättre när man jordade kontrastpinnen, nu ser jag fyrkanterna :D Ska se om Kjell&Co har någon trimpot imorgon.

Kanske missförstod, men jag trodde man skulle leda den svaga spänningen från K8055 till basen på en transistor och dra 5V där igenom?

Kod: Markera allt


DISP_E	EQU	b'00000001'		;Enable
DISP_RS	EQU	b'00000010'		;Register-select
DISP_RW	EQU	b'00000100'		;Read/Write
DISP_STAT	EQU	b'00000000'		;Håller i statusen för DISP_RS och DISP_RW


;*********************************************
;*  Sänder data till display	               *
;*********************************************

DISPLAY_SEND:
	IORLW		DISP_STAT		;Lägger till eventuella status-bitar som E och RS
	MOVWF		PORTB 		;Skickar till displayen
	XORLW		DISP_E 		;Tar bort Enable
	MOVWF		PORTB
	
	CALL		Delay_5ms ;Dröjer 5mSek
	XORLW		W
	MOVWF		PORTB
	RETURN

	

;*********************************************
;*  Initiera display 	             	   *
;*********************************************
DISPLAY_INIT:
	CALL		Delay_5ms
	CALL		Delay_5ms 
	CALL		Delay_5ms 
	CALL		Delay_5ms ;Låter displayen starta upp i 20mSek

	MOVLW		b'00011000'
	CALL		DISPLAY_SEND	; 8-bit

	MOVLW		b'00011000'
	CALL		DISPLAY_SEND	; 8-bit

	MOVLW		b'00011000'
	CALL		DISPLAY_SEND	; 8-bit

	MOVLW		b'00010000'
	CALL		DISPLAY_SEND	; 4-bit

	MOVLW		b'00010000'
	CALL		DISPLAY_SEND
	MOVLW		b'01000000'
	CALL		DISPLAY_SEND	; 2rader och 5x7pixlars font

	MOVLW		b'00000000'
	CALL		DISPLAY_SEND
	MOVLW		b'01000000'
	CALL		DISPLAY_SEND	; Display off, curs off, blink off

	MOVLW		b'00000000'
	CALL		DISPLAY_SEND
	MOVLW		b'00001000'
	CALL		DISPLAY_SEND	; Clear display

	MOVLW		b'00000000'
	CALL		DISPLAY_SEND
	MOVLW		b'00110000'
	CALL		DISPLAY_SEND	; Display shift off

	MOVLW		b'00000000'
	CALL		DISPLAY_SEND
	MOVLW		b'01111000'
	CALL		DISPLAY_SEND	; Display on, curs on, blink on

	
	RETURN	
	


;*********************************************
;*  Start rutinen 	             	   *
;*********************************************
START:
	;###Initiera PICen
	MOVLW		b'00000111'
	MOVWF		CMCON			;Alla pinnar ska vara digitala

	BSF		STATUS, RP0		;Switchar till Bank1

	MOVLW		b'11111'
	MOVWF		TRISA			;Alla pinnar på PortA är inputs

	MOVLW		b'0000000'
	MOVWF		TRISB			;Alla pinnar på PortB är outputs
	
	BCF		STATUS, RP0		;Switchar tillbaka till Bank0
	;###


	BSF		DISP_STAT,DISP_E	;Sätter Enable pinnen
	CALL		DISPLAY_INIT	;Initiera displayen
	BSF		DISP_STAT,DISP_RS ;Sätter RS-flaggan så det är tecken vi handskas med nu
	
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Ett par småsaker...

R/W. Om du inte vill läsa från modulen, så kan du lägga den fast i "write" läge.
En pinne mindre att hantera... :-)

> RB3-RB7 -> DB4-DB07

Hur har du kopplat 5 pinnar på PIC'en till 4 pinnar på modulen ???

Hur kommer koden till "START" ??

Jag för står inte hur "E" togglas i "DISPLAY_SEND", jo förresten, det gör jag,
men det var snårigt skrivet...


> RB1 -> RS
> DISP_RS EQU b'00000010'
> BSF DISP_STAT, DISP_RS

Detta stämmer inte överens.
RB1 är bit *1* i PORTB (alltså andra biten).
DISP_RS sätts till värdet 2 och BSF'en sätter bit 2 i DISP_STAT (alltså tredje biten).

> jag trodde man skulle leda den svaga spänningen från K8055 till basen på en transistor och dra 5V där igenom?

Jag vet inte hur K8055 ser ut, men det låter konstigt... Vilken "5V" och till vad ?
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Inlägg av vfr »

> RB1 -> RS
> DISP_RS EQU b'00000010'
> BSF DISP_STAT, DISP_RS

Detta stämmer inte överens.
RB1 är bit *1* i PORTB (alltså andra biten).
DISP_RS sätts till värdet 2 och BSF'en sätter bit 2 i DISP_STAT (alltså tredje biten).


För att förtydliga det sodjan skriver lite: Bit-parametern till "BSF" skall vara bitnumret (0-7) och inte en bitmask.
xezer
Inlägg: 65
Blev medlem: 8 mars 2005, 20:41:21

Inlägg av xezer »

Lite framsteg, cursorn blinkar, fast vid 5:e tecknet och hela raden är fyllt med 4kanter.
Den verkar som sagt inte vilja clear:a vid initieringen, sen att den hoppar 5steg har jag ingen aning om varför.


Såhär ser initieringen ut nu:


0011
0011 ; 8-bit

0011
0010 ; 4bit!

0010
1000 ; 2rader och 5x7pixlars font

0000
1000 ; Display off, curs off, blink off

0000
0001 ; Clear display

0000
0110; Display shift off

0000
1111 ; Display on, curs on, blink on

Något jag missat? :roll:

Sodjan:
Det där med 5pinnar till 4pinnar är även för mig ett mysterium :)
RB4->RB7 ska det vara :)


Koden kommer till start genom:

Kod: Markera allt

		ORG	0		;Resettar vector addressen
		GOTO	RESET		;Hoppa till START vid boot
Ville inte posta för mycket kod, så försökte hålla mig till det som jag antog var fel. Fast det är klart, vad jag antar hör oftast inte hit då jag brukar ha fel :(
Detta stämmer inte överens.
RB1 är bit *1* i PORTB (alltså andra biten).
DISP_RS sätts till värdet 2 och BSF'en sätter bit 2 i DISP_STAT (alltså tredje biten).
Det där är ordnat nu :)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> RB4->RB7 ska det vara

OK, men då ser detta konstigt ut :

> MOVLW b'00011000'
> CALL DISPLAY_SEND ; 8-bit

Du sätter RB3-RB6...

Håll reda på bitarna !!

EDIT :

V.v förklara vad du tror att "XORLW W" i DISPLAY_SEND gör !
Skriv svar