ATMega32 vs. Input-Portexpander 74xx165

OP Persönliche Seite #1435158
Lesenswert?

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! :-)
OP Persönliche Seite #1435245
Lesenswert?

Hallo!

Stimmt, ich Depp gnnnnnn!

/PL muss nur am Anfang mal getatktet werden.
Also vor der Schleife!
Danke! :-)

Der Code klappt jetzt:
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
  // An PL mal stroben...
10

11
  // PL auf High
12
  PORTB |= (1<<PB6);
13
  // PL auf Low
14
  PORTB &= ~(1<<PB6);
15
  // PL auf High
16
  PORTB |= (1<<PB6);
17

18
  unsigned int i;
19

20
  for(i=1;i<=8;++i)
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
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren