Als je een btje proggen kan, kun je het HEEL goedkoop en simpel oplossen: je sluit op een AVR poort 8 LEDs aan (b.v. op PORTB), en de "algemene" kant schakel je in- en uit met een pin op een andere poort (b.v. pin0 op PORTC). Achter die 8 LEDs plaats je er nog eens 8 LEDs, ook allemaal op PORTB. De algemene van die 8 LEDs schakel je weer met pin1 van PORTC. enz enz.
Nu kun je elke serie van 8 LEDs aansturen door binair op PORT B te proggen welke LEDs aan en uit moeten, en daarna de "rij" aan te schakelen door en pin op PORTC in te schakelen.
Hiermee brand er dus altijd maar een serie van 8 LEDs uit de totale 64. Wil je ze allemaal kunnen laten branden, dan "doorloop" je alle LED-rijen op b.v. 100Hz! Dus je atmel moet dan 8 bytes in zijn geheugen hebben die de stand van elke LED weergeeft, je progged een timer op 1000Hz, daarna op elke timer interrupt gooi je één van de bytes op PORTB, en enable je het PORTC bitje wat bij die rij hoort.
Hierdoor zal elke LED welliswaar maar 1/8 van de tijd branden, maar als je er meer stroom doorheen stuurt (dat mag als je een LED pulserend gebruikt), dan is de lichtopbrengst bijna gelijk aan continu branden.
Dit systeem wordt ook vaak gebruikt in matrixdisplays...
EDIT
Wat ook kan is een serie shifters achter elkaar zetten, b.v. de 74HCT595 is errug geschikt hiervoor. Dan kun je zoveel LEDs als je wilt sturen met 3 lijntjes van je controller! Je shift dan de bitjes de shifters in met een data en clock lijn, je kunt de shifters onderling "doorlussen" zodat er een soort 64 bits shifter ontstaat
Het leuke van de HCT595 is, dat deze ook een latch achter de shifter heeft zitten. Je kunt dus op de gemakkie alles inshiften zonder dat je de LEDs al ziet flitsen.... Pas als je alle 64 bits hebt ingeshift geef je met de 3e lijn een strobe clock zodat alle 64 bits in één klap op de uitgangen (en dus de LEDs) verschijnen
Heb hier nog ergens een 32 LED-printje liggen die precies dat doet... Als ik vandaag tijd heb schiet ik er wel ff een pic van
[
Voor 28% gewijzigd door
Verwijderd op 21-12-2002 09:51
]