HD44780 - "å" finns inte.
- Klas-Kenny
- Inlägg: 11841
- Blev medlem: 17 maj 2010, 19:06:14
- Ort: Växjö/Alvesta
HD44780 - "å" finns inte.
Då vi bor i det avlånga landet Sverige skulle jag väldigt gärna kunna skriva alla våra bokstäver på min LCD, men har nu uppmärksammat att å inte finns med i ASCII-tabellen HD44780 går efter, finns det något sätt att lösa detta?
Kan man på något vis t.ex. skriva in pixlar på skärmen manuellt, och på så sätt utforma ett Å? Eller är jag helt körd?
Ifall det spelar någon roll så är skärmen jag håller på med en Sån här.
Kan man på något vis t.ex. skriva in pixlar på skärmen manuellt, och på så sätt utforma ett Å? Eller är jag helt körd?
Ifall det spelar någon roll så är skärmen jag håller på med en Sån här.
Re: HD44780 - "å" finns inte.
HD44780 har 8 adresser/minnesplatser för egna tecken.
Där kan du ladda vilka tecken du vill. Det blir lite extra
kod för att "mappa" t.ex "åÅ" till dessa, men så är det
alltid med HD44780. Eller 16 adresser är det kanske.
Den PDF som det länkades till har hur som helst detaljerna...
Där kan du ladda vilka tecken du vill. Det blir lite extra
kod för att "mappa" t.ex "åÅ" till dessa, men så är det
alltid med HD44780. Eller 16 adresser är det kanske.
Den PDF som det länkades till har hur som helst detaljerna...
- Klas-Kenny
- Inlägg: 11841
- Blev medlem: 17 maj 2010, 19:06:14
- Ort: Växjö/Alvesta
Re: HD44780 - "å" finns inte.
Den här kan vara till hjälp: http://www.darreltaylor.com/files/CustChar.htm
Re: HD44780 - "å" finns inte.
Dessa värden tycker jag ser bra ut.
Kod: Markera allt
LCDOUT 254,64,4,10,14,17,17,31,17,17 ' Cust Char #0
LCDOUT 254,72,10,0,14,17,17,31,17,17 ' Cust Char #1
LCDOUT 254,80,10,0,14,17,17,17,17,14 ' Cust Char #2
LCDOUT 254,88,4,10,4,14,17,17,17,15 ' Cust Char #3
LCDOUT 254,96,0,10,0,14,17,17,17,15 ' Cust Char #4
LCDOUT 254,104,0,10,0,14,17,17,17,14 ' Cust Char #5
<BR>
- Klas-Kenny
- Inlägg: 11841
- Blev medlem: 17 maj 2010, 19:06:14
- Ort: Växjö/Alvesta
Re: HD44780 - "å" finns inte. - Ny fråga
Gör ingen ny tråd, känns lite överflödigt.
Jag vill läsa data ifrån min display med hjälp av min PIC16F690 men får inte min kod till att fungera, någon som kan hjälpa?
Just nu är det meningen att funktionen ska kopiera tecknet cursorn ligger på och lägga samma tecken ett steg till höger om det, men får det inte till att fungera.
Den kör funktionen CursorRight i alla fall, så mycket vet jag, men den skriver inte ut det som ligger i variabeln temp (Så antagligen skrivs inget dit.)
RC är 8bit-bussen mot DB0-7 och RA0 - E, RA1 - R/W samt RA2 - RS
Vad har jag missat?
Jag vill läsa data ifrån min display med hjälp av min PIC16F690 men får inte min kod till att fungera, någon som kan hjälpa?
Just nu är det meningen att funktionen ska kopiera tecknet cursorn ligger på och lägga samma tecken ett steg till höger om det, men får det inte till att fungera.
Kod: Markera allt
Read_Display
bsf STATUS,RP0
movlw 0xFF
movwf TRISC
bcf STATUS,RP0
bsf STATUS,RP1
clrf ANSEL
bcf STATUS,RP1
movlw b'00000110'
movwf PORTA
call Delay
movlw b'00000111'
movwf PORTA
call LongDelay
movf PORTC,w
movwf temp
movlw b'00000110'
movwf PORTA
bsf STATUS,RP0
clrf TRISC
bcf STATUS,RP0
bsf STATUS,RP1
movlw 0xFF
movwf ANSEL
bcf STATUS,RP1
call CursorRight
movf temp,w
movwf PORTC
Return
RC är 8bit-bussen mot DB0-7 och RA0 - E, RA1 - R/W samt RA2 - RS
Vad har jag missat?
Re: HD44780 - "å" finns inte.
Ja, förrutsatt att man *kan* läsa testen tillbaka från en HD44780 LCD.
Jag har inte en aning, det är nog väldigt sällan man har behov av det.
Man har ju själv skrivit till displayen innan så det är ju knappast
någon överraskning vad det står där...
Varför vill du läsa *från* displayen ?
Jag har inte en aning, det är nog väldigt sällan man har behov av det.
Man har ju själv skrivit till displayen innan så det är ju knappast
någon överraskning vad det står där...

Varför vill du läsa *från* displayen ?
- Klas-Kenny
- Inlägg: 11841
- Blev medlem: 17 maj 2010, 19:06:14
- Ort: Växjö/Alvesta
Re: HD44780 - "å" finns inte.
För att jag vill ha en knapp som sedan sparar ner vad som står på displayen ner i EEPROM på min pic, så jag kan få tillbaka det vid nästa uppstart.
(Meningsfullt? Nej. Det är bara för att lära mig
)
Och att spara det som skrivs i variabler direkt blir ganska jobbigt med tanke på hur resten av min kod ser ut, så jag vill göra på detta viset.
(Meningsfullt? Nej. Det är bara för att lära mig

Och att spara det som skrivs i variabler direkt blir ganska jobbigt med tanke på hur resten av min kod ser ut, så jag vill göra på detta viset.
Re: HD44780 - "å" finns inte.
Då har du "fel" i koden... 
Lägg upp ett par areor som motsvarar LCD'n.
Alla skrivningar från applikationskoden går mot dessa areor.
Sedan har du en central rutin som kopierar allt från bufferten
till själva LCD'n. Antingen på begäran eller timerstyrt.
Bufferten kan du sedan spara om du vill i EEPROM.

Lägg upp ett par areor som motsvarar LCD'n.
Alla skrivningar från applikationskoden går mot dessa areor.
Sedan har du en central rutin som kopierar allt från bufferten
till själva LCD'n. Antingen på begäran eller timerstyrt.
Bufferten kan du sedan spara om du vill i EEPROM.
Re: HD44780 - "å" finns inte.
Håller helt med Sodjan!
Men ja, det går utmärkt att läsa tillbaka skrivna tecken. Om du har kopplat med R/W-signalen. Den behövs egentligen bara till att läsa tillbaka tecken eller läsa busyflaggan, och båda grejorna går att klara sig utan om man vill.
Men ja, det går utmärkt att läsa tillbaka skrivna tecken. Om du har kopplat med R/W-signalen. Den behövs egentligen bara till att läsa tillbaka tecken eller läsa busyflaggan, och båda grejorna går att klara sig utan om man vill.
- Klas-Kenny
- Inlägg: 11841
- Blev medlem: 17 maj 2010, 19:06:14
- Ort: Växjö/Alvesta
Re: HD44780 - "å" finns inte.
Sodjan: Att jag har fel någonstans i koden har jag redan räknat ut, det är därför jag undrar, då jag redan lagt någon timme nu på att testa lite, och läsa igenom några olika datablad osv. och jag tycker att det känns som att jag gjort rätt, men någonstans är det antagligen något litet fel.
Och det är läsa från displayen som gäller, för jag skriver genom att bläddra mellan bokstäver och sedan flytta cursorn för att göra ny bokstav på annan plats på displayen, och ifall jag skulle på något sätt lagra bokstäverna direkt skulle det bli väldigt konstigt.
I så fall skulle jag få ha en knapp dedikerad bara till att spara bokstäver, och det tycker inte jag är fint.
Dessutom så ska det gå göra på detta viset, då vill jag lyckas med, för att sedan kunna det.
vfr: Ifall du läser mitt inlägg så ser du att jag skrivit vad som är inkopplat vart, alla olika data-signaler är inkopplade, inkl. R/W.
Annars hade det inte varit så konstigt att det inte fungerar
Och det är läsa från displayen som gäller, för jag skriver genom att bläddra mellan bokstäver och sedan flytta cursorn för att göra ny bokstav på annan plats på displayen, och ifall jag skulle på något sätt lagra bokstäverna direkt skulle det bli väldigt konstigt.
I så fall skulle jag få ha en knapp dedikerad bara till att spara bokstäver, och det tycker inte jag är fint.
Dessutom så ska det gå göra på detta viset, då vill jag lyckas med, för att sedan kunna det.
vfr: Ifall du läser mitt inlägg så ser du att jag skrivit vad som är inkopplat vart, alla olika data-signaler är inkopplade, inkl. R/W.
Annars hade det inte varit så konstigt att det inte fungerar

Re: HD44780 - "å" finns inte.
Visst kan du läsa av CG-ramet, det är inga problem, men det är fortfarande en snyggare lösning att skriva till buffert och ladda den.
Lagra bokstäverna gör du i en strängmatris lika stor som displayen, där varje enskild adress motsvarar en position på displayen.
Lagra bokstäverna gör du i en strängmatris lika stor som displayen, där varje enskild adress motsvarar en position på displayen.
Re: HD44780 - "å" finns inte.
> Att jag har fel någonstans i koden har jag redan räknat ut,
Men jag sa att du har "fel" i koden. "Felet" är alltså att du
försöker läsa från LCD'n alls...

När någon frågar om något som först inte låter riktigt vettigt,
så kollar jag aldrig koden utan försöker istället förstå varför
man har valt att göra som man gör alls.
> I så fall skulle jag få ha en knapp dedikerad bara till att spara bokstäver,
Inte alls.
Din kod vet vilken bokstav som senast blev vald när du "bläddrar".
Och den vet var på displayen du "bläddrar". Den vet också att du flyttar cursorn.
Så du behöver ingen extra knapp, bara lite extra kod när du flyttar cursurn för
att spara den senast "bläddrade" tecknet på samma plats i en LCD-buffert.
Men men...
Jag vet inte vad du har använt för dokumentation, men här är en i alla fall :
http://jescab2.dyndns.org/pub_docs/lcd_ ... manual.pdf.
Sidan 17 verkar vara rellevant...
Men jag sa att du har "fel" i koden. "Felet" är alltså att du
försöker läsa från LCD'n alls...


När någon frågar om något som först inte låter riktigt vettigt,
så kollar jag aldrig koden utan försöker istället förstå varför
man har valt att göra som man gör alls.
> I så fall skulle jag få ha en knapp dedikerad bara till att spara bokstäver,
Inte alls.
Din kod vet vilken bokstav som senast blev vald när du "bläddrar".
Och den vet var på displayen du "bläddrar". Den vet också att du flyttar cursorn.
Så du behöver ingen extra knapp, bara lite extra kod när du flyttar cursurn för
att spara den senast "bläddrade" tecknet på samma plats i en LCD-buffert.
Men men...

Jag vet inte vad du har använt för dokumentation, men här är en i alla fall :
http://jescab2.dyndns.org/pub_docs/lcd_ ... manual.pdf.
Sidan 17 verkar vara rellevant...
Re: HD44780 - "å" finns inte.
Det ser ut att finnas en del avigheter i Din kod.
För att skriva ett tecken:
- Sätt R/W till noll
- Sätt RS för att välja kontrollregister eller tecken
- Sätt dataportens TRIS till nollor
- Lägg ut tecknet på dataporten
- Sätt E till 1
- Exekvera ett par NOP
- Sätt E till 0
För att läsa från displayen:
- Sätt R/W till 1
- Sätt RS för att välja kontrollregister eller tecken
- Sätt dataportens TRIS till ettor
- Sätt E till 1
- Exekvera ett par NOP
- Läs tecknet från dataporten
- Sätt E till 0
- Sätt R/W till 0
- Sätt dataportens TRIS till nollor
När inget görs så skall E vara 0.
Det Du använder som dataport skall i "tomgång" vara satt som utångar. CMOS-ingångar som "flyter" kan orsaka att något drar mycket störm. Alternativt sätta motstånd på t.ex. 10k mellan datapinnarna och GND eller +5V så att dessa dras till en definierad nivå (en tydlig 0 eller 1) när varken processor eller display driver dem.
Du sätter ANSEL till ettor, detta är fel, det skall vara nollor om Du inte vill använda de analoga funktionerna. Du måste sätta TRIS för kontrollpinnarna till nollor så att dessa är utgångar. Dessa moment behöver endast göras i initieringen av programmet.
För att skriva ett tecken:
- Sätt R/W till noll
- Sätt RS för att välja kontrollregister eller tecken
- Sätt dataportens TRIS till nollor
- Lägg ut tecknet på dataporten
- Sätt E till 1
- Exekvera ett par NOP
- Sätt E till 0
För att läsa från displayen:
- Sätt R/W till 1
- Sätt RS för att välja kontrollregister eller tecken
- Sätt dataportens TRIS till ettor
- Sätt E till 1
- Exekvera ett par NOP
- Läs tecknet från dataporten
- Sätt E till 0
- Sätt R/W till 0
- Sätt dataportens TRIS till nollor
När inget görs så skall E vara 0.
Det Du använder som dataport skall i "tomgång" vara satt som utångar. CMOS-ingångar som "flyter" kan orsaka att något drar mycket störm. Alternativt sätta motstånd på t.ex. 10k mellan datapinnarna och GND eller +5V så att dessa dras till en definierad nivå (en tydlig 0 eller 1) när varken processor eller display driver dem.
Du sätter ANSEL till ettor, detta är fel, det skall vara nollor om Du inte vill använda de analoga funktionerna. Du måste sätta TRIS för kontrollpinnarna till nollor så att dessa är utgångar. Dessa moment behöver endast göras i initieringen av programmet.
Senast redigerad av Marta 6 juli 2010, 12:21:48, redigerad totalt 4 gånger.