Forum: Mikrocontroller und Digitale Elektronik Schieberegister 74HV165 seielle Ausgabe in Array schreiben?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Andreas (Gast)


Lesenswert?

Hallo.

Ich versuche gerade, die serielle Ausgabe eines 74HC165 Schieberegisters 
irgendwie in ein Array oder Ähnlichem zu speichern. Bin ziemlicher 
Anfänger und bräuchte mal Hilfe beim Code. Versuche mich dabei mit C.

Das Schieberegister 74HC165 (Eingänge) bekommt HIGH bzw LOW von einem 
Zweiten Schieberegister 74HC595 (Ausgänge)- benutze einen Atmega8.

74HC595 (Ausgänge) gibt über ein Array folgendes aus:
char SteckerA[8]  = {1,0,1,0,1,0,1,0,};

Über Q7 des 74HC165 (Eingänge) kann ich dann auch eine serielle Ausgabe 
starten und z.B. eine Led 4 mal blinken lassen.

Ich möchte jetzt aber, die serielle Ausgabe über Q7 in ein Array 
abspeichern z.B. als Gegenstück zu char SteckerA[8]  = 
{1,0,1,0,1,0,1,0,}; soll das Array
char SteckerB[8]  = {1,0,1,0,1,0,1,0,}; initialisiert werden .

Irgeenjemand n Denkanstoß?
Gruß
Andreas

von Pepe (Gast)


Lesenswert?

Bitte ?
Ich würde dir ja gerne helfen, aber irgendwie versteh ich's nicht...

Hast Du ein Problem mit der Hardware (wo muss welcher Pin angeschlossen 
werden) oder klappt das einlesen vom 165er schon und du möchtest nur die 
Aufteilung in eine Array?

von Andreas (Gast)


Lesenswert?

Hallo.
Hardware läuft wunderbar. Aus dem 74HC165 schiebe ich seriell aus Q7 
raus und kann das auch mit Hilfe eine LED (blinken) viswuell darstellen. 
Ich würd nur gern die Abfolge der HIGHs und LOWS in ein Array oder so 
schreiben. Ich glaub, das wurde hier im Forum auch schob gelöst, ich 
versteh es bloß nicht:

unsigned char read_HC165( void )
{
  unsigned char result = 0;

  // Clock auf 1 halten
  PORTB |= (1<<PB5);

  // ein 0/1 Puls auf der PL Leitung. Der 165 übernimmt die
  // externen Datenleitungen ins SR
  PORTB &= ~(1<<PB6);
  PORTB |= (1<<PB6);

  // Datenleitung auf Eingang, Pullup aus
  DDRB &= ~(1<<PB4);
  PORTB &= ~(1<<PB4);

  // und die 8 Bit abholen
  for( unsigned char j = 0; j < 8; ++j )
  {
    result <<= 1;
    if( PINB & ( 1 << PB4 ) )
      result |= 0x01;

    // nächstes Bit aus dem SR mit einem 0/1 Puls raustakten
    PORTB &= ~(1<<PB5);
    PORTB |= (1<<PB5);
  }

  return result;
}

Der entscheidene Bereich für mich:

 // und die 8 Bit abholen
  for( unsigned char j = 0; j < 8; ++j )
  {
    result <<= 1;     //Bedeutung: schiebt unsigned char result 1 nach 
links?
    if( PINB & ( 1 << PB4 ) )
      result |= 0x01;   //Beduetung???????

Gruß
Andreas

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]
  • [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.