Okay, also ich hab es jetzt nochmal noch feiner umgeschrieben das Programm.
Und hab so weit erstmal etwas hin bekommen, das die Schaltung zumindest reagiert, sobald Daten an kommen.
Irgendwie scheint da das Hardware-SPI nicht so richtig zu funktionieren oder ich bein einfach zu blöd für...
Hab das SPI jetzt raus gelassen und ne komplette Software-SPI Lösung geschrieben. Und damit funktionierts...
Für alle dies Interessiert, hier der code (nur Schade das result beim Empfangen immer 0x00 ist, obwohl beim ersten Byte 0x31 gesendet wird...)
Code:
' Empfangen von Daten auf dem Evaluation-Board
' Modul: RFM01
' AVR: Mega8
$regfile = "m8def.dat"
$crystal = 8000000
Declare Function Rf01_trans(byval Wert As Word) As Word
Declare Function Read_fifo() As Byte
Dim A As Byte
Dim B As Byte
Dim Temp As Word
Dim Result As Byte
Led1 Alias Portd.6
Led2 Alias Portd.5
Modul_power Alias Portd.4
Spi_cs Alias Portb.2 ' SS-Pin
Spi_sdo Alias Pinb.4 ' MISO-PIN
Ddrd.4 = 1
Ddrd.5 = 1 'LED 2 Ausgang
Ddrd.6 = 1
Reset Led2
Reset Modul_power
Wait 1
For A = 1 To 6
Toggle Led2
Waitms 200
Next A
Reset Led2
Set Modul_power
Waitms 200
Portb.2 = 1 'Slave inaktiv
Portb.3 = 1 'MOSI auf high
Portb.5 = 0 'Sck Low
Portb.7 = 1 'FSK high
Ddrb.2 = 1
Ddrb.3 = 1
Ddrb.4 = 0 'MISO = Eingang
Ddrb.5 = 1
'Ddrd.2 = 0 'INT0 als Eingang
'Ddrd.7 = 1 'FSK als Ausgang
Temp = Rf01_trans(&H0000)
Temp = Rf01_trans(&H898a)
Temp = Rf01_trans(&Ha640)
Temp = Rf01_trans(&Hc847)
Temp = Rf01_trans(&Hc69b)
Temp = Rf01_trans(&Hc42a)
Temp = Rf01_trans(&Hc240)
Temp = Rf01_trans(&Hc080)
Temp = Rf01_trans(&Hce88)
Temp = Rf01_trans(&Hce8b)
Temp = Rf01_trans(&Hc081)
Ddrd.7 = 1 'FSK
Ddrd.2 = 0 'nIRQ
B = 0
Do
Do
Loop Until Pind.2 = 0
Set Led2
B = B + 1
Result = Read_fifo()
If Result = &H00 Then
Set Led1
Waitms 200
Reset Led1
End If
If B = 18 Then
Temp = Rf01_trans(&Hce88)
Temp = Rf01_trans(&Hce8b)
B = 0
'Set Led2
'Waitms 200
'Reset Led2
End If
Reset Led2
Loop
Function Rf01_trans(byval Wert As Word) As Word
Temp = 0
Portb.5 = 0 'Low SCK
Portb.2 = 0 'Low SS
For A = 15 To 0 Step -1
If Wert.a = 1 Then
Portb.3 = 1
Else
Portb.3 = 0
End If
Portb.5 = 1 'high sck
nop
nop
nop
nop
Portb.5 = 0
Next A
Portb.2 = 1
End Function
Function Read_fifo() As Byte
Portb.5 = 0
Portb.3 = 0
Portb.2 = 0
For A = 0 To 15
Portb.5 = 1
nop
Portb.5 = 0
nop
Next A
For A = 7 To 0 Step -1
If Pinb.4 = 1 Then
Result.a = 1
Else
Result.a = 0
End If
Portb.5 = 1
nop
Portb.5 = 0
nop
Next A
Portb.2 = 1
Read_fifo = Result
End Function
End
Lesezeichen