HD44100H är det några problem?

Lysdioder, Optiska sensorer, Fiberoptik, Displayer, Lasrar, Optiska kopplare
exos
Inlägg: 194
Blev medlem: 24 november 2005, 21:04:25

Inlägg av exos »

Har en fråga... har en kod jag har hittat på internet ang Initialize LCD..
kolla här....

wreg är r16, och det är den som är intressant....i detta fallet.

Kod: Markera allt

ldi	wreg,0		;Setup port pins
		out	PORTD,wreg	;Pull all pins low
		ldi	wreg,0xff	;All pins are outputs
		out	DDRD,wreg
		ldi	timeout,256	;Wait at least 15 mS at power up
		rcall	delay
		ldi	wreg,3		;Function set
		out	PORTD,wreg
		sbi	PORTD,lcde	;Toggle enable line
		cbi	PORTD,lcde
		ldi	timeout,65	;Wait at least 4.1 mS
		rcall	delay
		ldi	wreg,3		;Function set
		out	PORTD,wreg
		sbi	PORTD,lcde	;Toggle enable line
		cbi	PORTD,lcde
		ldi	timeout,2	;Wait at least 100 uS
		rcall	delay
		ldi	wreg,3		;Function set
		out	PORTD,wreg
		sbi	PORTD,lcde	;Toggle enable line
		cbi	PORTD,lcde
		ldi	wreg,2		;Function set, 4 line interface
		out	PORTD,wreg
		sbi	PORTD,lcde	;Toggle enable line
		cbi	PORTD,lcde
		ldi	wreg,0b11110000	;Make 4 data lines inputs
		out	DDRD,wreg
Jag är med på det mesta här men!! det finns en sak som jag undrar...
vad är det som bestämmer att just wreg,3 är för att sätta 4 line interface ?
och att wreg,2 är "function set" ?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Därför att "3" och "4" stämmer överens med hur LCD'n är inkopplad.

Eller vad menar du igentligen ?
exos
Inlägg: 194
Blev medlem: 24 november 2005, 21:04:25

Inlägg av exos »

aja...ok ;)

men jag har fortfarande ett problem. det verkar inte som om den går igång riktig, om man sätter 5V på plus pinnen jordar jord, och jordar kontrast pinnen på LCD´n så borde man väl se segmenten!?!? detta fungar inte...

men om jag bara kopplar på 5V och jordar kontrast pinnan.... och sen "duttar " jorden på jord så blinkar den en rad med pixlar, så duttar man igen då blinkar det till nån annanstans...

Nån som vet vad detta kan bero på? får panik...
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> om man sätter 5V på plus pinnen jordar jord, och jordar kontrast pinnen
> på LCD´n så borde man väl se segmenten!?!? detta fungar inte...

På de flesta moduler, brukar man se en mörk bakgrund där tecknen normalt
ska vara. Bäst ser man effekten med en pot på kontrastpinnen som man
vrider fram och tillbaka mellan 5V och Jord.

Notera att moduler med "extended temperature range" (brukar betyda att
de kan används vid minusgrader C), kan behöva en negativ kontrastspänning.

> men om jag bara kopplar på 5V och jordar kontrast pinnan....
> och sen "duttar " jorden på jord...

Tja, när man gör så så kan väll vad som helst hända... :-)
exos
Inlägg: 194
Blev medlem: 24 november 2005, 21:04:25

Inlägg av exos »

hahaha, ja precis, allt kan hända... hmm negativ spänning? hur skall ja trolla till det ?

5V på jord o jord på 5V ?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Nja, jag bara nämnde det... :-)
Jag har juinte en aning om ifall du har en sådam LCD.
Enklast att testa det är med ett batteri på ett par volt.
Plus på batteriet till LCD'ns "Jord" ger en negativ spänning på batteriets "nolla".
Enkelt att testa, men inte så sannolikt...

EDIT : Det är alltså *bara* kontrastpinnen som skall ha neg spänning !
exos
Inlägg: 194
Blev medlem: 24 november 2005, 21:04:25

Inlägg av exos »

testade LCD´n + till jord och LCD´n jord till 5V sen kontrasten till jord då blinka det till försvann, sen blir det så så fort ja dattar med nån av kablarna, men det stannar inte kvar hur jag än gör...
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> testade LCD´n + till jord och LCD´n jord till 5V

Du får absolut inte växla 5V och jord, om det är det du menar !!
Med lite tur så har LCDn "överlevt"...

> men det stannar inte kvar hur jag än gör...

Alltså, så snart LCDn kör sin interna självtest, så rensas särmen.
Inget konstigt..

Det enda säkra settet att testa LCDn är att ansluta den korrekt och
prova att skriva något till den (från processoern). Finns inget annat sätt....
exos
Inlägg: 194
Blev medlem: 24 november 2005, 21:04:25

Inlägg av exos »

okej.... har inte lyckats med min kod riktigt, skulle behöva en som bara visar att den funkar ASM format... jag har kopplat såhär

http://www.wagonpack.com/sebbepix/avrlcd.jpg
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Jag förstår inte...

I schemat har du kopplat PortA och PortB, men i koden ovan
använder du bara PortD. Kanske något med AVR som jag inte förstår...
exos
Inlägg: 194
Blev medlem: 24 november 2005, 21:04:25

Inlägg av exos »

Nej du har helt rätt, men den koden ovan är taget ur en ja hitta på nätet, i den koden så är det en massa knappar inkopplade jag det e en massa grejer i den koden som snurrar till det för mig försökte göra om den men blev pankaka då den inte heller är skriver för ATtiny26 som jag använder.

så schemat som ja la upp nu stämmer, jag skulle bara behöva en kod som visar ett livstecken på min LCD ;)
exos
Inlägg: 194
Blev medlem: 24 november 2005, 21:04:25

Inlägg av exos »

Det är kopplat som ovanstående schema ...och här e koden

Kod: Markera allt



.include "c:\Program\Atmel\AVR Tools\AvrAssembler2\Appnotes\tn261def.inc"


;***** Global register variables
.def	wreg	=R16		;General use working register
.def	timeout	=R17		;Timeout value passed to subroutine
.def	lcdstat	=R18		;LCD busy/wait status
.def	longtime=R19		;Long timer for powerup
.def	temp 	=R20
.def	test	=R21		;test register
.def	monades	=R22
.def	dekades	=R23

;***** Other equates
.equ	lcdrs	=0			;LCD rs pin connected to PA0
.equ	lcde	=1			;LCD e pin connected to PA1
.equ	line1   =0x80		;1ç ãñáììç ôïõ LCD
.equ	line2   =0xC0		;2ç ãñáììç ôïõ LCD
.equ	col1	=0b11101111	;Êïëüíá 1
.equ	col2    =0b11011111	;Êïëüíá 1
.equ	col3    =0b10111111	;Êïëüíá 1
.equ	col4    =0b01111111	;Êïëüíá 1


;	Main program entry point on reset

reset:


		ldi	temp,RAMEND
		out	SPL,temp		;Init Stack Pointer


		rcall	longdelay		;Delay some time
		ldi	temp,0b00000000 	;PB0,1,2,3,4,5,6,7 outputs
		out	DDRB,temp
		ldi	temp,0b00000000	;PBA,1,2,3,4,5,6,7 outputs
		out	DDRA,temp

		rcall	lcdinit			;Initialize LCD module

;=========================================================================
;		Initialize LCD module
;=========================================================================

lcdinit:

		ldi	wreg,0		;Setup port pins
		out	PORTB,wreg	;Pull all pins low
		ldi	wreg,0xff	;All pins are outputs
		out	DDRB,wreg
		ldi	timeout,128	;Wait at least 15 mS at power up
		rcall	delay
		ldi	wreg,3		;Function set
		out	PORTB,wreg
		sbi	PORTA,lcde	;Toggle enable line
		cbi	PORTA,lcde
		ldi	timeout,65	;Wait at least 4.1 mS
		rcall	delay
		ldi	wreg,3		;Function set
		out	PORTB,wreg
		sbi	PORTA,lcde	;Toggle enable line
		cbi	PORTA,lcde
		ldi	timeout,2	;Wait at least 100 uS
		rcall	delay
		ldi	wreg,3		;Function set
		out	PORTB,wreg
		sbi	PORTA,lcde	;Toggle enable line
		cbi	PORTA,lcde
		ldi	wreg,2		;Function set, 4 line interface
		out	PORTB,wreg
		sbi	PORTA,lcde	;Toggle enable line
		cbi	PORTA,lcde
		ldi	wreg,0b11110000	;Make 4 data lines inputs
		out	DDRB,wreg
	
;		At this point, the normal 4 wire command routine can be used

		ldi	wreg,0b00100000	;Function set, 4 wire, 2 line, 5x7 font
		rcall	lcdcmd
		ldi	wreg,0b00001100	;Display on,  cursor off, blink off
		rcall	lcdcmd
		ldi	wreg,0b00000110	;Address increment, no scrolling
		rcall	lcdcmd

		ret

lcdcmd:

		mov	test,wreg
		rcall	lcdwait
		ldi	wreg,0xFF
		out 	DDRB,wreg
		mov	wreg,test
		mov	test,wreg
		swap	wreg
		andi	wreg,0X0F
		out	PORTB,wreg
		sbi	PORTA,lcde	;Toggle enable line
		cbi	PORTA,lcde
		mov	wreg,test
		andi	wreg,0x0F	;Strip off upper bits
		out	PORTB,wreg	;Put on port
		sbi	PORTA,lcde	;Toggle enable line
		cbi	PORTA,lcde
		ldi	wreg,0xF0	;Make 8 data lines inputs
		out	DDRB,wreg
		ret		

lcdwait:

		ldi	wreg,0xFF	;Make 8 data lines inputs
		out	DDRB,wreg
		cbi	PORTA,lcdrs	;Set register select to command

delay:	
		
		ldi 	test,64	
cagain:		dec	test
		brne 	cagain
		dec 	timeout
		brne 	delay
		ret

longdelay:
		ldi	longtime,180	;
		ldi	timeout,128	;

nån som finner nåt opassande...
Skriv svar