1 | $regfile "m32def.dat"
|
2 |
|
3 | $crystal = 8000000
|
4 |
|
5 | $hwstack = 100 ' default use 32 for the hardware stack
|
6 | $swstack = 100 'default use 10 for the SW stack
|
7 | $framesize = 100
|
8 |
|
9 | $baud = 19200
|
10 | Baud = 19200
|
11 |
|
12 | Print "Start..."
|
13 |
|
14 | Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Porta.1 , Rs = Porta.0
|
15 | Config Lcd = 16 * 2
|
16 | Cursor Off
|
17 |
|
18 | Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 128 , Noss = 1
|
19 |
|
20 | Spiinit
|
21 |
|
22 |
|
23 | Config Int0 = Rising
|
24 | Enable Int0
|
25 | On Int0 Isr_von_int0
|
26 |
|
27 | Config Timer2 = Timer , Prescale = 8 'Zum erkennen von Fehlern während der Funkübertragung: Evtl. endlosschleife --> vermeiden
|
28 | On Ovf2 On_ovf0
|
29 | Enable Ovf2
|
30 |
|
31 | Stop Timer2
|
32 |
|
33 | '#################################################
|
34 | 'Ports
|
35 | '#################################################
|
36 | Rck Alias Porta.3
|
37 | Sck Alias Portc.0
|
38 | Si Alias Porta.2
|
39 |
|
40 | Config Portb.0 = Input
|
41 | Config Portb.2 = Input
|
42 | Config Portb.3 = Input
|
43 | Config Portd.3 = Input
|
44 | Config Portd.2 = Input
|
45 | Config Portb.1 = Input
|
46 | Config Portd.7 = Output
|
47 | Config Portd.5 = Output
|
48 |
|
49 |
|
50 | Portb.0 = 1
|
51 | Portb.2 = 1
|
52 | Portb.3 = 1
|
53 | Portd.3 = 1
|
54 | Portd.2 = 0
|
55 | Portb.1 = 1
|
56 |
|
57 |
|
58 | Schalter2 Alias Pinb.0
|
59 | Taster1 Alias Pinb.1
|
60 | Taster2 Alias Pinb.3
|
61 | Taster3 Alias Pinb.2
|
62 | Beleuchtung Alias Portd.5
|
63 |
|
64 | Led1 Alias Portd.7
|
65 |
|
66 | '---Funkboard---
|
67 | Spi_cs Alias Portb.4 ' SS-Pin
|
68 | Spi_sdo Alias Pinb.6
|
69 |
|
70 | Config Spi_cs = Output
|
71 |
|
72 | Set Spi_cs
|
73 |
|
74 | '#################################################
|
75 | 'Variablen
|
76 | '#################################################
|
77 |
|
78 | Const Rf12freq = 433.92
|
79 | Const Rf12baud = 19200
|
80 | Const Maxchar = 32
|
81 |
|
82 | Dim Temps(9) As Byte
|
83 | Dim Led(9) As Byte
|
84 | Dim Wert As Byte
|
85 |
|
86 | Dim Temp As Word
|
87 |
|
88 | Dim Gedruckt(3) As Byte
|
89 |
|
90 | 'Funkmodul:
|
91 | Dim I As Word
|
92 | Dim Count As Byte
|
93 | Dim Rfdata(32) As Byte
|
94 | Dim Text As String * Maxchar At Rfdata Overlay
|
95 |
|
96 | Dim S As String * 10
|
97 |
|
98 | Dim Tmr_zahler As Word
|
99 | Dim Abbrechen As Bit
|
100 |
|
101 | Dim Empf_flag As Bit
|
102 |
|
103 | '#################################################
|
104 | 'Declares
|
105 | '#################################################
|
106 |
|
107 |
|
108 | Declare Sub Rf12_init
|
109 | Declare Function Rf12_trans(byval Wert As Word) As Word
|
110 | Declare Sub Rf12_setfreq(byval Freq As Single)
|
111 | Declare Sub Rf12_setbandwith(byval Bandwith As Byte , Byval Gain As Byte , Byval Drssi As Byte)
|
112 | Declare Sub Rf12_setbaud(byval Rfbaud As Long)
|
113 | Declare Sub Rf12_setpower(byval Outpower As Byte , Byval Fskmod As Byte)
|
114 | Declare Sub Rf12_ready
|
115 | Declare Sub Rf12_readys
|
116 | Declare Sub Rf12_txdata(byval Maxchar As Byte)
|
117 | Declare Sub Rf12_rxdata(byval Maxchar As Byte)
|
118 | Declare Sub Rf12_rxdata_s(byval Maxchar As Byte)
|
119 |
|
120 |
|
121 | Declare Sub Empfang_starten
|
122 | Declare Sub Empfang_abbrechen
|
123 |
|
124 | '#################################################
|
125 | 'Main-Loop
|
126 | '#################################################
|
127 |
|
128 |
|
129 |
|
130 | Waitms 100
|
131 |
|
132 | Beleuchtung = 1
|
133 |
|
134 | Cls
|
135 |
|
136 |
|
137 | Locate 1 , 1
|
138 | Lcd "Herzlich"
|
139 | Locate 2 , 1
|
140 | Lcd "Willkommen!"
|
141 |
|
142 | Waitms 100
|
143 |
|
144 | Cls
|
145 |
|
146 | Locate 1 , 1
|
147 | Lcd "Booting.."
|
148 | Locate 2 , 1
|
149 |
|
150 | Waitms 200
|
151 |
|
152 | Config Watchdog = 2048
|
153 | Start Watchdog
|
154 |
|
155 | Locate 2 , 1
|
156 | Lcd "1/5"
|
157 | Call Rf12_init ' ein paar Register setzen (z.B. CLK auf 10MHz)
|
158 | Waitms 50
|
159 |
|
160 | Locate 2 , 1
|
161 | Lcd "2/5"
|
162 | Call Rf12_setfreq(rf12freq)
|
163 |
|
164 | Locate 2 , 1 ' Sende/Empfangsfrequenz auf 433,92MHz einstellen
|
165 | Lcd "3/5"
|
166 | Call Rf12_setbandwith(4 , 1 , 4) ' 200kHz Bandbreite, -6dB Verstärkung, DRSSI threshold: -79dBm
|
167 |
|
168 | Locate 2 , 1
|
169 | Lcd "4/5"
|
170 |
|
171 | Locate 2 , 1
|
172 | Call Rf12_setbaud(rf12baud) ' 19200 baud
|
173 | Lcd "5/5"
|
174 | Call Rf12_setpower(0 , 6) ' 1mW Ausgangangsleistung, 120kHz Frequenzshift
|
175 |
|
176 | Stop Watchdog
|
177 |
|
178 | Cls
|
179 |
|
180 |
|
181 | Print "Vor 1. Empfangen"
|
182 |
|
183 | Call Rf12_rxdata_s(maxchar) 'ohne diese Zeile geht irgendwie gar nichts
|
184 |
|
185 | Print "Empfangen!"
|
186 |
|
187 | Enable Interrupts
|
188 |
|
189 |
|
190 |
|
191 | Main:
|
192 | Do
|
193 |
|
194 | If Empf_flag = 1 Then
|
195 |
|
196 | Empf_flag = 0
|
197 | Call Rf12_rxdata(maxchar)
|
198 | For Count = 1 To Maxchar
|
199 | Print Chr(rfdata(count)) ; "-";
|
200 | Next Count
|
201 | Toggle Led1
|
202 |
|
203 | End If
|
204 |
|
205 | Loop
|
206 | '-------------------------------------------------
|
207 |
|
208 |
|
209 | '--------------------------------------
|
210 | '---Funkmodul---
|
211 | '--------------------------------------
|
212 |
|
213 | Sub Rf12_init:
|
214 | Temp = Rf12_trans(&Hc0e0)
|
215 | Temp = Rf12_trans(&H80d7)
|
216 | Temp = Rf12_trans(&Hc2ab)
|
217 | Temp = Rf12_trans(&Hca81)
|
218 | Temp = Rf12_trans(&He000)
|
219 | Temp = Rf12_trans(&Hc800)
|
220 | Temp = Rf12_trans(&Hc4f7)
|
221 | End Sub
|
222 |
|
223 |
|
224 | Sub Rf12_setfreq(byval Freq As Single)
|
225 |
|
226 | Freq = Freq - 430.00
|
227 | Temp = Freq / 0.0025
|
228 | If Temp < 96 Then
|
229 | Temp = 96
|
230 | Elseif Temp > 3903 Then
|
231 | Temp = 3903
|
232 | End If
|
233 | Temp = Temp + &HA000
|
234 | Temp = Rf12_trans(temp)
|
235 | End Sub
|
236 |
|
237 |
|
238 | Sub Rf12_setbandwith(byval Bandwith As Byte , Byval Gain As Byte , Byval Drssi As Byte)
|
239 | Drssi = Drssi And 7
|
240 | Gain = Gain And 3
|
241 | Temp = Bandwith And 7
|
242 | Shift Temp , Left , 2
|
243 | Temp = Temp + Gain
|
244 | Shift Temp , Left , 3
|
245 | Temp = Temp + Drssi
|
246 | Temp = Temp + &H9400
|
247 | Temp = Rf12_trans(temp)
|
248 | End Sub
|
249 |
|
250 |
|
251 | Sub Rf12_setbaud(byval Rfbaud As Long )
|
252 | Local Ltemp As Long
|
253 |
|
254 | If Rfbaud < 663 Then Exit Sub
|
255 |
|
256 | If Rfbaud < 5400 Then
|
257 | Temp = 43104 / Rfbaud
|
258 | Temp = Temp + &HC680
|
259 | Else
|
260 | Ltemp = 344828 / Rfbaud
|
261 | Temp = Ltemp
|
262 | Temp = Temp + &HC600
|
263 | End If
|
264 | Decr Temp
|
265 | Temp = Rf12_trans(temp)
|
266 | End Sub
|
267 |
|
268 |
|
269 | Sub Rf12_setpower(byval Outpower As Byte , Byval Fskmod As Byte)
|
270 | Outpower = Outpower And 7
|
271 | Temp = Fskmod And 15
|
272 | Shift Temp , Left , 4
|
273 | Temp = Temp + Outpower
|
274 | Temp = Temp + &H9800
|
275 | Temp = Rf12_trans(temp)
|
276 | End Sub
|
277 |
|
278 |
|
279 | Sub Rf12_txdata(byval Maxchar As Byte)
|
280 | Temp = Rf12_trans(&H8238)
|
281 | Rf12_ready
|
282 | Temp = Rf12_trans(&Hb8aa)
|
283 | Rf12_ready
|
284 | Temp = Rf12_trans(&Hb8aa)
|
285 | Rf12_ready
|
286 | Temp = Rf12_trans(&Hb8aa)
|
287 | Rf12_ready
|
288 | Temp = Rf12_trans(&Hb82d)
|
289 | Rf12_ready
|
290 | Temp = Rf12_trans(&Hb8d4)
|
291 | Rf12_ready
|
292 | For Count = 1 To Maxchar
|
293 | Rf12_ready
|
294 | Temp = &HB800 + Rfdata(count)
|
295 | Temp = Rf12_trans(temp)
|
296 | Next Count
|
297 | Rf12_ready
|
298 | Temp = Rf12_trans(&H8208)
|
299 | End Sub
|
300 |
|
301 |
|
302 | Sub Rf12_rxdata(byval Maxchar As Byte)
|
303 |
|
304 | Gosub Empfang_starten
|
305 | Temp = Rf12_trans(&H82c8)
|
306 | Temp = Rf12_trans(&Hca81)
|
307 | Temp = Rf12_trans(&Hca83)
|
308 | For Count = 1 To Maxchar
|
309 |
|
310 | Temp = Rf12_trans(&Hb000)
|
311 | Rfdata(count) = Temp
|
312 | Rf12_ready
|
313 | Next Count
|
314 | Temp = Rf12_trans(&H8208)
|
315 | Gosub Empfang_abbrechen
|
316 |
|
317 | End Sub
|
318 |
|
319 | Sub Rf12_rxdata_s(byval Maxchar As Byte) 'Besonderes Empfangen: Nur am Anfang
|
320 |
|
321 | Temp = Rf12_trans(&H82c8)
|
322 | Temp = Rf12_trans(&Hca81)
|
323 | Temp = Rf12_trans(&Hca83)
|
324 | For Count = 1 To Maxchar
|
325 | Temp = Rf12_trans(&Hb000)
|
326 | Rfdata(count) = Temp
|
327 | Rf12_readys
|
328 | Next Count
|
329 | Temp = Rf12_trans(&H8208)
|
330 |
|
331 | End Sub
|
332 |
|
333 |
|
334 |
|
335 | Function Rf12_trans(byval Wert As Word) As Word
|
336 | Local Lowbyte As Byte
|
337 | Local Highbyte As Byte
|
338 |
|
339 | Lowbyte = Wert And 255
|
340 | Shift Wert , Right , 8
|
341 | Reset Spi_cs
|
342 |
|
343 | Highbyte = Spimove(wert)
|
344 | Lowbyte = Spimove(lowbyte)
|
345 | Set Spi_cs
|
346 |
|
347 | Temp = Highbyte * 256
|
348 | Temp = Temp + Lowbyte
|
349 | Rf12_trans = Temp
|
350 | End Function
|
351 |
|
352 | Sub Rf12_readys
|
353 | I = 0
|
354 | Reset Spi_cs
|
355 | While Spi_sdo = 0
|
356 | Incr I
|
357 | If I = 10000 Then
|
358 | I = 0
|
359 | Exit While
|
360 | End If
|
361 | Wend
|
362 | End Sub
|
363 |
|
364 |
|
365 | Sub Rf12_ready
|
366 | Reset Spi_cs
|
367 | While Spi_sdo = 0
|
368 | If Abbrechen = 1 Then
|
369 | Temp = Rf12_trans(&H8208)
|
370 | Abbrechen = 0
|
371 | Goto Main
|
372 | Enable Int0
|
373 | End If
|
374 | Wend
|
375 | End Sub
|
376 |
|
377 | Sub Empfang_starten
|
378 | Start Timer2
|
379 | Abbrechen = 0
|
380 | 'Print "E"
|
381 |
|
382 | End Sub
|
383 |
|
384 | Sub Empfang_abbrechen
|
385 |
|
386 | Stop Timer2
|
387 |
|
388 | End Sub
|
389 |
|
390 |
|
391 |
|
392 | '-------------------------------------------------------------------------------
|
393 | '---Empfangen-------------------------------------------------------------------
|
394 | '-------------------------------------------------------------------------------
|
395 |
|
396 |
|
397 | Isr_von_int0:
|
398 | 'Disable Interrupts
|
399 |
|
400 | Empf_flag = 1
|
401 | Goto Main
|
402 | 'Print "!"
|
403 |
|
404 | 'Enable Interrupts
|
405 | Return
|
406 |
|
407 | On_ovf0:
|
408 |
|
409 | Incr Tmr_zahler
|
410 |
|
411 | If Tmr_zahler = 7000 Then
|
412 |
|
413 | Tmr_zahler = 0
|
414 | Abbrechen = 1
|
415 | Stop Timer2
|
416 |
|
417 | Print "AB"
|
418 |
|
419 | End If
|
420 |
|
421 | Return
|