PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] 74HC165 Hardware Spi macht Probleme



deko
21.04.2012, 12:44
Hallo,
ich kann mir leider keinen Reim darauf machen warum Code1 geht und Code2 mir fälschlicher weise sagt das nur Lows an den Eingängen der Register liegen...

Code 1

int main(void)
{
uart_init();

sei();
uart_puts("Hallo!\r\n");

DDRB |= (1<<PB5) | (1<<PB7) | (1<<PB4) | (1<<PB1); //MOSI, SCK, SS, PB1 als OUT
PORTB |= (1<<PB6); //Pullup MISO

setportbon(1); //PB1 = PL high
setportboff(1); //PB1 = PL low
setportbon(1); //PB1 = PL high

while ( 1)
{
if ( PINB & (1<<PINB6) ) {
uart_putc('1');

}
else
{
uart_putc('0');
}
setportbon(7); //SCK = CP high
setportboff(7);//SCK = CP LOW (Einmal Takten)
_delay_ms(1000);
}
}




Code 2

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

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

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

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;
uart_putchar_bin( SPDR);
}
while (--anz > 0);
}

void uart_putchar_bin(unsigned char a)
{
uint8_t i = 8;
while ( i-- ) {
uart_putc( ((a & (1<<i)) ? '1' : '0') );
}
uart_puts("\r\n");
}

kann mir Bitte jemand helfen?

Danke

deko
21.04.2012, 13:35
...

// SPDR lesen startet Uebertragung
//*serpain++ = SPDR;
SPDR = 0x00;
while (!(SPSR & (1<<SPIF)));
uart_putchar_bin( SPDR);
...

so geht es dann...

kann mir einer bitte mal sagen warum ich erst etwas senden muss um etwas zu empfangen?