' ######################################################################## ' # RF02-Test Bascom ' # Pollin Funk-AVR Board - RFM02 auf dem Board ' # Sendedaten am FSK-Pin ' # NIRQ Polling ' ######################################################################## $regfile = "m8def.dat" $hwstack = 32 $swstack = 10 $framesize = 40 $crystal = 12000000 $baud = 38400 'Baud = 38400 Config Pind.2 = Input Nirq Alias Pind.2 Config Portd.7 = Output Fsk Alias Portd.7 Led Alias Portd.5 Config Portd.5 = Output 'LED zur Kontrolle Dim Count As Byte Dim Temp As Byte Dim Cmd(2) As Byte Dim Tx(16) As Byte Dim N As Byte Dim I As Byte T1 Alias Pinb.1 'Taster T1 Declare Sub Fsk_send(byval Fsk_byte As Byte) Declare Sub Rf_cmd(byval Tmp As Word) As Word 'config SPI Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 16 , Noss = 0 'Config Spi = Soft , Din = Pinb.4 , Dout = Portb.3 , Ss = Portb.2 , Clock = Portb.5 'init the spi Spiinit Waitms 100 Toggle Led Call Rf_cmd(&Hcc00) Call Rf_cmd(&H9362) '868MHzband, 11.5pf, fsk90kHz, 2MHz clock Call Rf_cmd(&Ha686) '868.35MHz Call Rf_cmd(&Hc808) '38,4 kbit Call Rf_cmd(&Hc220) 'tx bit sync Call Rf_cmd(&Hc001) 'TX off Call Rf_cmd(&Hd240) 'PLL 25% Call Rf_cmd(&Hb300) '-9 db Call Rf_cmd(&He000) 'disable wakeup timer Toggle Led On Urxc Onrxd: 'Uart-Interruptroutine deklarieren Enable Urxc Enable Interrupts Do If N > 0 Then Goto Senden N = 0 Reset Led End If Debounce T1 , 1 , Test Loop End test: tx(1)= 84 tx(2)= 69 tx(3)= 83 tx(4)= 84 tx(5)= 58 tx(6)= 10 Tx(7) = 13 Goto Senden Senden: Disable Interrupts 'TX an Call Rf_cmd(&Hc039) 'Preamble 3x AA Call Fsk_send(&Haa) Call Fsk_send(&Haa) Call Fsk_send(&Haa) 'HI/LOW Frame-Erkennung Call Fsk_send(&H2d) Call Fsk_send(&Hd4) 'Daten For I = 1 To N 'to Wert wie im RFM01-Prog. Call Fsk_send(tx(i)) 'array senden Next I 'Frame -ende Kennung Call Fsk_send(&Haa) Call Rf_cmd(&Hc001) Enable Interrupts 'TX off Return Onrxd: Incr N Tx(n) = Udr Return Sub Fsk_send(byval Fsk_byte As Byte) Toggle Led For Count = 1 To 8 Bitwait Nirq , Set ' While Nirq = 0 'wait NIRQ goes high ' Wend ' While Nirq = 1 'wait NIRQ goes low ' Wend Temp = Fsk_byte And &H80 If Temp = &H80 Then Set Fsk Else Reset Fsk End If Shift Fsk_byte , Left Next End Sub Sub Rf_cmd(byval Tmp As Word) As Word Cmd(2) = Tmp And 255 Shift Tmp , Right , 8 Cmd(1) = Tmp Spiout Cmd(1) , 2 End Sub