Ich glaub, spiin ist nicht geeignet für sowas.
Versuch mal (ohne Garantie)
Spiempf:
B = Spsr
Lcd B
return
HALLO;
ich verzweifle gerade an dem Versuch 2 ATMega's per SPI kommunizieren zu lassen.
µc 1 ist ein Mega 16 und sendet alle 2 sekunden eine zweistellige zahl per Hardware-SPI an µc2.
µC 2 ist ein Mega 8 der die Daten per Hardware-SPI empfängt.
Nun das Problem: Wenn ich den SPI Eingang regelmässig abfrage kommt jeder Wert an ( auskommentierte Routine in der Main Loop , Interrupts sind dabei Nicht enabled. Sobald ich die Interrupts einschalte und statt dem Polling die Interruptgesteuerte Routine verwende, kommt nur jeder 2 Wert am µC 2 an.
Hat jemand von Euch 'ne Idee wo hier mein Fehler liegt ?
Jürgen
Code:$regfile = "m8def.dat" $crystal = 4000000 Dim B As Byte Config Spi = Hard , Interrupt = On Spiinit Enable Spi Enable Interrupts On Spi Spiempf Cls '--------------------------- Main: Do 'Spiin B , 1 'Lcd B 'Waitms 222 'Cls Loop End '---------------------------- Spiempf: Spiin B , 1 Lcd B Return
Ich glaub, spiin ist nicht geeignet für sowas.
Versuch mal (ohne Garantie)
Spiempf:
B = Spsr
Lcd B
return
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
@ Robert
Danke für Deine Antwort. Sie hat mir nur indirekt geholfen. Da ich mit SPSR gar nichts anzufangen wusste, habe ich mal wieder ins Datenblatt geschaut und dabei kam mir die Erleuchtung.
Das Register mit den Daten ist übrigens das SPDR. Im Datenblatt wird beschrieben, dass das SPI Interrupt Flag gesetzt wird, wenn der serielle Datentransfer beendet ist. Somit lese ich dann erst einen Wert ein wenn mir der erste entgangene Wert den Startschuss gab.
Also mit
spiempf:
b = spdr
lcd b
return
funktioniert das Ganze prima.
Tschüss
Jürgen
Lesezeichen