1 | ' ########################################################################
|
2 | ' generated. Take care that the chip supports all fuse bytes.
|
3 | ' ### RF12-Test in Bascom
|
4 | ' ### Basiert auf Code von Benedikt K.
|
5 | ' ### Joachim Fossie B�r Reiter 04/2007
|
6 | ' ########################################################################
|
7 |
|
8 |
|
9 | $regfile = "m32def.dat"
|
10 | $hwstack = 32 ' default use 32 for the hardware stack
|
11 | $swstack = 10 'default use 10 for the SW stack
|
12 | $framesize = 40
|
13 |
|
14 | '$PROG &HFF,&HFF,&HD9,&H00' generated. Take care that the chip supports all fuse bytes.
|
15 |
|
16 | $crystal = 8000000
|
17 | $baud = 19200
|
18 | Baud = 19200
|
19 |
|
20 | Declare Sub Rf12_init
|
21 | Declare Function Rf12_trans(byval Wert As Word) As Word
|
22 | Declare Sub Rf12_setfreq(byval Freq As Single)
|
23 | Declare Sub Rf12_setbandwith(byval Bandwith As Byte , Byval Gain As Byte , Byval Drssi As Byte)
|
24 | Declare Sub Rf12_setbaud(byval Rfbaud As Long)
|
25 | Declare Sub Rf12_setpower(byval Outpower As Byte , Byval Fskmod As Byte)
|
26 | Declare Sub Rf12_ready
|
27 | Declare Sub Rf12_txdata(byval Maxchar As Byte)
|
28 | Declare Sub Rf12_rxdata(byval Maxchar As Byte)
|
29 |
|
30 | Const Rf12freq = 433.92
|
31 | Const Rf12baud = 19200
|
32 | Const Maxchar = 32
|
33 |
|
34 | 'config the SPI in master mode.The clock must be a quarter of the slave cpu
|
35 | ' Hier ggf. den SoftSPI reinmachen
|
36 | Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 128 , Noss = 1
|
37 |
|
38 | ' werden ben�tigt f�r rf12_ready
|
39 | Spi_cs Alias Portb.4 ' SS-Pin
|
40 | Config Spi_cs = Output
|
41 | Spi_sdo Alias Pinb.6 ' MOSI-PIN
|
42 | Set Spi_cs
|
43 |
|
44 | 'init the spi pins
|
45 | Spiinit
|
46 |
|
47 | ' was so gebraucht wird
|
48 | Dim Count As Byte
|
49 | Dim Temp As Word
|
50 | Dim Rfdata(32) As Byte
|
51 | Dim Text As String * Maxchar At Rfdata Overlay
|
52 |
|
53 | Print "Init"
|
54 | Call Rf12_init ' ein paar Register setzen (z.B. CLK auf 10MHz)
|
55 | Print "Set Frequenz"
|
56 | Call Rf12_setfreq(rf12freq) ' Sende/Empfangsfrequenz auf 433,92MHz einstellen
|
57 | Print "Set Bandwith"
|
58 | Call Rf12_setbandwith(4 , 1 , 4) ' 200kHz Bandbreite, -6dB Verst�rkung, DRSSI threshold: -79dBm
|
59 | Print "Set Baudrate"
|
60 | Call Rf12_setbaud(rf12baud) ' 19200 baud
|
61 | Print "Set Power"
|
62 | Call Rf12_setpower(0 , 6) ' 1mW Ausgangangsleistung, 120kHz Frequenzshift
|
63 |
|
64 |
|
65 | ' ########################################################################
|
66 | ' ###### Hauptproggi
|
67 | ' ########################################################################
|
68 |
|
69 |
|
70 | Text = "Dies ist ein 433MHz Test !!!!!{013}{010}"
|
71 |
|
72 | ' Je nachdem ob Sender oder Empf�nger die entsprechenden Zeilen aktivieren
|
73 | Do 'Ewigschleife
|
74 |
|
75 |
|
76 | ' Hier ist die Senderoutine
|
77 | ' Print "Sende"
|
78 | ' Call Rf12_txdata(maxchar)
|
79 |
|
80 | Wait 1
|
81 |
|
82 | ' Hier ist die Empfangsroutine
|
83 | Print "Empfange"
|
84 | Call Rf12_rxdata(maxchar)
|
85 | For Count = 1 To Maxchar
|
86 | Print Chr(rfdata(count)) ; "-";
|
87 | Next Count
|
88 | Print
|
89 |
|
90 | Loop
|
91 |
|
92 |
|
93 | End 'end program
|
94 |
|
95 |
|
96 | ' ########################################################################
|
97 | ' ###### Unterroutinen
|
98 | ' ########################################################################
|
99 |
|
100 | Sub Rf12_init:
|
101 | Waitms 150
|
102 | Temp = Rf12_trans(&Hc0e0)
|
103 | Temp = Rf12_trans(&H80d7)
|
104 | Temp = Rf12_trans(&Hc2ab)
|
105 | Temp = Rf12_trans(&Hca81)
|
106 | Temp = Rf12_trans(&He000)
|
107 | Temp = Rf12_trans(&Hc800)
|
108 | Temp = Rf12_trans(&Hc4f7)
|
109 | End Sub
|
110 |
|
111 |
|
112 | Sub Rf12_setfreq(byval Freq As Single)
|
113 |
|
114 | Freq = Freq - 430.00
|
115 | Temp = Freq / 0.0025
|
116 | If Temp < 96 Then
|
117 | Temp = 96
|
118 | Elseif Temp > 3903 Then
|
119 | Temp = 3903
|
120 | End If
|
121 | Temp = Temp + &HA000
|
122 | Temp = Rf12_trans(temp)
|
123 | End Sub
|
124 |
|
125 |
|
126 | Sub Rf12_setbandwith(byval Bandwith As Byte , Byval Gain As Byte , Byval Drssi As Byte)
|
127 | Drssi = Drssi And 7
|
128 | Gain = Gain And 3
|
129 | Temp = Bandwith And 7
|
130 | Shift Temp , Left , 2
|
131 | Temp = Temp + Gain
|
132 | Shift Temp , Left , 3
|
133 | Temp = Temp + Drssi
|
134 | Temp = Temp + &H9400
|
135 | Temp = Rf12_trans(temp)
|
136 | End Sub
|
137 |
|
138 |
|
139 | Sub Rf12_setbaud(byval Rfbaud As Long )
|
140 | Local Ltemp As Long
|
141 |
|
142 | If Rfbaud < 663 Then Exit Sub
|
143 |
|
144 | If Rfbaud < 5400 Then
|
145 | Temp = 43104 / Rfbaud
|
146 | Temp = Temp + &HC680
|
147 | Else
|
148 | Ltemp = 344828 / Rfbaud
|
149 | Temp = Ltemp
|
150 | Temp = Temp + &HC600
|
151 | End If
|
152 | Decr Temp
|
153 | Temp = Rf12_trans(temp)
|
154 | End Sub
|
155 |
|
156 |
|
157 | Sub Rf12_setpower(byval Outpower As Byte , Byval Fskmod As Byte)
|
158 | Outpower = Outpower And 7
|
159 | Temp = Fskmod And 15
|
160 | Shift Temp , Left , 4
|
161 | Temp = Temp + Outpower
|
162 | Temp = Temp + &H9800
|
163 | Temp = Rf12_trans(temp)
|
164 | End Sub
|
165 |
|
166 |
|
167 | Sub Rf12_txdata(byval Maxchar As Byte)
|
168 | Temp = Rf12_trans(&H8238)
|
169 | Rf12_ready
|
170 | Temp = Rf12_trans(&Hb8aa)
|
171 | Rf12_ready
|
172 | Temp = Rf12_trans(&Hb8aa)
|
173 | Rf12_ready
|
174 | Temp = Rf12_trans(&Hb8aa)
|
175 | Rf12_ready
|
176 | Temp = Rf12_trans(&Hb82d)
|
177 | Rf12_ready
|
178 | Temp = Rf12_trans(&Hb8d4)
|
179 | Rf12_ready
|
180 | For Count = 1 To Maxchar
|
181 | Rf12_ready
|
182 | Temp = &HB800 + Rfdata(count)
|
183 | Temp = Rf12_trans(temp)
|
184 | Next Count
|
185 | Rf12_ready
|
186 | Temp = Rf12_trans(&H8208)
|
187 | End Sub
|
188 |
|
189 |
|
190 | Sub Rf12_rxdata(byval Maxchar As Byte)
|
191 | Temp = Rf12_trans(&H82c8)
|
192 | Temp = Rf12_trans(&Hca81)
|
193 | Temp = Rf12_trans(&Hca83)
|
194 | For Count = 1 To Maxchar
|
195 | Rf12_ready
|
196 | Temp = Rf12_trans(&Hb000)
|
197 | Rfdata(count) = Temp
|
198 | Next Count
|
199 | Temp = Rf12_trans(&H8208)
|
200 | End Sub
|
201 |
|
202 |
|
203 |
|
204 | Function Rf12_trans(byval Wert As Word) As Word
|
205 | Local Lowbyte As Byte
|
206 | Local Highbyte As Byte
|
207 |
|
208 | Lowbyte = Wert And 255
|
209 | Shift Wert , Right , 8
|
210 | Reset Spi_cs
|
211 |
|
212 | Highbyte = Spimove(wert)
|
213 | Lowbyte = Spimove(lowbyte)
|
214 | Set Spi_cs
|
215 |
|
216 | Temp = Highbyte * 256
|
217 | Temp = Temp + Lowbyte
|
218 | Rf12_trans = Temp
|
219 | End Function
|
220 |
|
221 |
|
222 | Sub Rf12_ready
|
223 | Reset Spi_cs
|
224 | While Spi_sdo = 0
|
225 | Wend
|