behöver hjälp med 16f84 och 2x16 lcd

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Onkel90
Inlägg: 13
Blev medlem: 30 oktober 2008, 23:09:36
Ort: Finland

behöver hjälp med 16f84 och 2x16 lcd

Inlägg av Onkel90 »

behöver hjälp med att skriva ut text på båda raderna på en 2x16lcd från en 16f84a
har att göra med en uppgift som skall vara färdig på fredag och vår lärare lär oss ingenting. har fått lite hjälp och kommit så här långt.

kör med 4mhz

kopplingen är

RB2 RS
RB3 E
RB4 LCD4
...... .......
RB5 LCD7

resten från lcdn till Ground förutom kontrast och belyningen


beklagar om allting inte är rätt stavat. jag är från finland.

Kod: Markera allt

TRISA	equ	0x5	
PORTA	equ	0x5
TRISB	equ	0x6
PORTB	equ	0x6
STATUS	equ	0x3
RP0	equ	0x5 ;bit i STATUS

W	equ	1
f	equ	0


;egna register
bits	equ	0x10

;LCD 4 bitarkopplade RB4-7
RS	equ	2	;på PORTB
E	equ	3


mcount	equ	11
ncount	equ	12
count1	equ	13
count2	equ	14

	org  0x0
	goto main

	org 0x10

main
	bsf	STATUS,RP0	;bank1 läge
	movlw 	b'00000000'       ;alla utgångar
	movwf	TRISA		;PORTA
	movwf	TRISB		;PORTB

	bcf	STATUS,RP0	;bank0

LCDinit

	bcf	PORTB,E		;enable på lcd låg
	bcf	PORTB,RS	;RS låg instruktioner
	call 	del_125		;100 us
	movlw 	0x38		;30 Skall skickas 3 gånger Wake UP
	movwf	bits	
	call 	flipbit		;bitar till PORTB
	call	pulse		;klockpuls
	call	del_125  	;över 4.1 ms
	movlw 	0x38
	movwf	bits	
	call 	flipbit
	call	pulse	
	call 	del_125		;100 us
	movlw 	0x28
	movwf	bits	
	call 	flipbit	
	call	pulse
	call	del_125
	movlw 	0x28		;4 bit -mode
	moVwf	bits	
	call 	flipbit	
	call	pulse	

	movlw	0x0c	
	call	send
	
	moVlw	0x01		;clear display
	call	send

text
	bsf	PORTB, RS	;display i textmode
	movlw	'v'		;ascii värdet för J till w
	call	send	
	movlw	'o'
	call	send
	movlw	'd'		
	call	send
	movlw	'k'
	call	send
	movlw	'a'		
	call	send

stop
 	goto	stop		;program stopp


send	movwf	bits
	call	flipbit
	call 	pulse
	swapf	bits,f
	call	flipbit
	call	pulse	
	return

flipbit	
bcf	PORTB,4
	btfsc 	bits,4
	bsf	PORTB,4
	bcf	PORTB,5
	btfsc	bits,5	
	bsf	PORTB,5
	bcf	PORTB,6
	btfsc 	bits,6
	bsf	PORTB,6
	bcf	PORTB,7
	btfsc	bits,7
	bsf	PORTB,7
	return

pulse	nop
	nop
	bsf	PORTB,E		;KLOCKPULS hög
	nop	
	nop
	bcf	PORTB,E		;klockpuls låg
	return

wait	movlw 	0x7d
	movwf	mcount
load	movlw	0x7d	
	movwf	ncount
dec	decfsz 	ncount,f
	goto dec
	decfsz 	mcount,f
	goto	load
	return

;***************** delay 125 us ***********************

del_125	movlw 	0x54	;125us
	movwf	count1
repeat1	decfsz	count1,f
	goto	repeat1
	return        
	
;***********************************************

del_5	movlw	0x29           
	movwf	count2
repeat2	call	del_125
	decfsz	count2,f
	goto	repeat2
	return	

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

Inlägg av sodjan »

Återkom efter fredagen och berätta hur det gick. :-)
(Jag hoppas ingen gör erat skoljobb här...)

> beklagar om allting inte är rätt stavat. jag är från finland.

OK, så det är därför din SHIFT-tangent inte fungerar... ? :-)

Det heter bl.a "LCD", "16F84A", "MHz" och "Finland".

> TRISA equ 0x5

Varför använder ni inte INC filerna ?

> bsf STATUS,RP0 ;bank1 läge

Kolla upp BANKSEL i dokumentationen eller hjälpen...
Onkel90
Inlägg: 13
Blev medlem: 30 oktober 2008, 23:09:36
Ort: Finland

Inlägg av Onkel90 »

det är väl nog bara för att ja slarvar lite, men jag har spillt mycket öl och annat i tangentbordet. så jag måste slå på enter för att den skall fungera.
men skälet varför jag inte använder include filer så var att jag fick lite hjälp av läraren och det blev sådär då. men jag har försökt 10 tal gånger att få den att skriva till 2 rader. men det uppstår alltid samma fel.
att hälften av gångerna så kommer det ingen text på nedre raden. jag är tyvär inte alltför bra på pic programering


så här började det se ut när jag skrev om den till 2 rader.

men den skriver inte alltid ut på andra raden..
hjälp?

Kod: Markera allt

;************************************************************************
     		LIST P=16F84           ;  16F84 Runs at 4 MHz		
           	INCLUDE "p16f84.inc"

;****** OWN Bits ********************************************************
c		equ		0
COUNT	equ		10
COUNT1	equ		11
COUNT2	equ		12
COUNT3	equ		13
BITS	equ		14

;****** DEFINITIONS *****************************************************

#DEFINE	RS 		PORTB, 2        ;  RA2 is RS line of lcd
#DEFINE	E 		PORTB, 3        ;  RA3 is E line of lcd
#DEFINE	D4 		PORTB, 4        ;  RA4 is D4 line of lcd
#DEFINE	D5 		PORTB, 5        ;  RA5 is D5 line of lcd
#DEFINE	D6 		PORTB, 6        ;  RA6 is D6 line of lcd
#DEFINE	D7 		PORTB, 7        ;  RA7 is D7 line of lcd

;************************************************************************
		org		0x00
		goto	MAIN
		org		0x10
;************** MAIN ****************************************************
MAIN
		call	INIT	;ställer portar
		call	INITLCD
		call	CLRLCD
		call	STEXT	;visar start text
		call	LCDRAD1
		call	Dlay5 
		call	STEXT2
;************************************************************************
STOP
		goto	STOP
									
;************************************************************************
INIT
		bsf		STATUS, RP0
		movlw	b'00000000'
		movwf	TRISB
		movwf	TRISA
		bcf		STATUS, RP0
		call	Dlay5 
		call	INITLCD
		RETURN

;***** LCD **************************************************************
INITLCD	
  		bcf		E			;enable på lcd låg
		bcf		RS			;RS låg instruktioner
		call	Dlay125 
		movlw	0x38
		movwf	BITS
		call	FLIPBIT
		call	PULSE
		call	Dlay125 
		movlw	0x28
		movwf	BITS
		call	FLIPBIT
		call	PULSE
		call	Dlay125  
		movlw	0x28
		call	SEND
		movlw	b'00101000' 	; 4 bitar och 2 linjer
		call	SEND
		movlw	0x0c		; display on 
		call	SEND
		movlw	0x01
		call	SEND
		call	Dlay5 
		RETURN

;************************************************************************
LCDRAD1
		bcf		E
		bcf		RS
		call	Dlay125 
		movlw	0xc0
		call	SEND
		bsf		RS
		call	Dlay5 
		RETURN

;************************************************************************
CLRLCD
		bcf		E
		bcf		RS
		call	Dlay125 
		movlw	0x01
		call	SEND
		bsf		RS
		call	Dlay5 
		RETURN

;************************************************************************
SEND
		movwf 	BITS
		call	FLIPBIT
		call	PULSE	
		swapf	BITS,F	
		call	FLIPBIT	
		call	PULSE
		call	Dlay125 
		RETURN

;************************************************************************
FLIPBIT
		bcf		D4	
		btfsc	BITS,4
		bsf		D4
		bcf		D5
		btfsc	BITS,5
		bsf		D5
		bcf		D6	
		btfsc	BITS,6
		bsf		D6
		bcf		D7
		btfsc	BITS,7
		bsf		D7
		RETURN

;***************** delay 125 us ***********************
Dlay125
			movlw 	0x54	; 125us
			movwf	COUNT1
repeat1
			decfsz	COUNT1,F
			goto	repeat1
			return        
	
;***************** delay 5 ms *************************
Dlay5
			movlw	0x29     ; 5ms      
			movwf	COUNT2
repeat2
			call	Dlay125
			decfsz	COUNT2,F
			goto	repeat2
			return	

;************************************************************************		
PULSE
			nop
			nop
			bsf	E
			nop
			nop
			bcf	E
			RETURN
;************************************************************************
STEXT
			bsf		RS

			movlw	'v'
			call	SEND
			movlw	'o'
			call	SEND
			movlw	'd'
			call	SEND
			movlw	'k'
			call	SEND

			movlw	'a'
			call	SEND
			movlw	' '
			call	SEND
			movlw	'!'
			call	SEND
			movlw	' '
			call	SEND

			RETURN

;************************************************************************
STEXT2
			bsf		RS

			movlw	'1'
			call	SEND
			movlw	'2'
			call	SEND
			movlw	'3'
			call	SEND
			movlw	'4'
			call	SEND

			movlw	'5'
			call	SEND
			movlw	'6'
			call	SEND
			movlw	'7'
			call	SEND
			movlw	'8'
			call	SEND

			movlw	'9'
			call	SEND
			movlw	'0'
			call	SEND
			movlw	'1'
			call	SEND
			movlw	'1'
			call	SEND

			movlw	'1'
			call	SEND
			movlw	'2'
			call	SEND
			movlw	'1'
			call	SEND
			movlw	'3'
			call	SEND
			RETURN
	END
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> jag är tyvär inte alltför bra på pic programering

Tur att skolan finns där då... :-)

Tips, kolla upp adresserna, jag tror att det är ett hopp
mellan rad 1 och rad 2. Antingen lägg till kod för att sätta
rätt startadress för read 2, eller skriv ut ett gäng dummy tecken
för att stega fram adressen.

> det är väl nog bara för att ja slarvar lite,

Då ska du inte håller på med PICs. Det finns inget utrymme för slarv.
Onkel90
Inlägg: 13
Blev medlem: 30 oktober 2008, 23:09:36
Ort: Finland

Inlägg av Onkel90 »

>Tur att skolan finns där då...

vi har 2 lärare. 1 är senil och den andra orkar inte lära oss något. jag har många gånger frågat hjälp med det här 2x16LCD men just då "måste han gå på ett möte" och går iväg.

> Då ska du inte håller på med PICs. Det finns inget utrymme för slarv.

jag är inte så noga med att med om det kommer caps eller inte när jag skriver med folk. men jag vet nog hur vktigt det är i programmering.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> jag är inte så noga med att med om det kommer caps eller inte när jag skriver med folk.

"Folk" ??

OK, skit samma...
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Inlägg av vfr »

Då tycker jag nog att du ska tänka om. Lite iallafall. :wink: Hur bra läsbarheten är, påverkar definitivt hur många som orkar läsa ditt inlägg och därmed hur många eller hur relevanta svar du kommer att få. När någon visar att man lägger lite energi på sitt inlägg och presentationen av problemet, så blir andra betydligt villigare att själva hjälpa dig. Och tvärtom! Bara ett tips!
Onkel90
Inlägg: 13
Blev medlem: 30 oktober 2008, 23:09:36
Ort: Finland

Inlägg av Onkel90 »

Jo. men så oläsbara inlägg har jag vel ändå inte.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Det var inte det att det inte *går* att läsa, utan det var den totala bristen på
respekt inför de som förväntas läsa skiten som stör mig. Nåväl, du har i alla
fall fått så mycket hjälp som jag anser att det finns anledning att lägga på
ett skoljobb.
victor_passe
Inlägg: 2436
Blev medlem: 28 januari 2007, 18:45:40
Ort: Kungsbacka

Inlägg av victor_passe »

Om du kan skriva på rad 1 men inte på rad 2 så är det nog som sagt fel på addresserna för rad 2.
Kolla lite på vilka adresser som gäller.
Onkel90
Inlägg: 13
Blev medlem: 30 oktober 2008, 23:09:36
Ort: Finland

Inlägg av Onkel90 »

Jag har fått det fixat nu. Tittade lite på några andra projekt som använder lcd.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Kollade just min egen exempelkod för HD44780,
http://www.jescab.se/HD44780.html , och det var ju tydligt :

Kod: Markera allt

;
; Nu är rad och pos färdiga att addera ihop och skicka till LCD'n...
;
        movlw   h'80'           ; Bas-kommandot för LCD-position.
        addwf   lcd_tmp1, w     ; Lägg till rad (h'00' eller h'40')
        addwf   lcd_tmp2, w     ; Lägg till pos.
        call    lcd_send_cmd    ; Skicka kommandot (i W-reg)
Så första reden är 00 - 0F och den andra 40-4F (i hex)...
Skriv svar