Aansturen GLCD met SED1531

Heb mijn Dot Matrix van samenkopen.nl ook aan de gang. Pic is 16F690 en software is geheel in assembler.
Voor het begrijpen van de Dot Matrix heb ik veel gehad aan de basic versie van Roland van Leusden, waarvoor dank.
Ik wil deze lcd's gebruiken voor het testen van printjes die ik maak, ipv de 2x16 lcd displays die ik nu gebruik. De Dot Matrix LCD's hebben toch 3 regels meer voor info.
http://www.uploadarchief.net/files/download/resized/dot%20matrix%20test.jpg

Op 3 januari 2013 16:36:18 schreef Kapee:
Heb mijn Dot Matrix van samenkopen.nl ook aan de gang. Pic is 16F690 en software is geheel in assembler.
Voor het begrijpen van de Dot Matrix heb ik veel gehad aan de basic versie van Roland van Leusden, waarvoor dank.
Ik wil deze lcd's gebruiken voor het testen van printjes die ik maak, ipv de 2x16 lcd displays die ik nu gebruik. De Dot Matrix LCD's hebben toch 3 regels meer voor info.
[afbeelding]

Ga je de assembler versie op het upload archief plaatsen? Zou wel leuk zijn!
En het zijn niet 3 meer regels, maar zelfs 4!

Just find out what you like and let it kill you

Stom, stom, stom, natuurlijk 4 regels, even een black-out denk ik
Geen probleem om de software in het uploadarchief te zetten. Zal het morgen doen. Het schema van het printje zal ik er ook bij doen.
De software is wel helemaal voor text gemaakt, niet voor grafisch.
Wat doet de software:
- een row selecteren
- strings naar dot matrix
- enkel character naar dot matrix
- net zoals bij 16x2 een character positie selecteren (6x16)
- byte naar binair naar dot matrix
- byte naar hex naar dot matrix
- byte naar dec 2 digits (<100) naar dot matrix
- byte naar dec 3 digits naar dot matrix
Op de print heb ik nog 3 schakelaars, drie led's, een potmeter, een 2pol dip switch en een DS1307 I2C clock gezet.
De LCD wordt aangestuurd via een CD4094 shift and store register, zodoende worden er maar 6 poorten van de PIC gebruikt(net zoals 2x16).
Heb voor het testprintje ook Vdd en de led via een poort geschakeld, maar dit is niet nodig.

Staat al in het archief: http://www.uploadarchief.net/files/download/sk%20dotmatrix%20kapee.zip

Ik heb inmiddels even een Wiki opgezet voor het LCD-scherm, dat is denk ik voor latere naslag wat makkelijker, zeker als de bestanden op een gegeven moment weg zijn op sommige hosts.

http://www.marcovannoord.com/lcd/

Er staat nog niet veel op, maar het begin is er in ieder geval.

Patrick de Zeester

Golden Member

Zoals eerder beloofd heb ik een C library om dit display aan te sturen op SourceForge gezet. Je kan 'm hier vinden: https://sourceforge.net/projects/glcdsed1531lib/

Documentatie staat hier: https://sourceforge.net/p/glcdsed1531lib/wiki/Home/

Hoewel deze library getest is op een Atmel ATtiny2313 moet het in principe niet al te moeilijk zijn om deze library ook op andere platformen te kunnen draaien. Zelf wil ik nog het draaiend krijgen op een ATMega328 en op het Stellaris Launchpad bordje (een ARM Cortex M4F).

How funny :)
Ik heb dus ook een kleine library voor het display geschreven:
https://github.com/Duality4Y/SED1531
maar is text only library.
nadat we dus veel van deze schermpjes bij http://tkkrlab.nl Besteld hadden :)
waarvan hier dus de wiki page:
http://tkkrlab.nl/wiki/Glcd_48x100#More_Info

i am the one who invented radio (not)

Op 3 januari 2013 16:36:18 schreef Kapee:
Heb mijn Dot Matrix van samenkopen.nl ook aan de gang. Pic is 16F690 en software is geheel in assembler.
Voor het begrijpen van de Dot Matrix heb ik veel gehad aan de basic versie van Roland van Leusden, waarvoor dank.
Ik wil deze lcd's gebruiken voor het testen van printjes die ik maak, ipv de 2x16 lcd displays die ik nu gebruik. De Dot Matrix LCD's hebben toch 3 regels meer voor info.
[afbeelding]

Kapee, ik ga ook wat doen met deze display en heb het door jouw code al aan de praat. Bedankt.

Inmiddels heb ik een werkende thermometer gemaakt met deze display :
http://i10.photobucket.com/albums/a134/Rlnd/Electronica/DSCN0062_zpsdbea4705.jpg

De display is direct aangesloten op een PIC16F690 en als temperatuur sensor is een DS18B20 ingezet.

Het schema :
http://i10.photobucket.com/albums/a134/Rlnd/Electronica/thermometer_zps2c435102.jpg

[Bericht gewijzigd door Rolo op zaterdag 3 augustus 2013 14:36:35 (18%)

Als ik even de azijnzeiker uit mag hangen: Heb je zo'n mooi display, gooi je de resolutie in de vuilnisemmer.

Verder een leuk resultaat natuurlijk.

If you want to succeed, double your failure rate.

Ja, dat kan inderdaad nog wel mooier. Ik heb dit font overgenomen van een bestaande display en toen vergroot. Vandaar de hoekigheid. Maar ik vond het eerst leuk om te kijken of ik het aan de praat kreeg. Ga nog wel kijken of ik het font iets mooier kan krijgen.
Als iemand tips heeft hoe je zo'n font kunt ontwerpen met behulp van software hoor ik het graag. Het is best een klus om het op papier uit te tekenen.

[Bericht gewijzigd door Rolo op vrijdag 10 mei 2013 14:34:38 (23%)

Op 6 januari 2013 22:31:21 schreef Patrick de Zeester:
Zoals eerder beloofd heb ik een C library om dit display aan te sturen op SourceForge gezet. Je kan 'm hier vinden: https://sourceforge.net/projects/glcdsed1531lib/

Documentatie staat hier: https://sourceforge.net/p/glcdsed1531lib/wiki/Home/

Hoewel deze library getest is op een Atmel ATtiny2313 moet het in principe niet al te moeilijk zijn om deze library ook op andere platformen te kunnen draaien. Zelf wil ik nog het draaiend krijgen op een ATMega328 en op het Stellaris Launchpad bordje (een ARM Cortex M4F).

Ik denk dat een bump van dit topic wel te verantwoorden is, het lijkt me handig om de documentatie over dit scherm samen te houden.

Ik ben bezig om dit LCDtje met bovenstaande library werkend te krijgen op een PIC18F25k22. Ik gebruik MPlabX en de XC8 (gratis) compiler.

De IO porten is tot nu toe geen probleem gebleken, maar de flash commando's krijg ik niet geport. Is er iemand die er in geslaagd is om dit LCDtje aan de praat te krijgen in PIC C?

Het volgende stuk code krijg ik niet geport:

c code:


/* AVR-GCC Flash definitions */
#include <avr/pgmspace.h>

#define GLCD_FLASH(type, name)          const type const name PROGMEM
#define GLCD_FLASH_READ_BYTE(address)   pgm_read_byte(address)         
#define GLCD_FLASH_READ_WORD(address)   pgm_read_word(address) 
#define GLCD_FLASH_PTR(type)            const type* PROGMEM

Ik was aan het kijken in de richting van de "table read" functionaliteit, maar kreeg het niet werkend. Iemand een suggestie?

https://www.dropbox.com/s/krri03i7u87s49y/IMG_0777.JPG

Ik ben eens aan de slag gegaan om een bare-bones GUI te maken op basis van Peter z'n library. De code draait nu op een STM32F0, ARM Cortex-M0 architectuur dus.

Hints:
* De ARM-architectuur is anders dan AVR, namelijk alles gaat in een unified memory. Dat wil zeggen dat je de 'pgmspace' niet meer nodig hebt, maar moet vervangen door geheugenpointers. Was best wel wat zoekwerk.
* Het porteren omvat meer dan enkel wat aanpassingetjes aan de *_IO.h file, glcd.h bevat namelijk ook enkele stukken code (in de text-routine) die specifiek voor AVR geschreven zijn.

Ik heb een aansturing bedacht om deze display op een Arduino aan te sluiten met maar 4 draden. Dit kan met een schuifregister maar ik gebruik een I2C portextender, komt netto op ook op vier draden maar als je toch al andere I2C devices aan je Arduino hebt zijn worden SDA en SCL lijnen toch al gebruikt en prik je deze erbij. Data lezen uit het display kan in deze toepassing niet, eventueel kan dat gemaakt worden als je ook R/W naar de Arduino brengt en de Expander bidirectioneel gaan inzetten. Ik gebruik het lezen niet. Ben nog bezig met de software, de eerste pixels staan al op het diplay. Als er interesse is in de software wil ik die wel posten. Het device address van de extender is 0x21. Is aan te passen door A0, A1 en A2.
Mischien heeft iemand iets aan dit schema.

http://i10.photobucket.com/albums/a134/Rlnd/Arduino/I2C_LCD_zps187b38c2.jpg

Leuk, waarbij een PCF8574 wel een stuk duurder is dan een schuifregister.

It's the rule that you live by and die for It's the one thing you can't deny Even though you don't know what the price is. It is justified.

Ja dat is zo, maar je zal net krap zitten je IO pinnen. Was voor mij ook om ervaring op te doen met Arduino. Daar ben ik net mee gestart.

Om wat grotere letters en cijfers te kunnen tonen op het display heb ik een 10x14 pixel font toegevoegd. Nu is het mogelijk om het kleine 5x7 font en het grote 10x14 font door elkaar te gebruiken. Ik heb de volgende interface gebruikt :
http://i10.photobucket.com/albums/a134/Rlnd/Arduino/2013-09-1510_29_03-I2C_Interface_zps4ca9db6a.jpg
Dat geeft dit resultaat :
http://i10.photobucket.com/albums/a134/Rlnd/Arduino/DSCN0134_zps88589795.jpg

Er passen acht grote karakters op een regel, bij een spacing van twee kolommen. Als je de spacing verkleint zelfs negen. In de code staat de spacing op 2 kolommen ingesteld.
De code bevat de basis aansturing, er zit geen bewaking is of de tekst op het display past.
De code is hier te vinden :
https://docs.google.com/file/d/0Bxpcl1OprwA3eXN6d0p6WXktdDQ/edit?usp=s…

Leuk idee, zal je big font zeker in een toekomstig projectje gebruiken.
Maar dan even omschrijven voor de Pic 16F serie met assembler.

Ja, dat is goed om te zetten, de ascii tabel zit in de zip file, als je de notatie aanpast voor PIC assembler moet dat lukken, uitdaging bij de PIC is dan het geheugen, de hele big font tabel is 1920 bytes. Bij een PIC met 4096 bytes gaat dat dan hard.
Maar al je maar een deel van het font nodig hebt kun je het natuurlijk kleiner maken. Bijvoorbeeld alleen de cijfer als je een getal wat groter wilt tonen op het display. Staat wel mooi vind ik zelf.

Succes !

Je hebt gelijk, had ik nog niet aan gedacht.
Maar het blijft leuk. Dus misschien ik dan het small font (bij mij 6x8) pak en van iedere dot 4 dots maak, dan krijg je 12x16 dot chars.
Denk niet dat de routines hiervoor in de buurt van de 1920 bytes komt.

Nou, de routines zijn niet 1920 bytes, alleen de tabel met pixeldata !
Dus daar komt je code nog bij. Het font is zo opgebouwd :
Zichtbare deel is 10x14 pixels, omdat 14 niet goed uitkomt met kolommen van 8 bits is een karakter 10x16 pixels in de tabel, dus dan kom je op 10 x 2 bytes = 20 bytes per karakter. Er zitten 96 karakters in de tabel dus daar komt het totaal van 20 x 96 = 1920 bytes vandaan.

In de tabel zie je steeds twee regels van 10 bytes per karakter.
De eerste 10 vormen het bovenste deel van het karakter, de tweede 10 het onderste deel.

Was trouwens niet eenvoudig een font te vinden. Ik heb deze uiteindelijk uit een datasheet van een display gehaald en alle bytes zelf ingeklopt ! (Stukje bij beetje....)

Dit is de bron van het font :
https://docs.google.com/file/d/0Bxpcl1OprwA3djY2U2hvdjQ1X28/edit?usp=s…

Dat bedoel ik ook, de tabel met 1920 bytes voor pixeldata. In mijn geval heb ik alleen extra routines nodig.
Ik gebruik chars van 6x8, waarvan 5x7 zichtbaar, ruimte tussen de characters zit in het character in de tabel.
In jouw routine wordt er aan het eind van een character een spacing tussen de characters gezet "// Put spacing between characters".

Wat ik van plan ben: iedere dot uit de small font character tabel, 4x uit te voeren(2x horizontaal, 2x verticaal). Dan krijg ik characters van 12x16 dots.
Het voordeel, geen extra tabel voor big font en dus ook geen 1920 bytes nodig.
Wel zijn er routines nodig voor het sturen van 4 dots naar het display ipv 1 dot, maar dit zal zeker minder ruimte innemen dan een extra tabel van 1920 bytes.

Aha, je wilt het met rekenen gaan doen, nu snap ik het.
Zou er eerst eens een paar uitproberen hoe ze er uitzien op de display, ik heb voor een thermometer ook eens bestaande karakters "opgeblazen" maar die zagen erg wat grof en hoekig uit in het echt (zie mijn post over de thermometer).
Ik heb trouwens // Put spacing between characters expres niet opgenomen in de tabel maar voeg ik toe in de aansturing, op die manier kun je de spacing nog beinvloeden en het scheelt weer statische data. Al is dat met de Arduino niet zo kritisch meer.

Ter info : Fonts zijn ook te gebruiken voor de Nokia 5110 LCD Display.
De code is uiteraad iets anders, de Nokia LCD heeft iets andere aansturing dan de SED1531.
http://i10.photobucket.com/albums/a134/Rlnd/Arduino/DSCN0143_zps2dff1f88.jpg

[Bericht gewijzigd door Henry S. op maandag 16 september 2013 19:25:04 (19%)

Rolo,

Ik heb al een hele tijd een 100 x 48 display liggen
en heb wel ervaring met 16F690 in andere projecten,
maar alleen in basic.
Wil jij de code ( in asm ) delen voor je thermometer met 18B20
zodat ik een start punt heb dat werkt.
( Zonder pcf chip ertussen )

Guus@Sint-Michielsgestel

Ja, dat wil ik wel maar wat zoek je precies ?
Je zegt zonder PCF chip, bedoel je daarmee die level convertor ?

Ik begrijp dat je info wilt over de thermometer op de Nokia display met de pic 16F690 ? Klopt dat ?

In deze zip file staat alles wat je nodig hebt. Hier wordt een Nokia 5110 display direct aan een PIC16F690 gekoppeld en een DS18B20 als temperatuursensor. Succes ermee, laat even horen of je er wat mee kunt.
https://drive.google.com/file/d/0Bxpcl1OprwA3eG9vSE5fQTFPZ28/edit?

[Bericht gewijzigd door Rolo op zondag 27 oktober 2013 12:55:22 (40%)

Rolo, dank voor je reactie,

Ik dacht eigenlijk aan het 100 x 48 display

waar 20,4 als temp wordt getoond.

Ik probeer met dat display op te starten,

en daar dan de code voor.

Guus@Sint-Michielsgestel