Schreib das ganze doch mal als vernünftige Funktion und nicht so als
Copy&Paste Orgie. Da muss man sonst jede einzelne Zeile kontrollieren,
ob du irgendwo einen Tippfehler versteckt hast
1 | #include <avr/io.h>
|
2 |
|
3 | #define CLEAR 4
|
4 | #define SCK 2
|
5 | #define RCK 1
|
6 | #define OE 3
|
7 | #define SER 5
|
8 |
|
9 | void output( uint8_t byte )
|
10 | {
|
11 | uint8_t i;
|
12 |
|
13 | for( i = 0; i < 8; i++ )
|
14 | {
|
15 | if( byte & 0x80 )
|
16 | PORTB |= (1<<SER);
|
17 | else
|
18 | PORTB &= ~(1<<SER);
|
19 |
|
20 | byte <<= 1;
|
21 |
|
22 | PORTB |= (1<<SCK);
|
23 | PORTB &= ~(1<<SCK);
|
24 | }
|
25 |
|
26 | PORTB |= (1<<RCK);
|
27 | PORTB &= ~(1<<RCK);
|
28 | }
|
29 |
|
30 | int main()
|
31 | {
|
32 | DDRB = 0xFF;
|
33 |
|
34 | PORTB = 0x00;
|
35 | PORTB |= (1<<CLEAR);
|
36 |
|
37 | output( 0xAA ); // abwechselnd ein 0 und ein 1 Bit
|
38 |
|
39 | while( 1 )
|
40 | ;
|
41 | }
|
Wenns dann immer noch nicht klappt, dann hängst du ein paar LED an die
Steuerpins vom 595, fügst ein paar ordentliche delay in die
Ausgabefunktion nach jeder Port-Manipulation ein und siehst den LED zu,
um rauszufinden, in welcher Reihenfolge welche Leitung auf High oder Low
geht und wo du dich bei der Verdrahtung vertan hast.