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


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.