Får igång display men kan inte skriva?

Lysdioder, Optiska sensorer, Fiberoptik, Displayer, Lasrar, Optiska kopplare
Rocky_AL
Inlägg: 617
Blev medlem: 7 december 2006, 15:14:50
Ort: Stockholm

Får igång display men kan inte skriva?

Inlägg av Rocky_AL »

Jag har en alfanumerisk display med 16x2 tecken (datablad finns här)

och jag har kopplat denna såhär:
Bild
http://img250.imageshack.us/img250/6901/dispbn7.jpg

Jag har även satt pull-down motstånd på alla använda portar (10k).
Kristallen jag använder är en på 4,2MHz.

Koden är skriven i assembler och ser ut såhär:

Kod: Markera allt

	list      p=16F628A           ; list directive to define processor
	#include <p16F628A.inc>       ; processor specific variable definitions

	errorlevel  -302              ; suppress message 302 from list file


	__CONFIG   _CP_OFF & _DATA_CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _HS_OSC

INT   CODE 0x0004
	retfie
RST   CODE     0x0000
	goto     Init
;****Variablar**** 
	UDATA

	UDATA_SHR
	COUNT1 RES 1

	CODE
Init

;Stänger av analoga funktioner

	BANKSEL PORTA
	clrf PORTA
	BANKSEL CMCON
	movlw 0x07
	movwf CMCON

;Sätter variablar
	movlw 0xFF
	movwf COUNT1

;Sätter portar
	BANKSEL TRISA
	clrf TRISA
	BANKSEL PORTA
	clrf PORTA
	BANKSEL TRISB
	clrf TRISB
	BANKSEL PORTB
	clrf PORTB

;Startar displayen
	call Delay
	call Delay
	bsf PORTB,6
	call Delay
	clrf PORTB
	call Delay
;Initierar displayen. (nibble mode, ingen positionsblinker)
	movlw 0x50
	movwf PORTB
	call Delay
	bcf PORTB,6
	call Delay
;Skriver första halvan av bokstaven.
	movlw 0xFC
	movlw PORTB
	call Delay
	bcf PORTB,6
	call Delay
	clrf PORTB
	call Delay
;skriver andra halvan av bokstaven.
	movlw 0xFC
	movlw PORTB
	call Delay
	bcf PORTB,6
	call Delay
	clrf PORTB
	

Start
	call Delay
	goto Start

;Delay-loop på 256 instruktioner.
	Delay CODE
Delay
	decfsz COUNT1,F
	goto Delay
	movlw 0xFF
	movwf COUNT1
	return

	end
Displayen startar aldeles utmärkt och initieringen verkar också fungera, för jag ser iaf att jag har 2 rader så det måste ju fungera. Men det kommer inte upp någonting på skärmen alls. Det som borde komma upp på skärmen är ju bokstaven på b'11111111', alltså en heltäckande ruta, men jag får som sagt inget alls. Vad kan felet vara?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Om du kör 4-bitars mode så kan du (ska du, säger en del) lämna de
4 lediga pinnarna oanslutna.

> för jag ser iaf att jag har 2 rader

Hur ser det ut ?

> Det som borde komma upp på skärmen är ju bokstaven på b'11111111',

Hör hellre en bokstav som går att känna igen.
Rocky_AL
Inlägg: 617
Blev medlem: 7 december 2006, 15:14:50
Ort: Stockholm

Inlägg av Rocky_AL »

men om jag lämnar de 4 oanvända oanslutna så kan jag väl inte ens starta displayen, eftersom db2 måste vara 1 för att starta, det går väl ändå inte om den är oansluten/ansluten till GND.


Anledningen till att jag vet att jag har 2 rader är att kontrasten blir mkt svagare och framförallt så ser man mörka rutor på båda raderna.


nu har jag ändrat bokstaven b'11111111' till b'01010101' (0xFC har alltså blivit 0xD4 i koden), alltså ett stort "U". Händer fortfarande inget.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

*OM* du kör 4-bitars mode, så behöver de andra 4 data ledningarna inte
vara anslutna alls. Det är ju det som är finessen med 4-bitars mode...

> alltså ett stort "U". Händer fortfarande inget.

Nej, jag trodde inte det heller. Men det blir lite tydligare *när* det händer något... :-)

Vad symboliserar siffrorna på bilden av 628A'an ?
Rocky_AL
Inlägg: 617
Blev medlem: 7 december 2006, 15:14:50
Ort: Stockholm

Inlägg av Rocky_AL »

Jag har naturligtvis inte kopplat de 4 oanvända till PICen, de är bara kopplade till antingen +5V eller GND, men man slipper de helt och hållet i 4-bit mode? Då kan man inte välja om man vill ha blink tex.


Glömde visst säga att siffrorna på bilden, på PICen är port B (RB0-RB7).
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Om man kör en HD44780 LCD i 4-bitars mod, så bör man inte
koppla de 4 oanvända data-ledningarna någonstans alls, varken
till 5V eller GND. De har interna pullup motstånd så det behövs inte
av den anledningen, och om man vill köra läsning också så blir det
en konflikt när LCD'n försöker driva alla 8 ledningarna.

Det där med blink förstår jag inte.

Varför har du lagt dataledningarna mitt i PORTB ???
Blir väldigt struligt att använda SWAPF för att köra ut ett 8-bitars tecken.

Du behöver en mycket längre delay efter power-on.

Sen ser din "initiering" av modulen konstig ut.
Man kör ju först i 8-bitars mode innan man ger kommandot för
att switcha över till 4 bitar. Sedan behlövs det normalt ett par kommandon
för att sätta upp allt innan man kan börja skriva text till den...

Se även : http://www.jescab.se/HD44780.html
Rocky_AL
Inlägg: 617
Blev medlem: 7 december 2006, 15:14:50
Ort: Stockholm

Inlägg av Rocky_AL »

Sedan behlövs det normalt ett par kommandon
för att sätta upp allt innan man kan börja skriva text till den...
Vaddå för kommandon?

Min initiering kör det som kallas "system set" i databladet, inget konstigt med det?

Jag kan erkänna att det är osmart att ha dataledningarna i mitten men bortsett från det så borde det bli rätt ändå tycker jag. Har kopplat ur de oanvända dataledningarna på displayen nu också. Men då får jag som sagt en blinkande markör också.

edit: Vänta nu? Ska man sätta displayen i 4-bit mode det första man gör och sedan köra "display on" i databladet?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Din "edit:" låter rimlig. Jag har inte databladet...

EDIT: Du hade ju en länkt till det, ett ögonblick...

EDIT: Vanligt HD44780.
Eftersom du bara använder DB4-7, och bitarna för t.ex "display on"
ligger i DB0-3, så måste du först switcha till 4-bit mode för att
överhuvudtaget kunna skicka "display on".
Senast redigerad av sodjan 26 september 2007, 23:27:32, redigerad totalt 1 gång.
Rocky_AL
Inlägg: 617
Blev medlem: 7 december 2006, 15:14:50
Ort: Stockholm

Inlägg av Rocky_AL »

Får ta en titt på koden imorgon för nu börjar det bli sent.
Kollade lite i din kod också, du har en betydligt längre delay mellan instruktionerna, är det nödvändigt? I databladet så verkar det ju som en instruktion tar 40/46 μs.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Min delay är lång för att göra det hela helsäkert.
När det fungerar för en viss LCD modell kan man börja trimma ner tiderna.
Även om olika LCD'er är "HD44780 kompatibla" så kan timingen ibland variera mellan modeller.
BJ
Inlägg: 8864
Blev medlem: 11 april 2007, 08:14:53
Ort: En_stad

Inlägg av BJ »

Här är ett datablad för en sån styrkrets: http://www.sparkfun.com/datasheets/LCD/HD44780.pdf
På sidan 45 och 46 finns det start med 8-bitars-läge och 4-bitars-läge. Om du tittar där så skickar man samma kommando 3 gånger. Det är för att hamna rätt oavsett om den är i 8-bitars- eller 4-bitars-läge när man börjar. Annars kan man hamna i otakt.
Det, och dom långa tiderna i början, är för att nollställa styrkretsen till skärmen.

Som sodjan skrev så är det lite olika. I det här och ditt datablad så står det 30, 37 och 46 µs. Men tar man 100 µs då så fungerar det för alla dom,
och även för 100 µs-tiden där nere i inställnings-delen. Det blir ju lite långsammare än det behöver, men man brukar ju inte ha så bråttom när man skriver text.
Skriv svar