mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATMega32 vs. Input-Portexpander 74xx165


Autor: Stefan R. (quark48) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?
while(1)
{
   // Im Display in die zweite Zeile gehen!
  set_cursor(0,2);

  // Clock im Ruhezustand auf 1 (Wie im Tutorial!)
  PORTB |= (1<<PB5);

  unsigned int i;
  for(i=1;i<=8;++i)
  {
  // An PL mal stroben...

  // PL auf High
  PORTB |= (1<<PB6);
  // PL auf Low
  PORTB &= ~(1<<PB6);
  // PL auf High
  PORTB |= (1<<PB6);


  if (PINB & (1<<PINB4)) { 
    lcd_data('1');
  } else {
    lcd_data('0');
  }


  // An Clock mal stroben...

  // Clock auf High
  PORTB |= (1<<PB5);
  // Clock auf Low
  PORTB &= ~(1<<PB5);
  // Clock auf High
  PORTB |= (1<<PB5);
  }
}

Dankeschön schonmal für eure Antworten! :-)

Autor: Jörg G. (joergderxte)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist \PL nicht dazu da, die Eingänge einmal in das Schieberegister zu 
laden, das dann anschließend rausgetaktet wird? (Du hast die Hardware, 
du liest das  Datenblatt).
Zieh mal den \PL-Strobe vor die Schleife.

rtfm, Jörg

Autor: Stefan R. (quark48) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Stimmt, ich Depp gnnnnnn!

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

Der Code klappt jetzt:
while(1)
{
   // Im Display in die zweite Zeile gehen!
  set_cursor(0,2);

  // Clock im Ruhezustand auf 1 (Wie im Tutorial!)
  PORTB |= (1<<PB5);

  // An PL mal stroben...

  // PL auf High
  PORTB |= (1<<PB6);
  // PL auf Low
  PORTB &= ~(1<<PB6);
  // PL auf High
  PORTB |= (1<<PB6);

  unsigned int i;

  for(i=1;i<=8;++i)
  {
  if (PINB & (1<<PINB4)) { 
    lcd_data('1');
  } else {
    lcd_data('0');
  }


  // An Clock mal stroben...

  // Clock auf High
  PORTB |= (1<<PB5);
  // Clock auf Low
  PORTB &= ~(1<<PB5);
  // Clock auf High
  PORTB |= (1<<PB5);
  }
}

Autor: Markus P. (sebastianwurst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo findet mann denn das Forum für diesen Portexpander ? In C.
Danke

Autor: Markus P. (sebastianwurst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weiss einer evtl auf welches Tut er sich hier bezieht? Das was ich hier 
finde ist nur für Assembler.... Danke

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.