deko
21.04.2012, 13: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
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