Hallo Leute!
Ich hab einen ATMega32, den programmiere ich mit C im AVR Studio.
An dem Mega32 hängt mit drei Pins (/PL, Clock & DIn) ein einzger
Input-Portexpander 74HCT165 (Wie hier in dem Schieberegister-Tuturial).
Soweit so gut.
Der /PL hängt am PortB 6 (Out)
Der Clk hängt am PortB 5 (Out)
Der DIn hängt am PortB 4 (In)
Ich melke das Schieberegister und gebe die Daten auf nem LCD aus.
Es rührt sich auch was, nur wenn ich einen Port am Schieberegister
anspreche, leuchten acht 1er am LCD auf. Eigentlich sollte es ja nur
einer sein.
Guckt euch mal den Schnipsel an, der den 165er melkt! Wisst ihr
vielleicht wo das Problem liegen könnte?
1 | while(1)
|
2 | {
|
3 | // Im Display in die zweite Zeile gehen!
|
4 | set_cursor(0,2);
|
5 |
|
6 | // Clock im Ruhezustand auf 1 (Wie im Tutorial!)
|
7 | PORTB |= (1<<PB5);
|
8 |
|
9 | unsigned int i;
|
10 | for(i=1;i<=8;++i)
|
11 | {
|
12 | // An PL mal stroben...
|
13 |
|
14 | // PL auf High
|
15 | PORTB |= (1<<PB6);
|
16 | // PL auf Low
|
17 | PORTB &= ~(1<<PB6);
|
18 | // PL auf High
|
19 | PORTB |= (1<<PB6);
|
20 |
|
21 |
|
22 | if (PINB & (1<<PINB4)) {
|
23 | lcd_data('1');
|
24 | } else {
|
25 | lcd_data('0');
|
26 | }
|
27 |
|
28 |
|
29 | // An Clock mal stroben...
|
30 |
|
31 | // Clock auf High
|
32 | PORTB |= (1<<PB5);
|
33 | // Clock auf Low
|
34 | PORTB &= ~(1<<PB5);
|
35 | // Clock auf High
|
36 | PORTB |= (1<<PB5);
|
37 | }
|
38 | }
|
Dankeschön schonmal für eure Antworten! :-)