Okay, das hatte ich vermutet, war mir aber nicht sicher. Trotzdem funktioniert irgendetwas an meinem Code nicht richtig, und ich weiß nicht was... Das Ganze soll einfach nur permanent das "Nutzbyte" 0xAA übertragen - das ist alles. nIRQ des RFM12 geht hierzu an INT0.
Hier ist mal der Code:
Code:
$regfile = "m8def.dat"
$crystal = 1000000
Ddrb.1 = 1
Portb.1 = 1
Led Alias Portb.1
Portd.2 = 1 'PullUp für INT0
Config Int0 = Falling
On Int0 Tx_ready
Enable Int0
Enable Interrupts
Config Spi = Soft , Din = Portc.5 , Dout = Portc.2 , Clock = Portc.3 , Ss = Portc.4
Spiinit
Dim A(12) As Byte
Dim Flag As Bit
Flag = 1
Waitms 100 '"Aufwärmpause" für RFM12
A(1) = &B10000000 '1.: Configuration Setting Command
A(2) = &B10010000
A(3) = &B10000010 '2.: Power Management Command
A(4) = &B00111000
A(5) = &B10100110 '3.: Frequency Setting Command (434,000 MHz)
A(6) = &B01000000
A(7) = &B10011000 '10.: TX Configuration Control Command
A(8) = &B00000111 ' -21dB Sendeleistung, Hub = 15 kHz
A(9) = &B11000110 '4.: Data rate command (0,6 kbps)
A(10) = &B10111111
A(11) = &B10111000 '11.:Transmitter Register Write Command
A(12) = &B10101010 '"Nutzbyte"
Spiout A(1) , 10
Do
If Flag = 1 Then
Spiout A(11) , 2 'Daten an Puffer übertragen
Spiout A(11) , 2
Flag = 0
End If
Loop
Tx_ready:
Toggle Portb.1
Flag = 1
Return
Das Modul geht korrekt auf Sendung und überträgt ein einziges mal die Bytes (kann man bei 0,6 kbps mit einem Empfänger hören), aber dann nichts mehr, nur noch Träger. Auch die ISR wird nicht angesprungen (zu erkennen an der LED). nIRQ bleibt auf 0, obwohl der doch 1 werden müsste, sobald die ersten 2 Bytes den internen Puffer gefüllt haben, oder?
Weiß irgendjemand, wo mein Fehler liegt??
Lesezeichen