74HC165 gibt nur Lows zurück

Gast #2643878
Hallo,
ich habe die letzte Schaltung in der PDF aufgebaut und jeweils 2 ICs 
Kaskadiert (µC_MISO --> IC1_PIN9 --> IC2_PIN10)

http://www.mikrocontroller.net/attachment/1483/SPI_74HC595.pdf

Ich verwende statt PB0 den Port PB1.

Ich bekomme aber mit folgenden Code nur Nullen zurück...

Ich weiss leider nicht mehr weiter könnt ihr mir bitte helfen?

Noch eine Frage: Wie kann ich ein char binär über uart ausgeben? das ich 
z.b. ein A zu 01000001 mache.


Code

void serpa_init (void)
{
    DDRB |= (1<<PB5) | (1<<PB7) | (1<<PB4) | (1<<PB1); //MOSI, SCK, SS, 
PB1 als OUT
                                            // !!! SS muss OUT sein, 
damit SPI nicht in Slave-Mode wechselt !!!
    PORTB |= (1<<PB4) | (1<<PB1);                      //SS und PB1 auf 
High

    // SPI als Master
    // High-Bits zuerst
    // SCK ist HIGH wenn inaktiv
    SPCR = (1 << SPE) | (1 << MSTR) | (1 << CPOL);

    // pullup an MISO vermeidet Floaten
    PORTB |= (1<<PB5);

    // maximale Geschwindigkeit: F_CPU / 2
    SPSR |= (1 << SPI2X);
}

void serpa_in (unsigned char* serpain)
{
   unsigned char anz = 2;

   do
   {
        // 74HC165 latchen
       PORTB &= ~(1<<PB1);      //PB1 (PL) auf Low (Daten Lesen)
       PORTB |= (1<<PB1);   //PB1 (PL )auf High


      // SPDR lesen startet Uebertragung
      *serpain++ = SPDR;
   }
   while (--anz > 0);
}
Gast #2643996
> Noch eine Frage: Wie kann ich ein char binär über uart ausgeben?
1
void uart_putchar_bin(char a)
2
{
3
  uint8_t i = 8;
4
  while ( i-- ) {
5
    uart_putchar( ((a & (1<<i)) ? '1' : '0') );
6
  }
7
}

AVR-Tutorial: Schieberegister:
"Mittels des Eingangs PL (Parallel Load) werden die Daten vom parallelen 
Eingang in das Schieberegister übernommen, wenn dieses Signal LOW ist. 
Hier muss man aber ein klein wenig aufpassen.

>>> Auf Grund der Schaltungsstruktur ist der Eingang PL mit dem Takt CLK
>>> verknüpft (obwohl es dafür keinen logischen Grund gibt :-0). Damit es
>>> nicht zu unerwünschten Fehlschaltungen kommt, muss der Takt CLK
>>> während des Ladens auf HIGH liegen.

Wird PL wieder auf HIGH gesetzt, sind die Daten geladen. Das erste Bit 
liegt direkt am Ausgang Q7 an. Die restlichen Bits können nach und nach 
durch das Register geschoben werden."

Antwort schreiben

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