ik probeer een kleine lichtkrant (2x 5x7 led display) te maken. met een pic16f877a in combinatie met een 2x uln2003 en 4x shiftregisters 74hc595 programmeer in jal.
de kathode van een enkele display wordt bediend door een uln2003 dat op zijn beurt weer gestuurd wordt door 74hc595.
en de anode wordt bestuurd door een 74hc595.
dit hele gebeuren is 2x uitgevoerd ivm met 2 led displays.
ik krijg het wel voor mekaar om 2 verschillende letters te tonen in de dispays. echter het is zo omslachtig dat dit gewoon niet de juiste manier kan zijn.
spi_transceive(0B_0000_0001) -- 1e--anode
spi_transceive(0b_0000_0001) --kathode
ss=1
ss=0
spi_transceive(0B_0000_0010) -- 1e--anode
spi_transceive(0b_0000_0001) --kathode
ss=1
ss=0
spi_transceive(0B_0000_0100) -- 1e--anode
spi_transceive(0b_0000_0001) --kathode
ss=1
ss=0
spi_transceive(0B_0000_0100) -- 1e--anode
spi_transceive(0b_0000_0010) --kathode
ss=1
ss=0
spi_transceive(0B_0000_0100) -- 1e--anode
spi_transceive(0b_0000_0100) --kathode
ss=1
ss=0
spi_transceive(0B_0000_1000) -- 1e--anode
spi_transceive(0b_0000_0001) --kathod
ss=1
ss=0
spi_transceive(0B_0001_0000) -- 1e--anode
spi_transceive(0b_0000_0001) --kathode
ss=1
ss=0
spi_transceive(0B_0001_0000) --1eanode
spi_transceive(0b_0000_0100) --kathode
ss=1
ss=0
spi_transceive(0B_0001_0000) --1e--anode
spi_transceive(0b_0000_0010) -- kathode
ss=1
ss=0
spi_transceive(0B_0000_0001) -- 1e--anode
spi_transceive(0b_0000_0001) --kathode
ss=1
ss=0
(enz enz, hierdoor krijg ik 2x de letter f in beeld)
het probleem is dat je rekening moet houden naar welke shiftregister je data gaat. hierdoor wordt het een hele puzzel.
is er een betere, overzichtelijke methode.
ik denk zelf een om een procedure te maken voor bv een letter a en dat versturen naar de juiste set shiftregisters. En bv de letter b naar het andere paar set shiftregisters.
echter ik zou niet weten hoe ik dat moet aanpakken daar de shiftregister alles zelf door sturen..
of er zijn veel betere manieren.
wie kan mij op weg helpen om dit goed te doen. heb alles al geraadpleegd (google, youtube enz enz) maar kom er niet aan uit..
[Bericht gewijzigd door Henry S. op (0%)]
Kun je eens een schema posten van hoe je het nu hebt gemaakt ?
Ik ken geen JAL dus kan je code niet helemaal doorzien.
Meestal zie je bij dit soort matrixdisplays dat een kant, meestal de kolommen met een schuifregister (en driver) wordt aangestuurd en de rijen via een 3 to 8 decoder (en driver) Op die manier kun je het hele spul aansturen met 6 lijnen (Clock, Latch, Data, Arow, Brow, Crow)
Dan in de software schuiven en multiplexen.
Hey rolo bedankt voor je reactie.
Het duurde even voor ik een schema kon plaatsen.
zoals je ziet heb ik hier 2x een 5x7 ledmatrix.
op 1 enkele ledmatrix met bij behorende shiftregister en een uln2003 kan ik elke cijfer of letter oplichten. dat is geen probleem.
door 2x de opdracht met de juiste bitjes te versturen
spi_receive(0b_0010_0001) --gaat naar de eerste shiftregister
spi_recieve (0b_0001_0001) ---gaat naar de 2e shiftregister
ss=1 (latch)
ss=0
(Herhaal voor de volgende ledjes die aan moeten)
spi_receive(0b_0010_0001) ---gaat weer naar de eerste shiftregister
spi_recieve (0b_0001_0001) ---gaat weer naar de 2e shiftregister
ss=1
ss=0
(herhaal voor de volgende set ledjes die aan moeten, enz enz)
Omdat ik weet dat de eerste opdracht (met daarbij de te versturen bitjes naar de 1e shiftregister gaat), en de 2e opdracht naar de 2e shiftregister gaat, kan ik hier wel een procedure voor schrijven. Om bv de letter a in beeld te krijgen. dat is nog redelijk te overzien.
echter het wordt een heel ander verhaal als ik 2 of 3 ledmatrixen wil gebruiken.
dan heb ik 6 shiftregisters. om dan een procedure te schrijven voor de letter a word een hele puzzel.
om een lang verhaal kort te maken.
wat is de juiste manier om tekst in beeld te krijgen. moet ik voor elke ledmatrix (dus voor elke letter) een afzonderlijke latch gebruiken?.
hoe hebben andere mensen die een ledmatrix (voor tekst) hebben gemaakt dit opgelost. ik hoef geen kant en klare code ofzo.
rew
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Wat ik zou doen is dat je 1 schuifregister gebruikt om 1 ULN aan te sturen.
Die trekt ALLE gewenste kathodes naar de 0V zodra je daar wat heenstuurt. Dus alle "kathode 1" 's van iedere matrix wordt op 1 pootje van de ULN aangesloten.
Vervolgens maak je alle volgende schuifregisters zo dat je de anodes allemaal apart kan aansturen. Met 4 schuifregisters kan je zo 32 anodes aansturen. Er zijn 5 anodes per matrix, dus zo kan je met 4 anode-registers dus 6 matrices aansturen.
Vervolgens moet je "multiplexen". Volgens mij moet je dat nu ook al: Als jij puntje 1-1 en 3-3 tegelijk wil aansturen, kan je niet voor 1-1 anode 1 hoog, kathode 1 laag maken en voor 3-3 anode en kathode 3 aansturen. Dan gaan 1-3 en 3-1 ook aan. Je moet dus ook nu al multiplexen: Kathode 1 laag, anode 1 hoog, wachten, en even later kathode 1 niet meer aansturen en kathode 3 laag dan dus anode 3 hoog (en 1 niet).
Persoonlijk maak ik het liefst een routine die de data naar het display stuurt op basis van zo veel mogelijk geprepareerde data. Met een verversings-frequentie van 100Hz, zit je zo op een "moet en nieuwe rij sturen" van 700Hz. Dat moet dus best wel vaak gebeuren. Als daar zo min mogelijk gerekent hoeft te worden blijft er zo veel mogelijk tijd over voor andere dingen.
En in de software moet je met tabellen gaan werken. In de tabel dan een stuk of 5 bytes voor elke letter die je wilt uitsturen.
Dan nog een buffer voor de text.
En dat wordt het spelen met pointers.
Eerst kijken welke letter je wilt zien, dan de bijbehorende code opzoeken en die naar het schuifregister sturen. En dan herhalen voor de andere letters.
rew
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Wat ik probeerde te zeggen is dat je als je XYZ in wil displayen je daar dus een bitmap-buffer van bouwt op het moment dat je beslist dat er "XYZ" op het display moet komen. Dan hoeft de 1000x per seconde interrupt routine niet ingewikkeld met pointers te kl***en, maar kan gewoon simpel de juiste data naar buiten klokken.
Nou ik sluit me helemaal aan bij de bovenstaande posts. Je hebt trouwens een grote pic controller, met veel IO pennen. Je dan kunt ook overwegen om dan de kolommen direct aan de pic te hangen, en de rijen dan met een schuifregister.
rew
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Rolo: Nee.
in de richting "schuifregister" doe je per output maar 1 ledje tegelijk aansturen. 20mA of zo, kan prima (officieel max 8mA per pinnetje van de 74HC595, maar 20mA gaat in de praktijk ook best wel....
).
In de andere richting komen maximaal evenveel ledjes tegelijk als dat je bits in je schuifregister hebt. Dus dat kan niet direct met een pinnetje van de microcontroller.
Wel als je daar een ULN achtig iets tussen hangt. (ik zou voor IRFML8244 mosfetjes kiezen, maar goed dat is omdat ik ze schattig vind...
)
Klopt, ik had zoiets in gedachten. Dan stuurt de 595 steeds maar een led per output aan. (Even heel snel getekend zonder alle details).
al die tijd dat ik op internet ledmatrix schematics heb bekekenen, heb ik niet opgemerkt dat alle kathoden van de ledmatrixen aan elkaar verbonden waren.
Nu ik dat weet, is het meteen een stuk makkelijker geworden.. ik ben er nog niet helemaal maar ik kan iig weer verder ..
Wederom bedankt voor jullie reaktie. echt geweldig!
Kan iemand mij vertellen wat hier nu de toegevoegde waarde van de uln2308 is? behalve dan de stroomkring compleet maken door de lampjes met massa te verbinden.
Volgens mij heeft het nu geen stroomversterkende factor, waardoor mijn ledmatrix lampjes feller gaan branden.
Het schema is van mijzelf. Inmiddels heb ik een aantal ledmatrixes met elkaar verbonden. een en ander werkt goed, echter ik wil de ledjes wat feller laten branden. Maar dat gaat mij denk ik niet lukken in deze opstelling.
de toegevoegde waarde dan ULN's is dat een shuifregister of een microcontroller de benodigde stromen niet kan sinken / sourcen.
De uln`s wel. Ze versterken niet, maar kunnen met een lage ingangs stroom wel een veel grotere stroom naar ground of V+ schakelen.
Die hogere stroom moet dan wel aangeboden worden natuurlijk, die komt er niet vanzelf 
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
De meest simpele oplossing: betere (HR/High Efficiency) leds nemen.
Vaak worden er van die eBay leds voor gebruikt (100 leds voor een dollar of zo), die zijn meestal niet geschikt voor multiplexing. (geven veel te weinig licht)
Hoi Arco, dat is een natuurlijk ook een optie, echter heb ik de leds al in bezit.
Stijnos:hoe kan ik dan t beste dat hogere stroom aanbieden. op dit plaatje loopt de benodigde stroom ook door beide schuifregisters. Zomaar verhogen zal niet gaan denk ik, omdat de schuifregisters daar misschien niet tegen kunnen.
Bedoel je dan eventueel de uitgangen van een schuifregister (anode kant) ieder afzonderlijk aansluiten op de basis van een transisor. dan de collector aansluiten op een aparte voeding en via de emitter naar de uln2308 ??
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Tja,
Je kunt beter kijken wat voor leds je nodig hebt voordat je begint...
(Op een gammel gebouwtje kun je nu eenmaal ook geen extra 10 verdiepingen neerzetten...
)
Door de leds loopt nu al zo'n 16mA, of dat meer mag zijn moet je in de datasheet van de betreffende led opzoeken. (Peak current en duty-cycle)
Je moet er dan in ieder geval extra drivers tussen zetten aan de 595 outputs.
dat is zo.
Maar als je zonder kennis ergens aan begint:)
Welke drivers bedoel je?
[Bericht gewijzigd door devi777 op (22%)]
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Je kunt losse transistoren gebruiken, of transistor arrays. De ULN2003 voor low-side(-) en UDN2981 voor high-side(+) driver.
