Forum: Mikrocontroller und Digitale Elektronik 74HC165 gibt nur Lows zurück


von Thomas (Gast)


Lesenswert?

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);
}

von Krapao (Gast)


Lesenswert?

> 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."

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.