Das Programm demonstriert wie sich Daten per Funk austauschen lassen. Laden Sie das Programm unverändert in zwei RN-AVR UNIVERSAL Module die mit einem Funkmodul ausgestattet sind. Nach dem Start senden und empfangen die Module abwechselnd. Werden Daten empfangen werden die über die RS232/USBmodul ausgegeben. 'Werden keine Daten empfangen, wird "Kein Datenempfang" ausgegeben.
Dies ist nur ein Beispielprogramm das für eigene Zwecke beliebig angepasst werden kann
Code:'############################################################## 'Funkmodul RFM12 Test.bas ' 'Ein Testprogramm für die Universalplatine RN-AVR UNIVERSAL ' 'Das Programm demonstriert wie sich Daten per Funk austauschen lassen 'Laden Sie das Programm unverändert in zwei RN-AVR UNIVERSAL Module 'die mit einem Funkmodul ausgestattet sind. 'Nach dem Start senden und empfangen die Module abwechselnd 'Werden Daten empfangen werden die über die RS232/USBmodul ausgegeben 'Werden keine Daten empfangen, wird "Kein Datenempfang" ausgegeben. 'Dies ist nur ein Beispielprogramm das für eigene Zwecke beliebig 'angepasst werden kann ' 'Bezug: www.robotikhardware.de 'Weitere Beispiele auf DVD oder im www.Roboternetz.de und rn-wissen.de '###################################################################### Declare Sub Rfm12_init Declare Sub Rfm12_setfrequenz Declare Sub Rfm12_empfange Declare Sub Rfm12_senden Declare Function Spitransfer(byval Dout As Word) As Word $programmer = 12 'MCS USB (Zeile weglassen wenn anderer Programmer) $prog &HFF , &HFF , &HD9 , &HFE 'Fusebits richtig programmieren (Quarz ein,Jtag aus) $regfile = "m644def.dat" $framesize = 32 $swstack = 32 $hwstack = 64 $crystal = 8000000 'QuarzFrequenzuenz $baud = 9600 Baud = 9600 Config Pind.6 = Output 'LED Led1 Alias Portd.6 Config Pind.2 = Input 'Int0 Portd.2 = 1 'Pullup Config Int0 = Falling Enable Interrupts Enable Int0 On Int0 Funkirq Ss Alias Portb.4 Mosi Alias Portb.5 Miso Alias Pinb.6 Sck Alias Portb.7 Config Ss = Output Config Mosi = Output Config Sck = Output Dim Datenbytes As Byte Dim D As Word Dim Eingangsdaten(20) As Byte Dim Ausgabedaten(20) As Byte Dim N As Byte Dim Timeout As Word Dim T As Word Dim Tt As Word Dim Frequenz As Single Ss = 1 Sck = 0 Rfm12_init Frequenz = 434.150 Rfm12_setfrequenz Do For N = 1 To 10 'Datenbytes mit beliebigen Werten füllen Ausgabedaten(n) = N Next N Rfm12_senden Waitms 500 Timeout = 400 + Rnd(1000) Rfm12_empfange Led1 = 0 If Datenbytes = 0 Then Print "Kein Datenempfang" Else Print Print "Datenbytes:" ; Datenbytes For N = 1 To Datenbytes Print Eingangsdaten(n); Print " "; Next N End If Waitms 700 Loop ' ************ Hilfsfunktionen zur Kommunikation mit Funkmodul ************** ' (nähere Infos im Datenblatt des Funkmoduls) ' Initialisiere Funkmodul Sub Rfm12_init D = Spitransfer(&H80d7) '433 MHz 'D = spitransfer(&H80e7) '868 MHz D = Spitransfer(&H82d9) D = Spitransfer(&Ha67c) '434,15 MHz / 868,3 MHz D = Spitransfer(&Hc647) '4.8kbps D = Spitransfer(&H94a4) D = Spitransfer(&Hc2ac) D = Spitransfer(&Hca81) D = Spitransfer(&Hc483) D = Spitransfer(&H9850) D = Spitransfer(&He000) D = Spitransfer(&Hc800) D = Spitransfer(&Hc000) D = Spitransfer(&H0000) Waitms 200 End Sub Sub Rfm12_setfrequenz If Frequenz < 800 Then Frequenz = Frequenz * 2 Frequenz = Frequenz - 860 D = Frequenz / 0.0050 If D < 96 Then D = 96 If D > 3903 Then D = 3903 D = D + &HA000 D = Spitransfer(d) End Sub Sub Rfm12_empfange Tt = Timeout * 10 D = Spitransfer(&H82c8) D = Spitransfer(&Hca83) Datenbytes = 0 For N = 1 To 10 Ss = 0 T = 0 Do T = T + 1 Waitus 100 If T > Tt Then Goto Nosignal Loop Until Miso = 1 D = Spitransfer(&Hb000) Eingangsdaten(n) = D Datenbytes = Datenbytes + 1 'Anzahl der empfangenen Bytes merken Next N Nosignal: D = Spitransfer(&H8208) End Sub Sub Rfm12_senden D = Spitransfer(&H8238) Gosub Rfm12_warte D = Spitransfer(&Hb8aa) Gosub Rfm12_warte D = Spitransfer(&Hb8aa) Gosub Rfm12_warte D = Spitransfer(&Hb8aa) Gosub Rfm12_warte D = Spitransfer(&Hb82d) Gosub Rfm12_warte D = Spitransfer(&Hb8d4) For N = 1 To 10 Gosub Rfm12_warte D = &HB800 + Ausgabedaten(n) D = Spitransfer(d) Next N Gosub Rfm12_warte D = Spitransfer(&Hb8aa) Gosub Rfm12_warte D = Spitransfer(&Hb8aa) Gosub Rfm12_warte D = Spitransfer(&H8208) End Sub Function Spitransfer(byval Dout As Word) As Word Local Nspi As Integer Local Dspi As Integer Local Dmiso As Word Ss = 0 Dmiso = 0 For Nspi = 1 To 16 Dspi = Dout And &H8000 If Dspi = 0 Then Mosi = 0 Else Mosi = 1 End If Dout = Dout * 2 Dmiso = Dmiso * 2 Dmiso = Dmiso + Miso Sck = 1 Waitus 5 Sck = 0 Next Nspi Ss = 1 Spitransfer = Dmiso End Function Rfm12_warte: Ss = 0 Do Loop Until Miso = 1 Return Funkirq: Led1 = 1 Return







					
					
					
						
Zitieren
			

Lesezeichen