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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.