Hallo!
Ich versuche gerade eine RFM12B Funkstrecke zum laufen zu bringen.
Leider funzt es nicht und ich bin ratlos!! :-(
Hier mal das Bascom Beispiel von Elektor das ich verwende:
für den Sender:
Init_rfm12
Freq = 868.300
Freq_rfm12
'Sende key data
Test3:
D = Spi16(&H8238)
Do
Wait_rfm12
D = Spi16(&Hb82d)
Wait_rfm12
D = Spi16(&Hb8d4)
Loop
'-----------------------------------------------------------------------
-------------------------
Sub Init_rfm12
Nsel = 1
Sck = 0
'D = Spi16(&H80d7) ' El , Ef ,
11.5pf, 433 MHz band
D = Spi16(&H80e7) ' El , Ef ,
11.5pf, 868 MHz band
D = Spi16(&H82d9) '!er , !ebb
, Et , Es , Ex , !eb , !ew , Dc
D = Spi16(&Ha67c) ' 434,15 MHz
/ 868,3 MHz
D = Spi16(&Hc647) ' 4.8kbps
D = Spi16(&H94a0) ' Vdi , Fast
, 134 kHz , 0db , -79dbm
D = Spi16(&Hc2ac) ' Al , !ml ,
Dig , Dqd4
D = Spi16(&Hca81) ' Fifo8 ,
Sync , !ff , Dr
D = Spi16(&Hc483) ' @pwr , No
Rstric , !st , !fi , Oe , En
D = Spi16(&H9850) '9854??' 90
kHz , power - 0 dB
D = Spi16(&He000) '
D = Spi16(&Hc800) '
D = Spi16(&Hc000) ' 1 MHz ,
2.2V
End Sub
'-----------------------------------------------------------------------
-------------------------
Sub Freq_rfm12
If Freq < 800 Then Freq = Freq * 2
Freq = Freq - 860
D = Freq / 0.0050
If D < 96 Then D = 96
If D > 3903 Then D = 3903
D = D + &HA000
D = Spi16(d)
End Sub
Sub Send_rfm12
D = Spi16(&H8238)
Wait_rfm12
D = Spi16(&Hb8aa)
Wait_rfm12
D = Spi16(&Hb8aa)
Wait_rfm12
D = Spi16(&Hb8aa)
Wait_rfm12
D = Spi16(&Hb82d)
Wait_rfm12
D = Spi16(&Hb8d4)
For N = 1 To 10
Wait_rfm12
D = &HB800 + Data_out(n)
D = Spi16(d)
Next N
Wait_rfm12
D = Spi16(&Hb8aa)
Wait_rfm12
D = Spi16(&Hb8aa)
Wait_rfm12
D = Spi16(&H8208)
End Sub
Sub Wait_rfm12
Nsel = 0
Do
Loop Until Sdo = 1
End Sub
Sub Receive_rfm12
Tt = Timeout * 10
D = Spi16(&H82c8)
D = Spi16(&Hca83)
For N = 1 To 10
Nsel = 0
T = 0
Do
T = T + 1
Waitus 100
If T > Tt Then Goto Nosignal
Loop Until Sdo = 1
D = Spi16(&Hb000)
Data_in(n) = D
Next N
Nosignal:
D = Spi16(&H8208)
End Sub
Function Spi16(byval Dout As Word) As Word
Local Nspi As Integer
Local Dspi As Integer
Local Dsdo As Word
Nsel = 0
Dsdo = 0
For Nspi = 1 To 16
Dspi = Dout And &H8000
If Dspi = 0 Then
Sdi = 0
Else
Sdi = 1
End If
Dout = Dout * 2
Dsdo = Dsdo * 2
Dsdo = Dsdo + Sdo
Sck = 1
Waitus 5
Sck = 0
Next Nspi
Nsel = 1
Spi16 = Dsdo
End Function
für den Empfänger:
Init_rfm12
Freq = 868.300
Freq_rfm12
'start receiver, all data
D = &H00AA
Print #2 , Chr(d)
Wait 1
Test4:
D = Spi16(&H82c8)
D = Spi16(&Hca8b)
Print #2 , ""
For N = 1 To 100
Wait_rfm12
D = Spi16(&Hb000)
Data_in(n) = D
Print #2 , Chr(d)
Next N
Do
Loop
'-----------------------------------------------------------------------
-------------------------
Sub Init_rfm12
Nsel = 1
Sck = 0
'D = Spi16(&H80d7) ' El , Ef ,
11.5pf, 433 MHz band
D = Spi16(&H80e7) ' El , Ef ,
11.5pf, 868 MHz band
D = Spi16(&H82d9) '!er , !ebb
, Et , Es , Ex , !eb , !ew , Dc
D = Spi16(&Ha67c) ' 434,15 MHz
/ 868,3 MHz
D = Spi16(&Hc647) ' 4.8kbps
D = Spi16(&H94a0) ' Vdi , Fast
, 134 kHz , 0db , -79dbm
D = Spi16(&Hc2ac) ' Al , !ml ,
Dig , Dqd4
D = Spi16(&Hca81) ' Fifo8 ,
Sync , !ff , Dr
D = Spi16(&Hc483) ' @pwr , No
Rstric , !st , !fi , Oe , En
D = Spi16(&H9850) '9854??' 90
kHz , power - 0 dB
D = Spi16(&He000) '
D = Spi16(&Hc800) '
D = Spi16(&Hc000) ' 1 MHz ,
2.2V
End Sub
'-----------------------------------------------------------------------
-------------------------
Sub Freq_rfm12
If Freq < 800 Then Freq = Freq * 2
Freq = Freq - 860
D = Freq / 0.0050
If D < 96 Then D = 96
If D > 3903 Then D = 3903
D = D + &HA000
D = Spi16(d)
End Sub
Sub Send_rfm12
D = Spi16(&H8238)
Wait_rfm12
D = Spi16(&Hb8aa)
Wait_rfm12
D = Spi16(&Hb8aa)
Wait_rfm12
D = Spi16(&Hb8aa)
Wait_rfm12
D = Spi16(&Hb82d)
Wait_rfm12
D = Spi16(&Hb8d4)
For N = 1 To 10
Wait_rfm12
D = &HB800 + Data_out(n)
D = Spi16(d)
Next N
Wait_rfm12
D = Spi16(&Hb8aa)
Wait_rfm12
D = Spi16(&Hb8aa)
Wait_rfm12
D = Spi16(&H8208)
End Sub
Sub Wait_rfm12
Nsel = 0
Do
Loop Until Sdo = 1
End Sub
Sub Receive_rfm12
Tt = Timeout * 10
D = Spi16(&H82c8)
D = Spi16(&Hca83)
For N = 1 To 10
Nsel = 0
T = 0
Do
T = T + 1
Waitus 100
If T > Tt Then Goto Nosignal
Loop Until Sdo = 1
D = Spi16(&Hb000)
Data_in(n) = D
Next N
Nosignal:
D = Spi16(&H8208)
End Sub
Function Spi16(byval Dout As Word) As Word
Local Nspi As Integer
Local Dspi As Integer
Local Dsdo As Word
Nsel = 0
Dsdo = 0
For Nspi = 1 To 16
Dspi = Dout And &H8000
If Dspi = 0 Then
Sdi = 0
Else
Sdi = 1
End If
Dout = Dout * 2
Dsdo = Dsdo * 2
Dsdo = Dsdo + Sdo
Sck = 1
Waitus 5
Sck = 0
Next Nspi
Nsel = 1
Spi16 = Dsdo
End Function
Wenn ich mir dann die Daten anschaue die der Empfänger übermittelt
(Filter nur auf &HD4 eingestellt), kommt dann das raus: &H00 &H2d &H00
&HD4 &H00 .....
Wenn ich den empfänger aber auf &H2DD4 Filter einstelle, übermittelt er
gar nichts mehr an die Serielle schnittstalle, da er bei Wait_RFM12
hängen bleibt, weil der Filter nie Syncronisiert.
Was ist da los??? kann mir bitte jemand weiter helfen?!?!
Ich vermute mal, das der Sender nach oder vor jedem Byte nochmals ein
Byte mit &H00 sendet, aber warum???
MFG Pirker
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.