Displayet er med "common anode", så jeg har sat en transistor på for hver LED cathode.
Du har lavet luksus-udgaven. Med denne udgave undgår du at tallet '1' lyser kraftigere end fx. tallet '2'.
Mange billige vækkeure har bøvl med at når de skifter fra '0' til '1', lyser 1 kraftigere end 0, fordi der er flere LEDs der skal bruge strøm fra samme kilde.
LEDs er simple, lette at forstå, de er sjove, for man kan utrolig mange ting med dem.
Men LEDs har også en mere avanceret videnskab, som førstegangs-brugeren ikke lige får at vide.
Her er en lille hemmelighed: Hvis du er smart, kan du pulse dine LEDs på en spænding der er en smule højere end den foreskrevne (max. 50% højere!)
-Men giver du en LED højere spænding, må du ikke bare lade den stå tændt!
Hvis man pulser dine LEDs på en højere spænding, vil de for det første kunne komme til virke kraftigere, for det andet vil de bruge mindre strøm, for det tredje vil de leve længere.
Men du bør pulse på 200Hz eller mere, for hvis du pulser på under dette, vil du få flimmer-øjne når du kigger på dem. Mange af de kinesiske bil-baglygter (de billige af dem), har en pulse-frekvens på 50Hz, og det generer i trafikken; de burde faktisk forbydes.
Lad os antage du arbejder på 5V.
Dine LEDs er garanteret på 3V, 20mA, derfor bruger du nok i øjeblikket 100 ohm modstande (1 modstand pr. LED).
Lad os antage at du ikke går hele vejen på til 50% mere i spænding (1,5 * 3V = 4.5V, hvilket vil sige at du minimum skal have (5V-4.5V)/0.020A=25ohm modstand på)
Vi vil i forsøget her, bruge en modstand på ca. 50 ohm (56 ohm).
Sæt kun én modstand på 56 ohm mellem anode og +5V.
Derefter sætter du alle 8 (incl. punktum hvis du bruger den) katoder til hvert sit ben på Arduino'en.
Det første du gør i dit program, er at sætte output på alle de ben der er forbundet til din 7-segment, dernæst sætter du dem alle til høj, dvs. hvis du kun bruger én port, kan du skrive værdien 0xFF til DDR registret, og 0xFF til port-registeret.
Når du så skal have et tal til at lyse, tænder du det kortvarigt (fx. 1/1000 sekund, derefter holder du det slukket i 4/1000 sekund, så har du allerede 200Hz).
Dette kan gøres med et timer-interrupt, det kan også gøres med PWM, eventuelt manuelt, men interrupt/PWM er mere stabilt, og du har CPU-tid til at gøre andre ting, imens tallene håndteres.
Skal du bruge mere end 1 display, kan du koble en transistor på anoden, så du kan tænde 1 display ad gangen.
Du kan også, hvis du hellere vil det, bruge en LED driver. Der findes forskellige typer i TTL-serien - fx.
74ls47, men der er også nogle
nyere (denne er i SMD), som kommunikerer serielt via I2C.