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
Code:
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
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<<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
Lesezeichen