Hallo,
ich versuche grad die SPI vom Atmega32 zum Laufen zu bringen...funzt net
Hier der Code:
void spi_init(void)
{
sbi(DDRB, 4);
sbi(DDRB, 5);
cbi(DDRB, 6);
sbi(DDRB, 7);
sbi(SPCR, 0);
sbi(SPCR, 4);
sbi(SPCR, 6);
}
void spi_send(uint8_t data)
{
SPDR = data;
while(bit_is_clear(SPSR, 7))
{
}
}
int main(void)
{
spi_init();
while(1)
{
spi_send(0);
_delay_ms(100);
}
}
MOSI ist nun dauerhaft HIGH (mit Oszi gemessen)
SS ist dauerhaft LOW
SCk ist dauerhaft LOW
Wo ist der Fehler?
Gast
#4964293
Leopold N. schrieb: > SS ist dauerhaft LOW Als Master mußt Du Dich um SS selber kümmern und sobald der SS-Pin als Eingang definiert ist, muß er auf High gehalten werden. Sobald er auf Low geht, schaltet der AVR auf Slave um.
Horst schrieb: > und sobald der SS-Pin als > Eingang definiert ist ja aber ich habe ihn doch als Output definiert siehe: spi_init(void) --> sbi(DDRB, 4);
Zuviele magische Zahlen in dem Source Code, und vermutlich sind eine oder mehrere falsch. Für viele der Bits gäbe es sprechende Namen. Liegt SPCR überhaupt in dem von cbi/sbi ansprechbaren Speicherbereich?
Hi, hab die Lösung: SS-Pin muss vor Beginn einer Übertragung auf LOW gezogen werden und nach der Übertragung auf HIGH, dann startet auch die CLOCK mit den Datenbits. Grüße Leopold