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
kann mir Bitte jemand helfen?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"); }
Danke







Zitieren

Lesezeichen