PIC 16F628A en 128*32 LCD

Bavelt

Golden Member

Nooit wijzigende constantes horen niet in eeprom maar in flash (er is trouwens veel te weinig eeprom)

Als ik naar het ontwerp van de 1827 kijk, dan zie ik EEPROM en RAM.
Wordt dat RAM dan gebruikt als 'flash' opslag?

Wat is eigenlijk het nadeel om EEPROM te gebruiken voor constanten?

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

Op 17 november 2019 22:20:22 schreef Arco:
Een write heeft altijd een Ack. Bij een read moet je dat opgeven met (0) of (1) erachter.
De i2c1_Wr() functie geeft non-zero terug als er iets mis is (bijv. met Ack)

Ah, ok. Dan zou je dus in principe altijd bij de i2c write moeten afvragen of deze functie 0 teruggeeft zodat je een fatsoenlijke error-afhandeling krijgt.

Fouten zijn het bewijs dat je het probeert..
Arco

Special Member

Wat is eigenlijk het nadeel om EEPROM te gebruiken voor constanten?

Het is zinloos om nooit veranderende constantes in EEPROM te zetten. Flash is er tenslotte veel meer als eeprom.

Flash is programmageheugen, eeprom voor waardes die bewaard moeten worden, en ram voor tijdelijke opslag.

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Bavelt

Golden Member

Dus de constantentabel in mijn programma zit in het RAM geheugen, begrijp ik goed?

Als je een constantentabel in het programmageheugen stopt, dan gaat dat wel af van de maximale grootte van je programma, niet?

Hierbij een overview van de 1827 met dit programma:

Dus eigenlijk nog ruimte genoeg en zou het geen zin hebben om de constanten-tabel op te nemen in het flash geheugen (behalve dan de leesbaarheid van het programma, vanwege veel minder regels.)

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

pic basic code:

'==================================================================================================
Sub Procedure LCD_Fill(Dim pFill As Byte)                       'Fill display with character pFill
'==================================================================================================
 i2c1_Start()
 i2c1_Wr(0x78)
 
 Dim lx, ly As Byte

 - etc
-  etc

  

"Dim is not a valid identifier"

Waarom vind MikroBasic dit eigenlijk niet goed: een functieaanroep vanaf een subroutine. zou toch gewoon moeten kunnen?

Fouten zijn het bewijs dat je het probeert..
Arco

Special Member

Constantes zitten (zover ze in het programma gebruikt worden) altijd in flash...

Waarom vind MikroBasic dit eigenlijk niet goed: een functieaanroep vanaf een subroutine

Vindt Mikrobasic wel goed, moet werken...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Bavelt

Golden Member

Flash is programmageheugen, eeprom voor waardes die bewaard moeten worden, en ram voor tijdelijke opslag.

Dus de programmaregels en de gedefinieerde data (DIM, Const) van het programma zitten in de Flash. De RAM wordt dan gebruikt voor tussentijdse resultaten tijdelijk in op te slaan (bv uitkomsten van berekeningen, etc).

Dat zou dan inhouden dat je een constantentabel niet apart op hoeft te slaan in Flash (bv via Flash_Write), ze zitten er immers al in?

Fouten zijn het bewijs dat je het probeert..
Arco

Special Member

DIM zijn variabelen. Die kun je niet in flash zetten omdat ze kunnen veranderen.

Dat zou dan inhouden dat je een constantentabel niet apart op hoeft te slaan in Flash (bv via Flash_Write), ze zitten er immers al in?

Const MyBytes As Byte[5] = (1,2,3,4,5) wordt automatisch opgeslagen in flash.
Let wel: alleen indien gebruikt in het programma. Anders sloopt de compiler 't eruit...

Een simpele constante als Const Value = 4 die in het programma wordt gebruikt wordt helemaal niet opgeslagen, maar direct inline gebruikt.
(overal waar je 'Value' gebruikt wordt dat meteen door '4' vervangen tijdens compilatie)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Bavelt

Golden Member

Ik snap het Arco, dank.

Alleen: waar gebruik je dan Flash_Write nog voor, als het toch automatisch in Flash terechtkomt?
Wellicht om het wat geordend in het geheugen te krijgen?

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

Ik moet zeggen dat ik het erg leuk begin te vinden.

Ik heb vandaag geoefend met het gebruik van de tweede I2c op de 1827.
Het OLED-displaytje in combinatie met de DS3231 RTC.

Werkt perfect!

Fouten zijn het bewijs dat je het probeert..
Arco

Special Member

Flash_Write gebruik je om zaken in runtime op te slaan.Bijv. voor een bootloader...
En meeste nieuwere pics hebben geen eeprom meer, dus dan moet je een externe eeprom gebruiken, of in flash opslaan...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Bavelt

Golden Member

Nog een klein ander issue

Om karakters (maanden) weer te geven als string, wilde ik dit opnemen in een tabel. Bijvoorbeeld maand 05 weergeven als "mei".

05 is dan de index om de maand te selecteren.

Uit een vorige post haalde ik een voorbeeld

pic basic code:

 dim dat as string[12][3]  

De compiler pikt dit echter niet:

115 304 Syntax error: Expected "end" but "[" found Oled_3231.mbas

Fouten zijn het bewijs dat je het probeert..
Arco

Special Member

Met Char i.p.v. String werkt het wel (is tenslotte toch hetzelfde)
Ik gebruik nooit multi-level arrays, wordt meestal een zooitje...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Bavelt

Golden Member

Dubbele post..

[Bericht gewijzigd door Bavelt op maandag 18 november 2019 13:37:29 (98%)

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

Ik heb het al anders opgelost. Misschien een beetje omslachtig, maar ik heb nu geen tabel meer nodig.

uit de Read van de DS3231 komt:

pic basic code:

Time[6] = Bcd2Dec(i2c2_Rd(0)) 

Daarna roep ik een conversie procedure aan die de waarde omzet naar een karakter:

pic basic code:

 '==============================================================================
Sub function Convert (dim inp as word) as string[2]
Dim Wstring as string[5]
WordToStr(inp, Wstring)
Ltrim(Wstring)
Result = Wstring
End sub 

De datum velden worden dan:

pic basic code:

 Read_DS3231()
  Day = Convert(Time[4])
  Month = Convert(Time[5])
  Year = Convert(Time[6]) 

Weergegeven als cijfers, ook goed.

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

Ik heb al ontdekt dat het veel simpeler kan:

pic basic code:


ByteToStr(Time[4], Day)
Ltrim(Day)
Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

Op 17 november 2019 23:45:56 schreef Arco:
Constantes zitten (zover ze in het programma gebruikt worden) altijd in flash...
[...]
Vindt Mikrobasic wel goed, moet werken...

Dit mag niet:

pic basic code:

 program TestProc
 '==============================================================================
Sub Procedure Testen(Dim pFill As Byte)
'===============================================================================
 i2c1_Start()
 i2c1_Wr(0x78)
 I2c1_Stop()
 Dim Even as byte

 End Sub

main:

latb.3 = 1
while true wend
end. 

Maar dit mag wel:

pic basic code:

 program TestProc
 '==============================================================================
Sub Procedure Testen(Dim pFill As Byte)
'===============================================================================
 Dim Even as byte
 i2c1_Start()
 i2c1_Wr(0x78)
 I2c1_Stop()
 End Sub

main:

latb.3 = 1
while true wend
end. 

De DIM moet vóóraan in de procedure staan.

Fouten zijn het bewijs dat je het probeert..
Arco

Special Member

Da's normaal...

Het is een one-pass compiler. (alles wordt in één pass geevalueerd).
De compiler moet dus weten dat de locale variabele bestaat aan het begin van de routine voordat er code is uitgevoerd.
(daarbij is het ook wel zo netjes om het zo te doen)

(alhoewel in dit geval onbelangrijk: de variabele Even wordt nooit gebruikt en dus eruit gesloopt tijdens compilatie... ;) )
Met two-pass compilers zou het wel kunnen...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Bavelt

Golden Member

Het was maar een (loos) voorbeeld. Dat one pass had ik ook al gemerkt. Dat maakt dat je de procedures ook in de juiste volgordes moet plaatsen.
(bij .NET heb je dat niet, vanwege meerdere passes. Daar kan je ze groeperen zoals je wilt).
En inderdaad is het netter om de DIM's vooraan te zetten. Buiten de procedures moet het zelfs. Je mag in MB geen data declareren bij de instructies.

Tja, het dwingt hiermee ook wel een stuk netheid af.
Ik begin al aan MB te wennen. Het grote voordeel van BASIC vind ik de leesbaarheid. En al helemaal als je een tijdje niet meer naar een programma hebt omgekeken.
Maar veel anderen kiezen toch voor C-varianten. Ik heb inmiddels ook wat met Arduino (UNO) gespeeld maar loop daar nog niet warm voor. Alhoewel daar enorm veel voorbeelden van zijn te vinden.

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

Misschien gaat 't te snel? (zou moeten werken)

Ik heb vanavond nog even een testje gedraaid met de OLED 128*64 en de PIC16F1827.
Het is redelijk reproduceerbaar: Op een oscillatorfrequentie van 32Mhz wordt het zaakje instabiel (stoppen met tonen bij half gevuld scherm, etc.)
Op 8 Mhz draait het gewoon netjes en constant.
Blijkbaar heeft de display zijn grenzen wat dat betreft.

Ik blijf het nog steeds een wondertje vinden hoe scherp de lettertjes kunnen worden getoond!

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

Mbv 6 bytes wordt ieder karakter opgebouwd (ofwel getekend) op het scherm.
Wanneer je nu grotere karakters wilt tonen, moet je dan alles weer opnieuw gaan tekenen? (In Arduino zijn Font libraries zag ik in alle gauwigheid).

Is daar misschien ergens iets van voor MB?

Fouten zijn het bewijs dat je het probeert..
Arco

Special Member

MB weet niks van displays af, font zul je zelf moeten maken (of op Libstock vinden)
8x16 font:

pic basic code:


const Dos8x16 As Byte [1520]=   (

  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  '
  0x00,0x00,0x00,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x33,0x00,0x00,0x00,  ' !
  0x00,0xF3,0xF3,0x00,0x00,0xF3,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  ' "
  0x30,0xF3,0xF3,0x30,0x30,0xF3,0xF3,0x30,0x03,0x0F,0x0F,0x03,0x03,0x0F,0x0F,0x03,  ' #
  0x00,0x78,0xF3,0xCF,0xCF,0xCC,0x8C,0x00,0x00,0x0C,0x0C,0x3C,0x3C,0x0F,0x07,0x00,  ' $
  0x00,0x1C,0x1C,0xC0,0xF0,0x3C,0x0C,0x00,0x00,0x0C,0x0F,0x03,0x00,0x0E,0x0E,0x00,  ' %
  0x00,0xD8,0xFC,0xCC,0x7C,0x18,0x00,0x00,0x1F,0x3F,0x31,0x33,0x1F,0x3F,0x33,0x00,  ' &
  0x00,0x00,0x00,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  ' '
  0x00,0x00,0x00,0xF0,0xF8,0x1C,0x04,0x00,0x00,0x00,0x00,0x0F,0x1F,0x38,0x20,0x00,  ' (
  0x00,0x04,0x1C,0xF8,0xF0,0x00,0x00,0x00,0x00,0x20,0x38,0x1F,0x0F,0x00,0x00,0x00,  ' )
  0xC0,0xCC,0xFC,0xF0,0xF0,0xFC,0xCC,0xC0,0x00,0x0C,0x0F,0x03,0x03,0x0F,0x0C,0x00,  ' *
  0x00,0xC0,0xC0,0xF8,0xF8,0xC0,0xC0,0x00,0x00,0x00,0x00,0x07,0x07,0x00,0x00,0x00,  ' +
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x7C,0x3C,0x00,0x00,0x00,  ' ,
  0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  ' -
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x3C,0x00,0x00,0x00,  ' .
  0x00,0x00,0x00,0x80,0xE0,0x7C,0x1C,0x00,0x00,0x38,0x3E,0x07,0x01,0x00,0x00,0x00,  ' /
  0x00,0xF8,0xFC,0x0C,0x8C,0xFC,0xF8,0x00,0x00,0x1F,0x3F,0x31,0x30,0x3F,0x1F,0x00,  ' 0
  0x00,0x00,0x30,0xFC,0xFC,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,  ' 1
  0x00,0x38,0x3C,0x0C,0xCC,0xFC,0x38,0x00,0x00,0x30,0x3C,0x3F,0x33,0x30,0x30,0x00,  ' 2
  0x00,0x0C,0x0C,0xCC,0xFC,0x3C,0x0C,0x00,0x00,0x1C,0x3C,0x30,0x33,0x3F,0x1C,0x00,  ' 3
  0x00,0x00,0xC0,0xF0,0xFC,0xFC,0x00,0x00,0x00,0x0F,0x0F,0x0C,0x3F,0x3F,0x0C,0x00,  ' 4
  0x00,0xFC,0xFC,0xCC,0xCC,0xCC,0x8C,0x00,0x00,0x18,0x38,0x30,0x30,0x3F,0x1F,0x00,  ' 5
  0x00,0xF0,0xF8,0x9C,0x8C,0x8C,0x00,0x00,0x00,0x1F,0x3F,0x31,0x31,0x3F,0x1F,0x00,  ' 6
  0x00,0x0C,0x0C,0x0C,0xCC,0xFC,0x3C,0x00,0x00,0x00,0x3C,0x3F,0x03,0x00,0x00,0x00,  ' 7
  0x00,0x38,0xFC,0xCC,0xCC,0xFC,0x38,0x00,0x00,0x1F,0x3F,0x30,0x30,0x3F,0x1F,0x00,  ' 8
  0x00,0x78,0xFC,0xCC,0xCC,0xFC,0xF8,0x00,0x00,0x00,0x30,0x30,0x38,0x1F,0x0F,0x00,  ' 9
  0x00,0x00,0x00,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x3C,0x00,0x00,0x00,  ' :
  0x00,0x00,0x00,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0xC0,0x7C,0x3C,0x00,0x00,0x00,  ' ;
  0x80,0xC0,0xE0,0x70,0x38,0x18,0x08,0x00,0x00,0x01,0x03,0x07,0x0E,0x0C,0x08,0x00,  ' <
  0x00,0x30,0x30,0x30,0x30,0x30,0x30,0x00,0x00,0x03,0x03,0x03,0x03,0x03,0x03,0x00,  ' =
  0x08,0x18,0x38,0x70,0xE0,0xC0,0x80,0x00,0x08,0x0C,0x0E,0x07,0x03,0x01,0x00,0x00,  ' >
  0x00,0x38,0x3C,0x0C,0xCC,0xFC,0x38,0x00,0x00,0x00,0x00,0x37,0x37,0x00,0x00,0x00,  ' ?
  0xF0,0xF8,0x1C,0xCC,0x4C,0x98,0xF0,0x00,0x0F,0x1F,0x38,0x33,0x32,0x33,0x19,0x00,  ' @
  0x00,0xF0,0xF8,0x1C,0x1C,0xF8,0xF0,0x00,0x00,0x3F,0x3F,0x03,0x03,0x3F,0x3F,0x00,  ' A
  0x00,0xFC,0xFC,0xCC,0xCC,0xFC,0x78,0x00,0x00,0x3F,0x3F,0x30,0x30,0x3F,0x1F,0x00,  ' B
  0x00,0xF8,0xFC,0x0C,0x0C,0x3C,0x38,0x00,0x00,0x1F,0x3F,0x30,0x30,0x3C,0x1C,0x00,  ' C
  0x00,0xFC,0xFC,0x0C,0x1C,0xF8,0xF0,0x00,0x00,0x3F,0x3F,0x30,0x38,0x1F,0x0F,0x00,  ' D
  0x00,0xFC,0xFC,0xCC,0xCC,0xCC,0x0C,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x00,  ' E
  0x00,0xFC,0xFC,0xCC,0xCC,0xCC,0x0C,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,  ' F
  0x00,0xF8,0xFC,0x0C,0xCC,0xCC,0xCC,0x00,0x00,0x1F,0x3F,0x30,0x30,0x3F,0x1F,0x00,  ' G
  0x00,0xFC,0xFC,0xC0,0xC0,0xFC,0xFC,0x00,0x00,0x3F,0x3F,0x00,0x00,0x3F,0x3F,0x00,  ' H
  0x00,0x0C,0x0C,0xFC,0xFC,0x0C,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x00,0x00,  ' I
  0x00,0x00,0x00,0x00,0x00,0xFC,0xFC,0x00,0x00,0x1C,0x3C,0x30,0x30,0x3F,0x1F,0x00,  ' J
  0xFC,0xFC,0xC0,0xF0,0x3C,0x0C,0x00,0x00,0x3F,0x3F,0x00,0x03,0x0F,0x3C,0x30,0x00,  ' K
  0x00,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x00,  ' L
  0xFC,0xFC,0x70,0xC0,0x70,0xFC,0xFC,0x00,0x3F,0x3F,0x00,0x01,0x00,0x3F,0x3F,0x00,  ' M
  0x00,0xFC,0xFC,0xE0,0x80,0xFC,0xFC,0x00,0x00,0x3F,0x3F,0x01,0x07,0x3F,0x3F,0x00,  ' N
  0x00,0xF8,0xFC,0x0C,0x0C,0xFC,0xF8,0x00,0x00,0x1F,0x3F,0x30,0x30,0x3F,0x1F,0x00,  ' O
  0x00,0xFC,0xFC,0x0C,0x0C,0xFC,0xF8,0x00,0x00,0x3F,0x3F,0x03,0x03,0x03,0x01,0x00,  ' P
  0x00,0xF8,0xFC,0x0C,0x0C,0xFC,0xF8,0x00,0x00,0x1F,0x3F,0x38,0x1E,0x3F,0x37,0x00,  ' Q
  0xFC,0xFC,0x8C,0x8C,0xFC,0xF8,0x00,0x00,0x3F,0x3F,0x01,0x03,0x0F,0x3C,0x30,0x00,  ' R
  0x00,0x78,0xFC,0xCC,0x8C,0x8C,0x18,0x00,0x00,0x18,0x31,0x31,0x33,0x3F,0x1E,0x00,  ' S
  0x00,0x0C,0x0C,0xFC,0xFC,0x0C,0x0C,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,  ' T
  0x00,0xFC,0xFC,0x00,0x00,0xFC,0xFC,0x00,0x00,0x1F,0x3F,0x30,0x30,0x3F,0x1F,0x00,  ' U
  0x00,0xFC,0xFC,0x00,0x00,0xFC,0xFC,0x00,0x00,0x03,0x0F,0x3C,0x3C,0x0F,0x03,0x00,  ' V
  0xFC,0xFC,0x00,0x80,0x00,0xFC,0xFC,0x00,0x3F,0x1F,0x0E,0x07,0x0E,0x1F,0x3F,0x00,  ' W
  0x00,0x1C,0x7C,0xE0,0xE0,0x7C,0x1C,0x00,0x00,0x38,0x3E,0x07,0x07,0x3E,0x38,0x00,  ' X
  0x00,0x3C,0xFC,0xC0,0xC0,0xFC,0x3C,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,  ' Y
  0x00,0x0C,0x0C,0xCC,0xFC,0x3C,0x0C,0x00,0x00,0x3C,0x3F,0x33,0x30,0x30,0x30,0x00,  ' Z
  0x00,0x00,0x00,0xFC,0xFC,0x0C,0x0C,0x00,0x00,0x00,0x00,0x3F,0x3F,0x30,0x30,0x00,  ' [
  0x00,0x0C,0x0C,0xFC,0xFC,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x00,0x00,0x00,  ' \
  0x80,0xE0,0x78,0x1E,0x78,0xE0,0xE0,0x00,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x00,  ' ]
  0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  ' ^
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00,  ' _
  0x00,0x07,0x0E,0x1C,0x38,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  ' `
  0x00,0x00,0x60,0x60,0x60,0xE0,0xC0,0x00,0x00,0x1E,0x3F,0x33,0x33,0x3F,0x3F,0x00,  ' a
  0x00,0xFC,0xFC,0x60,0x60,0xE0,0xC0,0x00,0x00,0x3F,0x3F,0x30,0x30,0x3F,0x1F,0x00,  ' b
  0x00,0xC0,0xE0,0x60,0x60,0x60,0x00,0x00,0x00,0x1F,0x3F,0x30,0x30,0x30,0x30,0x00,  ' c
  0x00,0xC0,0xE0,0x60,0x60,0xFC,0xFC,0x00,0x00,0x1F,0x3F,0x30,0x30,0x3F,0x3F,0x00,  ' d
  0x00,0xC0,0xE0,0x60,0x60,0xE0,0xC0,0x00,0x00,0x1F,0x3F,0x32,0x32,0x33,0x33,0x00,  ' e
  0x00,0xC0,0xC0,0xF8,0xFC,0xCC,0xCC,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,  ' f
  0x00,0xC0,0xE0,0x60,0x60,0xE0,0xE0,0x00,0x00,0xCF,0xDF,0xD8,0xD8,0xFF,0x7F,0x00,  ' g
  0x00,0xFC,0xFC,0x60,0x60,0xE0,0xC0,0x00,0x00,0x3F,0x3F,0x00,0x00,0x3F,0x3F,0x00,  ' h
  0x00,0x00,0x60,0xEC,0xEC,0x00,0x00,0x00,0x00,0x00,0x30,0x3F,0x3F,0x30,0x00,0x00,  ' i
  0x00,0x00,0x00,0x00,0xEC,0xEC,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xFF,0x7F,0x00,0x00,  ' j
  0xFC,0xFC,0x80,0xC0,0xE0,0x60,0x00,0x00,0x3F,0x3F,0x03,0x07,0x1E,0x38,0x30,0x00,  ' k
  0x00,0x00,0x0C,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,0x30,0x3F,0x3F,0x30,0x00,0x00,  ' l
  0xC0,0xE0,0xE0,0xC0,0xE0,0xE0,0xC0,0x00,0x3F,0x3F,0x00,0x07,0x00,0x3F,0x3F,0x00,  ' m
  0x00,0xC0,0xE0,0x60,0x60,0xE0,0xC0,0x00,0x00,0x3F,0x3F,0x00,0x00,0x3F,0x3F,0x00,  ' n
  0x00,0xC0,0xE0,0x60,0x60,0xE0,0xC0,0x00,0x00,0x1F,0x3F,0x30,0x30,0x3F,0x1F,0x00,  ' o
  0x00,0xE0,0xE0,0x60,0x60,0xE0,0xC0,0x00,0x00,0xFF,0xFF,0x30,0x30,0x3F,0x1F,0x00,  ' p
  0x00,0xC0,0xE0,0x60,0x60,0xE0,0xE0,0x00,0x00,0x1F,0x3F,0x30,0x30,0xFF,0xFF,0x00,  ' q
  0x00,0xE0,0xE0,0x60,0x60,0xE0,0xC0,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,  ' r
  0x00,0xC0,0xE0,0x60,0x60,0x60,0x60,0x00,0x00,0x31,0x33,0x33,0x36,0x3E,0x3C,0x00,  ' s
  0x00,0x60,0x60,0xF8,0xF8,0x60,0x60,0x00,0x00,0x00,0x00,0x1F,0x3F,0x30,0x30,0x00,  ' t
  0x00,0xE0,0xE0,0x00,0x00,0xE0,0xE0,0x00,0x00,0x1F,0x3F,0x30,0x30,0x3F,0x3F,0x00,  ' u
  0x00,0xE0,0xE0,0x00,0x00,0xE0,0xE0,0x00,0x00,0x03,0x0F,0x3C,0x3C,0x0F,0x03,0x00,  ' v
  0xE0,0xE0,0x00,0x80,0x00,0xE0,0xE0,0x00,0x3F,0x1F,0x0E,0x07,0x0E,0x1F,0x3F,0x00,  ' w
  0x00,0x60,0xE0,0x80,0x80,0xE0,0x60,0x00,0x00,0x30,0x3D,0x0F,0x0F,0x3D,0x30,0x00,  ' x
  0x00,0xE0,0xE0,0x00,0x00,0xE0,0xE0,0x00,0x00,0xCF,0xDF,0xD8,0xD8,0xFF,0x7F,0x00,  ' y
  0x00,0x60,0x60,0x60,0xE0,0xE0,0x60,0x00,0x00,0x30,0x3C,0x3F,0x33,0x30,0x30,0x00,  ' z
  0x80,0x80,0xC0,0xFC,0x7E,0x02,0x02,0x00,0x01,0x01,0x03,0x3F,0x7E,0x40,0x40,0x00,  ' {
  0x00,0x00,0x00,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x7F,0x00,0x00,0x00,  ' |
  0x02,0x02,0x7E,0x7C,0xC0,0x80,0x80,0x00,0x40,0x40,0x7E,0x3F,0x03,0x01,0x01,0x00,  ' }
  0xC0,0x60,0xE0,0xC0,0x80,0x80,0xE0,0x00,0x01,0x00,0x00,0x01,0x01,0x01,0x00,0x00)  ' ~

'==================================================================================================
Sub Procedure Lcd_Char_8x16(Dim px, py, pchar As Byte)
'==================================================================================================
  Dim lIndex As Word
  '----------------------------------------------------------------------------
  lIndex = pChar - 0x20
  lIndex = (lIndex << 4)

  Lcd_SetPos(px, py)
  Lcd_WrDat(Dos8x16ext[lIndex+0])
  Lcd_WrDat(Dos8x16ext[lIndex+1])
  Lcd_WrDat(Dos8x16ext[lIndex+2])
  Lcd_WrDat(Dos8x16ext[lIndex+3])
  Lcd_WrDat(Dos8x16ext[lIndex+4])
  Lcd_WrDat(Dos8x16ext[lIndex+5])
  Lcd_WrDat(Dos8x16ext[lIndex+6])
  Lcd_WrDat(Dos8x16ext[lIndex+7])

  Lcd_SetPos(px, py+1)
  Lcd_WrDat(Dos8x16ext[lIndex+8])
  Lcd_WrDat(Dos8x16ext[lIndex+9])
  Lcd_WrDat(Dos8x16ext[lIndex+10])
  Lcd_WrDat(Dos8x16ext[lIndex+11])
  Lcd_WrDat(Dos8x16ext[lIndex+12])
  Lcd_WrDat(Dos8x16ext[lIndex+13])
  Lcd_WrDat(Dos8x16ext[lIndex+14])
  Lcd_WrDat(Dos8x16ext[lIndex+15])
End Sub

'==================================================================================================
Sub Procedure Lcd_String_8x16(Dim px, py As Byte, Dim ByRef pDisp As String)
'==================================================================================================
  Dim lLen, lCnt As Byte
  '----------------------------------------------------------------------------
  lLen = Length(pDisp)
  For lCnt = 0 To (lLen-1)
    Lcd_Char_8x16(px+1, py, pDisp[lCnt])
    px = px + 8
  Next lCnt
End Sub


Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Bavelt

Golden Member

Ah, Ga ik mee spelen! Dank (wederom).

Ondertussen vond ik GLCD Font Creator, die support biedt voor MikroBasic zag ik.
Wellicht ook een goeie.

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

Werkt keurig!

Je moet dus wel een verticale positie ("lijn") overslaan (0,2,4 ) anders drukt een regel de voorgaande half weg.

pic basic code:

'===============================================================================
Sub Procedure Display_8x16()
'===============================================================================
  LCD_Fill(0x00)
  LCD_Setpos(0,0)
  Lcd_String_8x16(0,0,"First Line")
  Lcd_String_8x16(0,2,"Second Line")
  Lcd_String_8x16(0,4,"Third Line")
  Lcd_String_8x16(0,6,"Fourth Line")
  End Sub 

Een dergelijk font is denk ik beter bruikbaar wanneer je bv een datum op een boardje wilt tonen.

Fouten zijn het bewijs dat je het probeert..
Arco

Special Member

Het display heeft 64 lijnen, verdeeld in blokken van 8 en genummerd '0' t/m '7'.
Daar het font 16 pixels hoog is, heb je twee blokken van 8 nodig...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com