ATMega32 vs. Input-Portexpander 74xx165

OP Persönliche Seite #1435158
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
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.