Inhoudsopgave:

Hoe veel LED's van een paar microcontroller-pinnen te besturen. - Ajarnpa
Hoe veel LED's van een paar microcontroller-pinnen te besturen. - Ajarnpa

Video: Hoe veel LED's van een paar microcontroller-pinnen te besturen. - Ajarnpa

Video: Hoe veel LED's van een paar microcontroller-pinnen te besturen. - Ajarnpa
Video: 🇳🇱 LED VERKEERSLICHT / STOPLICHT - Arduino les #27 2024, November
Anonim
Hoe veel LED's van een paar microcontroller-pinnen te besturen
Hoe veel LED's van een paar microcontroller-pinnen te besturen

Door gebruik te maken van het feit dat veel microcontroller-pinnen drie toestanden hebben (+V, GND of "hoge impedantie", kunt u N*(N-1) LED's aansturen vanaf N-pinnen. Dus de kleine 8-pins microcontroller zoals een PIC12Fxxx of een ATtiny11 kan rijden 20 LED's hebben vijf beschikbare uitgangspinnen en hebben nog één pin over voor een soort invoer. Zie ook

Stap 1: 20 LED's op 5 pinnen

20 LED's op 5 pinnen
20 LED's op 5 pinnen

De huidige oogst van microcontrollers met een laag aantal pins (6 pins tot 20 pins aan)

het hele pakket) zijn aantrekkelijk geprijsd en 'schattig', maar de vraag rijst hoe je die pinnen het beste kunt gebruiken voor veelvoorkomende toepassingen zoals het aansturen van LED's. Een directe-verbindingsbenadering voor het aansturen van LED's verbruikt één pin voor elke LED. Een traditioneel multiplexschema waarbij rijen LED-anodes worden aangedreven door één set N-pinnen en de gemeenschappelijke kathode van elke rij wordt aangedreven door een andere set M-pinnen, slaagt erin om N*M-LED's met N+M-pinnen te verlichten. Op een processor met slechts 5 of minder uitgangen (zoals het geval is bij de meeste 8-pins microcontrollers), levert dit nauwelijks meer uitgangen op dan direct drive.

Stap 2: Charlieplexen

Charlieplexing
Charlieplexing

Ervan uitgaande dat de uitgangspinnen in feite in drie toestanden kunnen staan (actief hoog, actief laag en hoge impedantie (invoer)), is het ook mogelijk om de rij- en kolomstuurprogramma's te delen en N*(N-1) LED's te besturen met slechts N pinnen. Eén pin is verbonden met gemeenschappelijke kathodes van een rij LED's en wordt laag aangedreven, en de resterende N-1-pinnen zijn verbonden met de anodes en ofwel hoog aangestuurd om die kolom te verlichten, of links als ingangen om de LED uit te laten. Maxim noemt deze techniek "Charlieplexing", en beschrijft het in(1); Microchip vermeldt dit ook in hun document (2) (en implementeert dit ook op het PICKit 1-bord.)(1) "Charlieplexing - Reduced Pin-Count LED Display Multiplexing"https://www.maxim-ic.com/appnotes. cfm/appnote_number/1880(2) "Tips 'n Tricks 8-pins FLASH PIC-microcontrollers"https://ww1.microchip.com/downloads/en/DeviceDoc/40040b.pdf(3) Charlieplexing-LED's- De theorie Een instructie van rgbphil

Stap 3: Aan het werk zetten

Aan het werk zetten
Aan het werk zetten
Aan het werk zetten
Aan het werk zetten

Deze stuurt 20 LED's aan uit een ATtiny11. Een eerdere versie van dit bord was:

daadwerkelijk gebouwd en verschijnt als de foto op de hoofdpagina. Ik ben bang dat de afbeelding van het schema behoorlijk hopeloos is; je hebt Eagle nodig om je te vertellen welke signalen waar zijn aangesloten.

Stap 4: Kleiner en veelzijdiger…

Kleiner en veelzijdiger…
Kleiner en veelzijdiger…

Omdat het grootste deel van het bord wordt ingenomen door de LED-array, kunnen we ruimte maken!

voor ofwel een Attiny-chip OF een microchip PIC12F-chip. Verklein de LED's tot 3 mm en ga naar een dubbelzijdig bord, en we krijgen iets van 27x44 mm. Helaas, dit bord is nog niet getest …

Stap 5: Itty Bitty

Itty Bitty
Itty Bitty

Microchip heeft natuurlijk hun 6-pins PIC10F-chips, die in staat zijn om een

slechts 6 LED's van de 3 uitgangspinnen. Deze is ongeveer 16 mm in doorsnee. Door naar 603 LED's te gaan, kun je een beetje kleiner worden, maar ik weet niet zeker wat het punt is.

Stap 6: Software

De software wordt om verschillende redenen een beetje rommelig:

1) voor de getoonde PCB's zijn de LED's opgesteld op een manier die geschikt is voor de PCB-lay-out, in plaats van in de "juiste" bitvolgorde. IMO, dit is de manier om dingen te doen, maar het betekent wel dat rij 1 niet noodzakelijk bit 1 betekent, of kolom 3 niet bit 3. Dit vereist een niveau van toewijzing tussen de gebruikelijke rij-/kolomadressering en de bits die moeten worden ingesteld. 2) Aangezien dezelfde bits worden gebruikt voor anodes en kathoden, kan de gemeenschappelijke (rij) verbinding voor sommige bits in het midden van aangedreven (kolom) bits zitten. Dat betekent dat u kolombits moet verschuiven, afhankelijk van of ze voor of na de rijbit voor die reeks kolommen zijn. 3) U moet uitgangswoorden afleiden voor zowel de ioport als het poortrichtingsregister. De bijgevoegde ASM-code voor ATtiny11 is een 'proof of concept'. Het is beschamend niet-geoptimaliseerd en slecht becommentarieerd, maar het is alles wat ik tot nu toe heb geschreven.

Aanbevolen: