Designvraagje over schuifregisters

Dag iedereen,

Even een klein vraagje over design, met name over het gebruik van schuifregisters.

Stel dat je een statuspaneel wilt bouwen met LED indicatoren, 5 groepen van 5 LEDs, en je wilt deze aansturen met schuifregisters. Elk register kan 8 LEDs aansturen. Hoe zou je dan deze schuifregisters benutten:

  • 4x8 LEDs + 1x1 LED (dus allemaal mooi achter elkaar)
  • 5x5 LEDs (dus 5 LEDs per schuifregister)

Heeft het belang? Wat zouden jullie doen? En waarom?

In één van de videos van Dave Jones heeft hij al eens aangehaald dat (bij commerciële projecten) men vaak de voorkeur geeft om minder componenten te gebruiken als men dingen in software kan aanpassen. Een aanpassing in software kost je namelijk één keer ontwikkeling, terwijl elk nieuw product je steeds opnieuw dat component zal kosten. Op die manier kan je toch besparen op kost. Voor een hobby project is dat niet echt relevant, vandaar dat ik met deze vraag even wou polsen wat mogelijke andere bedenkingen zouden kunnen zijn...

Alvast bedankt voor jullie input!

Marlon

Arco

Special Member

Het kan allebei, keuze is persoonlijk.
Ik houd zelf helemaal niet van dat onnodige geknoei met schuifregisters.
Stuur ze meteen met een MCU aan. (een 80 pins pic kost een paar euro)

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

Ik zou elke groep zijn eigen schuifregister geven. Dat wordt dus 5x8 ledjes. Niet alle ledjes hoef je te gebruiken. Wat niet nodig is plaats je niet. Schakeling wordt daardoor overzichtelijk en er is een uitbreidingsreserve. Of het systeem van Arco toepassen. Dan het je minder gepruts.

Gulden middenweg: een parallelle bus aanleggen, en per groepje LEDs een register / latch erop. Iets in de trant van een 74HC174 bijvoorbeeld.

Dan zou je 5 bus signalen hebben, en per register een individuele klok. Wat je op een groepje LEDs wilt hebben zet je op de bus, je kiepert klok signaal van het betreffende register even hoog & laag, klaar.

In dit geval: 5 bus lijnen + 5 klok = 10 IO's nodig, evenveel als de seriele methode = 5x (data + klok). En veel minder lijntjes als Arco voorstelde.

Arco

Special Member

Dat soort parallelle constructies kan wel, maar is tegenwoordig totaal overbodig, kost onnodige hardware.
Zelfs een 100 pins pic kost maar een paar euro. Waarom zou je dan met extra latches of schuifregisters gaan knoeien?
De 10 led pinnen (bij een 5x5 matrix) kun je trouwens ook nog voor input keys gebruiken.

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

Ik ben voor hardware besparen, dus arco's 5 weerstandjes en verder niets verdient mijn voorkeur. Anders evt de zo min mogelijk schuifregisters oplossing.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

Het probleem komt me bekend voor. De algemene gedachte is dat je met een 8-bit shifter maar 8 LEDs kunt sturen. In de praktijk heb ik ontdekt dat je betrouwbaar 9 LEDs met een 74HC595 kunt aansturen. De truc is om eerst alle 8 LEDs aan te sturen, en daarna de laatste LED (output-pin) middels een bitje er doorheen te rollen. Die laatste LED is wel via een transistor aangesloten / aangestuurd op die betreffende output-pin.

Via bovenstaande manier stuur ik op een boardje met 3x 74HC595 (serieel), 25 LEDs aan (via 5 I/O-pinnen van een microcontroller). In theorie zou je zelfs 27 LEDs kunnen aansturen. Dan zou je uitkomen op parallel geschakelde bit-shifters, al heb je dan meer I/O-pinnen nodig (7 in totaal).

Probeer het en ontdek de (ongekende) mogelijkheden.

P.S. Misschien dat je eenzelfde truc kunt doen met een HEF4094. Maar daar heb ik het nog nooit mee getest / geprobeerd.

Van elk bezoek aan CO leer ik weer meer...

Het is inmiddels 2019.
Tegenwoordig zou ik het doen met WS2812.

- Kost maar 1 pin op de micro
- Dan heb je alle kleuren van de regenboog
- Dan kun je zoveel leds koppelen als je wilt
- Geen extra hardware meer nodig. Alles zit al ingebouwd in de leds.

Te koop als losse leds, en als led strips.

[Bericht gewijzigd door deKees op zondag 16 juni 2019 09:49:34 (65%)

fatbeard

Honourable Member

Het moet uit de lengte of breedte komen: elke 'besparing' aan hardware kost extra inspanningen in software.

Parallel (met latches) kost de minste software inspanning, op de voet gevolgd door de '100-pins' oplossing, alleen de hoeveelheid hardware verschilt (I/O pinnen zijn ook hardware).

De schuifregisters (elke groep z'n eigen register) kosten wat meer software-inspanning, op de voet gevolgd door alle schuifregisters in serie (of dat schuifregister nou ín de LED zit of niet maakt niet uit).

Matrix-aansturing kost de minste hardware maar vergt de meeste software-inspanning.

Ergens tussen de matrix en schuifregisters zit de I/O expander.

Een goed begin is geen excuus voor half werk; goed gereedschap trouwens ook niet. Niets is ooit onmogelijk voor hen die het niet hoeven te doen.

Het aantal strings kun je zelf kiezen. Factoren van belang zijn oa deze:
- Hoeveel pinnen op je micro heb je tot je beschikking? Als dat maar 1 is, dan moet je alles in 1 string zetten.
- Hardware kosten. Hmm, eigenlijk is er geen verschil. 1 of 2 strings is even duur.
- Snelheid. Hoe meer strings, hoe sneller je de leds kunt updaten.
- Eenvoud van je print. 1 string zal waarschijnlijk wat simpeler in de routing zijn.

Succes met kiezen!

"We cannot solve our problems with the same thinking we used when we created them" - Albert Einstein
Arco

Special Member

Als je toch serieel wilt gebruiken, is iets als de TLC5925 handiger voor leds, heeft 16 CC outputs...

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

Volgens mij heb ik in de software tussen de TLC' en de '595 nauwelijks wat moeten veranderen. Maar goed, voor een hobbyist is die TLC waarschijnlijk lastig te solderen.

Omdat op mijn dure printjes dat ding wel eens kapot ging (waarschijnlijk mijn fout, b.v. kortsluiting zodat je 15V op de VCC kreeg, dat soort dingen), heb ik een begin gemaakt met een TLC59025 naar DIP28 breakout. Maar niet afgemaakt. Sorry.
Oh!, jij zegt 5925, ik zeg 59025. Uit de titel van het datasheet zie ik het verschil nog niet. Ik gebruik de '025.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Arco

Special Member

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

mét CE

Al die LEDs aan 1 AVR is natuurlijk wel leuk, maar... er zit een max. in wat zo'n ding kan source en sinken. Nou kun je de helft sourcen en de andere helft sinken, dus zo kun je al wat oplossen. Maar ook dat moet je in software oplossen.

Als het shift register het redt, dan zou ik ze gewoon 'vol' douwen.
Je maakt een functie ledOn() en eentje ledOff() met als argument de naam van de LED die als define een nummertje heeft gekregen (bijvoorbeeld 26, shiftregister 3, 7de bit). 5 bytes die je zo nu en dan eens naar buiten schuift, kleine functie die de juiste bit in die bytes goed zet. ISR op een timer ofzo die elke keer een bit (of als je software niet timing kritisch is: alles, het zijn maar 5 bytes!) naar buiten schuift. Dat is echt niet spannend...
Als het wat meer timing kritisch is, dan jas je die 5 bytes naar buiten op het moment dat je een bit verandert (die aanroep had je toch al). Ja, het is wat overhead.

Overigens gebruik ik een soortgelijke constructie voor software multiplexing voor een matrix display. Dat draait ook gewoon op de achtergrond en het enige wat je zelf moet doen is zorgen dat de bitmap is wat je zien wilt.
Verder nog zoiets lopend op een tiny84 met 96 outputs. Daar wordt gewoon 'hard' elke tiende seconde de boel naar buiten geschoven (die tijd heeft een reden binnen het visuele geheel, heeft dus niks met de AVR te maken). Tussen die naar-buiten-shifts door staat het ding uit te vogelen wat er aan en wat er uit moet en verder niks te doen...

Eerst en vooral wil ik iedereen bedanken voor de vele mogelijke oplossingen, waarvan ik er een hele hoop niet eens kende! Veel voer om bij te leren dus!

Op 15 juni 2019 23:10:39 schreef ohm pi:
Ik zou elke groep zijn eigen schuifregister geven. Dat wordt dus 5x8 ledjes. Niet alle ledjes hoef je te gebruiken. Wat niet nodig is plaats je niet. Schakeling wordt daardoor overzichtelijk en er is een uitbreidingsreserve. Of het systeem van Arco toepassen. Dan het je minder gepruts.

Voor dit specifieke geval ga ik de oplossing van ohm pi toepassen (aangezien ik de schuifregisters toch al had voorzien). Voor een ander projectje spelen er wellicht andere factoren mee, en dan is het fijn om zoveel mogelijke oplossingen al in het achterhoofd te hebben!

Bedankt!

Een MAX7219CNG is ook wel leuk. Kan je tot 64 LEDs mee aansturen.