utallige
Husk at din strømforsyning skal kunne følge med.
Lad os antage at du bruger en alm. 7805. Denne klarer gerne 1A. Men man kan også få en LM78S05, den kan klare 2A.
Derudover kan de fleste diodebroer klare 1A. Man kan til en fornuftig pris få en diodebro der kan klare 1.5A.
Du kan i stedet for sætte 2 diodebroer parallelt, men husk at forbinde dem korrekt.
Lad os antage at en lysdiode er på 3V, 20mA. Der ryger altså 20mA pr. lysdiode, hvilket vil sige at på 1A kan du sætte 50 lysdioder. Derudover trækker IC'erne også lidt strøm. Hver IC klarer 8 LEDs, hvilket vil sige at 50/8 = 6. 6*8 = 48. Så hvis du sætter 6 IC'er på og 48 lysdioder, trækker du nok omkring 1A.
Dvs. Hvis du er lidt flittig med loddekolben har du et 10x10 LED display, som trækker omkring 2A.
...tænder den første når jeg trykker 0, der efter gul når jeg trykker 0,...
Er godt nok lost lige pt.. Er det koden eller opstillingen der er forkert?
Da jeg på omtalte side ikke kan se noget der skal 'trykkes' vil jeg gå ud fra at koden er ændret.
Efter al sansynlighed er det nok koden der har en smule fejl.
Prøv noget simpelt, lav et program, som gør følgende:
1: Tænd en bestemt kombination af lysdioder
2: Hold en 1 sek. pause
3: Tænd en anden kombination af lysdioder
4: Hold 1 sek pause
5: Tænd en tredje kombination af
6: Hold 1 sek pause
7: Gå tilbage til trin 1.
Der sendes jo en bitstrøm (fx. 8 bits). Disse skal clock'es ind, dvs. du skal køre clock-benet lavt/højt hver gang der skal indlæses en ny bit.
Jeg vil tro at hvis du har OE lav hele tiden og clock'er ganske langsomt (1 gang i sekundet), vil du se at efterhånden som du fyldet bits på, 'skiftes de ind' på næste LED.
Fx...
Du sender bitværdien '1' ind på første clock-puls, derefter '0' på resten af clock-pulserne, lysdioderne vil så lyse som følgende, efterhånden som du sender en clock-puls:
clk 0: LED7: slukket, LED6: slukket, LED5: slukket, LED4: slukket, LED3: slukket, LED2: slukket, LED1: slukket, LED0: slukket
clk 1: LED7: slukket, LED6: slukket, LED5: slukket, LED4: slukket, LED3: slukket, LED2: slukket, LED1: slukket, LED0: tændt
clk 2: LED7: slukket, LED6: slukket, LED5: slukket, LED4: slukket, LED3: slukket, LED2: slukket, LED1: tændt, LED0: slukket
clk 3: LED7: slukket, LED6: slukket, LED5: slukket, LED4: slukket, LED3: slukket, LED2: tændt, LED1: slukket, LED0: slukket
clk 4: LED7: slukket, LED6: slukket, LED5: slukket, LED4: slukket, LED3: tændt, LED2: slukket, LED1: slukket, LED0: slukket
clk 5: LED7: slukket, LED6: slukket, LED5: slukket, LED4: tændt, LED3: slukket, LED2: slukket, LED1: slukket, LED0: slukket
clk 6: LED7: slukket, LED6: slukket, LED5: tændt, LED4: slukket, LED3: slukket, LED2: slukket, LED1: slukket, LED0: slukket
clk 7: LED7: slukket, LED6: tændt, LED5: slukket, LED4: slukket, LED3: slukket, LED2: slukket, LED1: slukket, LED0: slukket
clk 8: LED7: tændt, LED6: slukket, LED5: slukket, LED4: slukket, LED3: slukket, LED2: slukket, LED1: slukket, LED0: slukket
Jeg har tilladt mig at fjerne en del skrammel fra hans rutine; den bliver lidt hurtigere, og jeg mener mere overskuelig.
1 | void shiftOut(uint8_t aDataPin, uint8_t aClockPin, uint8_t aData)<br>{<br> uint8_t i;<br><br> pinMode(aClockPin, OUTPUT); <br> pinMode(aDataPin, OUTPUT); <br><br> digitalWrite(aDataPin, 0); <br><br> for (i = 7; i >= 0; i--) <br> {<br> digitalWrite(aClockPin, 0); <br> digitalWrite(aDataPin, (aData >> i) & 1); <br> digitalWrite(aClockPin, 1); <br> <br> }<br> digitalWrite(aClockPin, 0); <br>}
|
Du burde kunne gøre følgende:
1 | void wait1sec()<br>{<br> _delay_ms(250);<br> _delay_ms(250);<br> _delay_ms(250);<br> _delay_ms(250);<br>}<br><br> int main()<br>{<br> while (1)<br> {<br> shiftOut(170);<br> wait1sec();<br> shiftOut(240);<br> wait1sec();<br> shiftOut(85);<br> wait1sec();<br> }<br>}<br>
|
Og så se forskellige mønstre skifte med 1 sek. mellemrum.
-Eller måske bedre:
1 | int main()<br>{<br> uint8_t i;<br><br> i = 0;<br> while (1)<br> {<br> shiftOut(i++);<br> _delay_ms(250);<br> }<br>}<br>
|
Da skulle du kunne se en binær tæller, når du bare kobler 8 stk. LEDs på ét shift-register.
Jeg vil tro, at hvis du nu skal have 16 LEDs på med 2 shift-registre, bør du nok have følgende test-kode:
1 | int main()<br>{<br> uint8_t i;<br> uint8_t j;<br><br> i = 0;<br> j = 0;<br> while (1)<br> {<br> shiftOut(i++);<br> shiftOut(j++);<br> _delay_ms(250);<br> }<br>}<br>
|