Hallo!
Ich habe eine Schaltung mit einem ATtiny13, 2x 74HC595, zwei Darlington
Arrays und 16LEDs aufgebaut. Die LEDs sollen als Lauflicht fungieren.
Mein einziges Problem ist, dass immer wenn das erste Bit im
Schieberegister leuchten soll (Ausgang Q0 bzw. QA (je nach hersteller)),
dann leuchten alle LEDs an diesem Schieberegister.
Die Software sollte in Ordung sein. Ich habe zur Fehlereingrenzung
einfach statt vorher nun einem nun ein zweites Schieberegister
verwendet, da ich dachte, ich hätte einen Fehler in der
Schleifenbedingung (oder dergleichen), denke aber, dass ich dies nun
ausgrenzen kann, da auch das mittlere (also 9.) Bit den gleichen Fehler
beim zweiten Schieberegister hervorruft.
Hier der QT:
1 | #include <avr/io.h>
|
2 | #include <util/delay.h>
|
3 |
|
4 | void my_delay(uint16_t ms)
|
5 | {
|
6 | for(uint16_t t=0; t<=ms; t++)
|
7 | _delay_ms(1);
|
8 | }
|
9 |
|
10 | void setPin(int pin, uint16_t state)
|
11 | {
|
12 | if(state)
|
13 | {
|
14 | PORTB |= (1<<pin);
|
15 | }
|
16 | else
|
17 | {
|
18 | PORTB &= ~(1<<pin);
|
19 | }
|
20 | }
|
21 |
|
22 | int main (void)
|
23 | {
|
24 | DDRB = 0b11111111;
|
25 | PORTB = 0x00;
|
26 |
|
27 | while(1)
|
28 | {
|
29 | for(uint16_t i=0; i<=15; i++)
|
30 | {
|
31 | for(uint16_t k=0; k<=15; k++)
|
32 | {
|
33 | setPin(PB0, (k==i ? 1 : 0) );
|
34 | setPin(PB1, 1);
|
35 | setPin(PB1, 0); //shift
|
36 | }
|
37 | setPin(PB2, 1);
|
38 | setPin(PB2, 0); //save
|
39 |
|
40 | my_delay(300);
|
41 | }
|
42 | // my_delay(2000);
|
43 | }
|
44 | return 0;
|
45 | }
|
Youtube Video: http://www.youtube.com/watch?v=E2uuzhIYU1Q
Ich hoffe, ich habe alle nötigen Informationen mitgegeben.
Dake schoneinmal für eure Mühen.
Grüße Carsten