Schieberegister 74HV165 seielle Ausgabe in Array schreiben?

Gast #4128345
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
Gast #4128426
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?
Gast #4128594
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

Eine eigene Frage? Dieser Thread ist über 11 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.