Gast
#4341
Hallo Forum, leider haben sich doch noch einige Merkwürdigkeiten eingestellt: die unten stehende Routine soll Daten von einem Slave abfragen: der erste Schritt hierzu ist der Aufruf des Registers $38 im Slave. Nach der Übertragung des Bytes (funktioniert) soll der Slave Daten an den Master ausgeben (funktioniert nicht). Was mir dabei auffällt ist, das beim Senden des Bytes $38 8 Taktimpulse an SCK auftreten und das Bitmuster über MOSI an den Slave ausgegeben werden während in der Empfangssequenz keine Taktimpulse vorhanden sind. Das Progrämmchen verbleibt in der Schleife "warten1". Müssten nicht auch in der Empfangsroutine 8 Taktimpulse auftreten? Möglicherweise habe ich einen Fehler drin, aber ich sehe den einfach nicht....... Hier die Routine ;------------------------------------------ UP RX ----------------------------------- RX: ldi slave_reg,$38 cbi portb,ss ;enable Slave nop sbi spcr,spe ;SPI einschalten nop out spdr,slave_reg ;register $38 v. Slave wählen und senden rcall warten1 rcall time_1us ;Interbyte Time 1µs sbi spcr,spe ;enable SPI in rx_data,spdr rcall warten1 nop sbi portb,ss ;disable Slave rcall time_100us ;0.1mS warten, dann weiter rcall time_100us ;0.1mS warten, dann weiter rjmp RX ;------------------------------------------- UP Warten ------------------------------ warten1: sbis spsr,spif ;wenn Flag gesetzt, nächstes Byte rjmp warten1 ;sonst noch warten cbi spcr,spe ;SPI abschalten cbi spsr,spif ;spif löschen ret Danke für eure Mühe, es grüßt Günter (Dino)