Hier ein kurzes Beispiel zur Kommunikation zwischen 2 RFM12 Funkmodulen, 833 MHz.
Die 433MHz Module müssen entsprechend die Einstellung für 433MHz haben (logisch)
Die beiden Module wurden hier benutzt, um die Pulse eines Ferraris-Stromzählers zu übertragen.
Der Slave mit Atmega8 hat dafür einen Infrarotsensor, der auf die Kante der Scheibe leuchtet, ein Phototransistor erfasst den Moment, wenn die Markierung vorbei kommt.
Dazu habe ich ein Sück 6mm Plexigals mit 2 Löchern versehen und dort die beiden Sensorbauteile rein gesteckt, der Phototransistor hat ein kleines schwarzes Röhrchen, damit er kein Fremdlicht bekommt.
Aus der Dauer zwischen 2 Markierungen lässt sich die aktuelle Leistung (vulgo Stromverbrauch) berechnen und natürlich die aufgelaufene Energie.
Bei 75U/kWh sind z.B. bei 20 Sekunden für einen Umlauf eine Leistung von 2,4 kW
Masterprogramm:
Alles anzeigen
Slaveprogramm:
Alles anzeigen
StromZsensor.JPG
Die 433MHz Module müssen entsprechend die Einstellung für 433MHz haben (logisch)
Die beiden Module wurden hier benutzt, um die Pulse eines Ferraris-Stromzählers zu übertragen.
Der Slave mit Atmega8 hat dafür einen Infrarotsensor, der auf die Kante der Scheibe leuchtet, ein Phototransistor erfasst den Moment, wenn die Markierung vorbei kommt.
Dazu habe ich ein Sück 6mm Plexigals mit 2 Löchern versehen und dort die beiden Sensorbauteile rein gesteckt, der Phototransistor hat ein kleines schwarzes Röhrchen, damit er kein Fremdlicht bekommt.
Aus der Dauer zwischen 2 Markierungen lässt sich die aktuelle Leistung (vulgo Stromverbrauch) berechnen und natürlich die aufgelaufene Energie.
Bei 75U/kWh sind z.B. bei 20 Sekunden für einen Umlauf eine Leistung von 2,4 kW
Masterprogramm:
BASCOM-Quellcode: RFM12_Master_web.bas
- 'Programm RFM12_Master_web.bas
- 'RFM12 868 Transceiver mit Soft SPI
- 'Grafikdisplay Pollin 128x64 SED
- 'Sendet Anfragen über RFM12 und empfängt Zählerimpulse von einem Ferraris-Zähler
- 'Creative Commons Lizens
- 'Namensnennung - Nicht-kommerziell - Weitergabe unter gleichen Bedingungen 3.0
- 'http://creativecommons.org/licenses/by-nc-sa/3.0/de/
- '
- 'Michael bascomforum.de
- 'Holli bascom-forum.de
- $regfile = "m16def.dat"
- $crystal = 8000000
- $hwstack = 64
- $swstack = 64
- $framesize = 80
- '******************************************************************************
- $lib "glcdSED1520.lbx"
- Nsel Alias Portd.0
- Sdi Alias Portd.2
- Sdo Alias Pind.3
- Sck Alias Portd.1
- Rfm_reset Alias Portc.3
- Config Rfm_reset = Output
- Rfm_reset = 0
- Dim D As Word
- Dim Data_in(10) As Byte
- Dim Eingang(7) As Byte
- Dim Ausgang(7) As Byte
- Dim Neustartbit As Bit
- Neustartbit = 1
- Dim N As Byte
- Dim T As Word
- Dim Nspi As Integer
- Dim Dspi As Integer
- Dim Dsdo As Word
- Dim Temp As Byte
- Dim Z_speicher As Word
- Dim Z1speicher As Word
- Declare Sub Send_rfm12
- Declare Sub Receive_rfm12
- Declare Sub Wait_rfm12
- Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8
- Config Clock = Soft , Gosub = Sectic
- Compare1a = 127
- Compare1b = 127
- Led Alias Portc.5
- Config Led = Output
- Led2 Alias Portc.4
- Config Led2 = Output
- Led = 1
- Waitms 500
- Led = 0
- Waitms 500
- Led = 1
- Portd.6 = 1
- Config Pind.4 = Output
- Config Pind.5 = Output
- Res Alias Portb.4
- Config Res = Output
- Res = 1
- Waitms 50
- Led = 1
- Waitms 100
- Led = 0
- Res = 0
- Waitms 100
- Led = 1
- Waitms 100
- Led = 0
- Waitms 100
- Led = 1
- Res = 1
- Waitms 50
- Config Nsel = Output
- Config Sdi = Output
- Config Sck = Output
- Enable Interrupts
- Dim Neusec As Bit
- Dim Z_string As String * 8
- Dim Fffz As Word
- Dim Ffez As Word
- Dim Timeout As Word
- Dim Debugz As Word
- Config Rfm_reset = Input
- Rfm_reset = 1
- Waitms 20
- Gosub Initrfm12
- Led2 = 1
- Config Graphlcd = 128 * 64sed , Dataport = Porta , Controlport = Portb , Ce = 3 , Ce2 = 2 , Cd = 1 , Rd = 0
- Cls
- Glcdcmd &HAE ' , 1 ': Glcdcmd &H3E , 2 ' both displays off
- Glcdcmd &HAF ', 1 ': Glcdcmd &H3F , 2 'both on
- Led2 = 0
- '*******************************************************************************
- 'Waitms 100
- Setfont My6_8
- Dim X As Byte
- Dim Richtung As Bit
- Dim A As Byte
- Dim Empfang As Byte
- Dim Lcdflag As Bit
- Dim Crcbyte As Byte
- Dim Zaehler As Word
- Dim Status As Byte
- Dim Wdz As Word
- Dim Zaehlerstand As Word
- Dim Zaehlerst_alt As Word
- Dim Tempw As Word
- Dim Periode As Word
- Dim Leistung As Word
- Dim Intervall As Word
- Anfrage Alias Status.0
- Const Startbyte = &HAA
- Const Zieladresse = 12
- Const Sendeadresse = 11
- Const Laenge = 6
- Dim Ausgabe As String * 20
- Dim Wh As Word
- Dim Nurregister As Bit
- Setfont My6_8
- Cls
- Lcdat 2 , 1 , "V RFM12_Master_web" , 0
- Waitms 300
- Cls
- D = &H82C8 : Gosub Wert 'Empfang einschalten
- D = &HCA93 : Gosub Wert 'warten auf 2DD4,dann SDO=1
- Zaehlerstand = 1
- Leistung = 500
- Periode = 100
- Lcdflag = 1
- '----------------------------------------------------------------------------------
- '----------------------------------------------------------------------------------
- Wdz = 1
- Do
- If Neusec = 1 Then
- Neusec = 0
- Ausgang(1) = Startbyte
- Ausgang(2) = Sendeadresse
- Ausgang(3) = Zieladresse
- Ausgang(3).7 = Neustartbit
- Ausgang(4) = Eingang(4)
- Ausgang(5) = Eingang(5)
- Ausgang(6) = Crc8(ausgang(1) , 5)
- Tempw = Eingang(4) And &H0F
- Tempw = Tempw * 256
- Tempw = Tempw + Eingang(5)
- Eingang(4) = 0
- Eingang(5) = 0
- Zaehlerstand = Zaehlerstand + Tempw
- Send_rfm12
- D = &H82C8 : Gosub Wert 'Empfang einschalten
- Lcdflag = 1
- Neustartbit = 0
- Else 'Receive_rfm12
- If Pind.6 = 0 Then
- Timeout = 1000
- D = &H0000 : Gosub Wert
- If D.9 = 0 Then
- Incr Fffz
- Else
- Incr Ffez
- End If
- Receive_rfm12
- Incr Empfang
- If Empfang > 6 Then
- Led = 1
- D = &H8208 : Gosub Wert
- D = &H0000 : Gosub Wert 'Statusregister lesen zum Resetten des Power on Flags
- Z1speicher = D
- D = &H82C8 : Gosub Wert 'Empfang einschalten
- Empfang = 0
- Lcdflag = 1
- Crcbyte = Crc8(data_in(1) , 5)
- If Crcbyte = Data_in(6) Then
- Eingang(1) = Data_in(1)
- Eingang(2) = Data_in(2)
- Eingang(3) = Data_in(3)
- Eingang(4) = Data_in(4)
- Eingang(5) = Data_in(5)
- Eingang(6) = Data_in(6)
- Eingang(7) = Data_in(7)
- End If
- End If
- End If
- End If
- If Timeout > 0 Then
- Decr Timeout
- Waitus 5
- Else
- Led = 0
- Empfang = 0
- End If
- If Lcdflag = 1 Then
- Led2 = 1
- If Zaehlerstand <> Zaehlerst_alt Then
- Intervall = Periode
- Periode = 0
- End If
- Zaehlerst_alt = Zaehlerstand
- If Intervall > 0 Then
- Leistung = 48000 / Intervall
- End If
- Lcdflag = 0
- Crcbyte = Crc8(data_in(1) , 5)
- Setfont My6_8
- 'Lcdat 1 , 1 , Hex(data_in(1)) ; Hex(data_in(2)) ; Hex(data_in(3)) ; Hex(data_in(4)) ; Hex(data_in(5)) ; Hex(data_in(6)) ; Hex(data_in(7)) ; " " ; Hex(crcbyte)
- Lcdat 1 , 1 , Hex(eingang(2)) ; Hex(eingang(3)) ; Hex(eingang(4)) ; Hex(eingang(5)) ; Hex(eingang(6))
- Lcdat 2 , 1 , Hex(ausgang(2)) ; Hex(ausgang(3)) ; Hex(ausgang(4)) ; Hex(ausgang(5)) ; Hex(ausgang(6)) '"FEDCBA9876543210"
- Lcdat 3 , 1 , Leistung ; " Watt " ; Time$ ; " "
- Ausgabe = ""
- If Zaehlerstand < 1000 Then Ausgabe = Ausgabe + " "
- If Zaehlerstand < 100 Then Ausgabe = Ausgabe + " "
- If Zaehlerstand < 10 Then Ausgabe = Ausgabe + " "
- Ausgabe = Ausgabe + Str(zaehlerstand)
- Ausgabe = Ausgabe + " "
- Wh = Zaehlerstand * 4
- Wh = Wh / 300
- If Wh < 100 Then Ausgabe = Ausgabe + " "
- If Wh < 10 Then Ausgabe = Ausgabe + " "
- Ausgabe = Ausgabe + Str(wh) + ","
- Wh = Zaehlerstand * 4
- Wh = Wh / 3
- Wh = Wh Mod 100
- If Wh < 10 Then Ausgabe = Ausgabe + "0"
- Ausgabe = Ausgabe + Str(wh) + "kWh"
- Lcdat 4 , 1 , Ausgabe
- Setfont My12_16
- Ausgabe = Str(leistung) + "W "
- Lcdat 1 , 64 , Ausgabe
- ' Lcdat 4 , 1 , Debugz ; " " ; Ffez ; " " ; Fffz ; " Z " ; Zaehlerstand
- Led2 = 0
- End If
- Incr Wdz
- Loop
- End
- $include "C:\Users\xxxx\Eigene Dateien\Bascom\my12_16.font"
- $include "C:\Users\xxxx\Eigene Dateien\Bascom\my6_8.font"
- Start:
- Receive_rfm12 'Daten empfangen,in tabelle schreiben
- ' If Data_in(1) <> 1 Then Goto Start 'wenn 1. Byte=1 dann weiter(z.B. Adresse)
- Waitms 100 'kurz warten
- Send_rfm12 'Daten zurücksenden
- Return
- '----------------------------------------------------------------------------------------------------------------
- Sub Send_rfm12:
- D = &H8238 : Gosub Wert
- Wait_rfm12
- If Nurregister = 1 Then Goto Endsend
- D = &HB8AA : Gosub Wert
- Wait_rfm12
- D = &HB8AA : Gosub Wert
- Wait_rfm12
- D = &HB8AA : Gosub Wert
- Wait_rfm12
- D = &HB82D : Gosub Wert
- Wait_rfm12
- D = &HB8D4 : Gosub Wert
- For N = 1 To 6
- Wait_rfm12
- D = &HB800 + Ausgang(n) : Gosub Wert
- Next N
- Wait_rfm12
- D = &HB8AA : Gosub Wert
- Wait_rfm12
- D = &HB8AA : Gosub Wert
- Wait_rfm12
- Endsend:
- Nurregister = 0
- D = &H8208 : Gosub Wert
- End Sub
- Sub Wait_rfm12
- Nsel = 0
- Do
- 'Led2 = 1
- Loop Until Sdo = 1
- 'Led2 = 0
- End Sub
- Sub Receive_rfm12
- D = &HB000 : Gosub Wert 'Seriell-Parralel
- Data_in(empfang + 1) = D 'in Empfangspuffer schreiben
- End Sub
- Wert:
- Incr Debugz
- Nsel = 0
- Dsdo = 0
- For Nspi = 1 To 16
- Dspi = D And &H8000
- If Dspi = 0 Then
- Sdi = 0
- Else
- Sdi = 1
- End If
- D = D * 2
- Dsdo = Dsdo * 2
- Dsdo = Dsdo + Sdo
- Sck = 1
- Waitus 5
- Sck = 0
- Next Nspi
- Nsel = 1
- D = Dsdo
- Return
- Initrfm12:
- Nsel = 1
- Sck = 0
- D = &H0000 : Gosub Wert
- 'D = Spi16(&H80d7) ' El , Ef , 11.5pf, 433 MHz band
- D = &H80E7 : Gosub Wert ' El , Ef , 11.5pf, 868 MHz band
- D = &H82D9 : Gosub Wert '!er , !ebb , Et , Es , Ex , !eb , !ew , Dc
- D = &HA67C : Gosub Wert ' 434,15 MHz / 868,3 MHz
- D = &HC647 : Gosub Wert ' 4.8kbps
- 'D = &HC612 : Gosub Wert ' 19.2kbps
- 'D = &H94A4 : Gosub Wert ' Vdi , Fast , 134 kHz , 0db , -79dbm
- D = &H9427 : Gosub Wert
- D = &HC2AC : Gosub Wert ' Al , !ml , Dig , Dqd4
- D = &HCA81 : Gosub Wert ' Fifo8 , Sync , !ff , Dr
- D = &HC483 : Gosub Wert ' @pwr , No Rstric , !st , !fi , Oe , En
- D = &H9850 : Gosub Wert ' 90 kHz , power - 0 dB
- D = &HE000 : Gosub Wert '
- D = &HC800 : Gosub Wert '
- D = &HC000 : Gosub Wert ' 1 MHz , 2.2V
- 'D = &HC060 : Gosub Wert ' 2 MHz , 2.2V
- 'D = &HC0C0 : Gosub Wert ' 5 MHz , 2.2V
- D = 1660 + &HA000 : Gosub Wert 'Frequenz einstellen 868,3 MHz
- ' (868,3-860)/0,005 = 1660 ,muß aber > 96 und < 3903 sein
- D = &H0000 : Gosub Wert 'Statusregister lesen zum Resetten des Power on Flags
- Nurregister = 1
- Send_rfm12
- Return
- Sectic:
- ' Toggle Led
- Neusec = 1
- Incr Periode
- If Wdz > 0 Then
- Wdz = 0
- Else
- Config Rfm_reset = Output
- Rfm_reset = 0
- Waitms 10
- Config Rfm_reset = Input
- Rfm_reset = 1
- Waitms 20
- Gosub Initrfm12
- End If
- Return
Slaveprogramm:
BASCOM-Quellcode: RFM12_SlaveM8_web.bas
- 'Programm RFM12_SlaveM8_web.bas
- 'RFM12 868 Transceiver mit Soft SPI
- 'Empfängt Anfragen über RFM12 und sendet aufgenommene Zählerimpulse von einem Ferraris-Zähler
- 'Creative Commons Lizens
- 'Namensnennung - Nicht-kommerziell - Weitergabe unter gleichen Bedingungen 3.0
- 'http://creativecommons.org/licenses/by-nc-sa/3.0/de/
- '
- 'Michael bascomforum.de
- 'Holli bascom-forum.de
- $regfile = "m8def.dat"
- $crystal = 16000000
- $hwstack = 72
- $swstack = 72
- $framesize = 80
- $baud = 38400
- Config Timer1 = Timer , Prescale = 256
- On Timer1 T1irq
- Enable Timer1
- Enable Interrupts
- Led Alias Portb.5
- Config Led = Output
- Led2 Alias Portc.0
- Config Led2 = Output
- Nsel Alias Portd.3
- Sdi Alias Portc.5
- Sdo Alias Pind.4
- Sck Alias Portd.2
- Rfm_reset Alias Portd.5
- Taster Alias Pinc.1 'Optokoppler von Zählermarkierung
- Portc.1 = 1
- Nirq Alias Pind.6
- Config Portc.2 = Output
- P_debug Alias Portc.2
- Config Nsel = Output
- Config Sdi = Output
- Config Sck = Output
- Config Rfm_reset = Input
- Config Watchdog = 2048
- Start Watchdog
- Reset Watchdog
- Dim D As Word
- Dim Data_in(10) As Byte
- Dim Ausgang(8) As Byte
- Dim Eingang(8) As Byte
- Dim N As Byte
- Dim T As Word
- Dim Nspi As Integer
- Dim Dspi As Integer
- Dim Dsdo As Word
- Declare Sub Send_rfm12
- Declare Sub Receive_rfm12
- Declare Sub Wait_rfm12
- Print " Start"
- Print " Version 14"
- Led = 1
- Led2 = 1
- Waitms 500
- Led = 0
- Led2 = 0
- Dim Rfminit As Bit
- Rfminit = 0
- Dim Zaehler As Word
- Dim Sendzaehler As Word
- Dim Tick As Bit
- Dim Wdzaehler As Byte
- Dim Led_wd As Byte
- Dim Resrfm12 As Bit
- Dim Status As Byte
- Dim Temp As Word
- Dim Empfang_ok As Bit
- Dim Rfm_irq As Bit
- Dim E_r_wd As Byte
- Dim E_z As Byte
- Dim Nursenderegister As Bit
- 'Dim Test_z As Word
- Dim Telegramm_ctr As Word
- Dim Telegramm_ctr_alt As Word
- Dim Mark As Bit
- Dim Time_mmv As Byte
- Const Startbyte = &HAA
- 'Const Zieladresse = 11
- 'Const Sendeadresse = 12
- D = &H82C8 : Gosub Wert 'Empfang einschalten
- D = &HCA83 : Gosub Wert 'warten auf 2DD4,dann SDO=1
- '################################################################################
- Do
- If Rfminit = 0 Then
- Gosub Initrfm12
- Rfminit = 1
- D = &H82C8 : Gosub Wert 'Empfang einschalten
- D = &HCA83 : Gosub Wert 'warten auf 2DD4,dann SDO=1
- End If
- If Nirq = 0 Then
- If E_z = 0 Then
- D = &H0000 : Gosub Wert
- End If
- Rfm_irq = 1
- Receive_rfm12
- Incr E_z
- If E_z > 8 Then
- Led2 = 1
- D = &H8208 : Gosub Wert
- D = &H0000 : Gosub Wert 'Statusregister lesen zum Resetten des Power on Flags
- D = &H82C8 : Gosub Wert 'Empfang einschalten
- E_z = 0
- Empfang_ok = 1
- ' For Status = 1 To 8
- ' Print Hex(data_in(status));
- ' Next
- Status = Crc8(data_in(1) , 7)
- If Status = Data_in(8) Then
- Eingang(1) = Data_in(1) 'Startbyte
- Eingang(2) = Data_in(2) 'Quelle
- Eingang(3) = Data_in(3) 'Ziel
- Eingang(4) = Data_in(4) 'Telegrammzähler
- Eingang(5) = Data_in(5) 'Telegrammzähler
- Eingang(6) = Data_in(6) 'Nutzdaten
- Eingang(7) = Data_in(7) 'Nutzdaten
- Eingang(8) = Data_in(8) 'CRC8
- 'If Eingang(3).7 = 0 Then 'Master Neustart Bit
- Temp = Eingang(4) * 256
- Temp = Temp + Eingang(5)
- Telegramm_ctr = Temp + 1
- If Temp = Telegramm_ctr_alt Then
- Else
- Telegramm_ctr_alt = Temp
- Temp = Eingang(6) * 256
- Temp = Temp + Eingang(7)
- ' Print "Temp " ; Hex(temp)
- Zaehler = Zaehler - Temp
- End If
- 'End If
- Led2 = 0
- End If
- End If
- End If
- P_debug = Not Taster
- If Taster = 1 Then
- Time_mmv = 2
- End If
- If Time_mmv > 0 Then
- If Mark = 0 Then
- Mark = 1
- Incr Zaehler
- End If
- 'P_debug = 0
- Else
- Mark = 0
- 'P_debug = 1
- D = &H0000 : Gosub Wert
- End If
- If Empfang_ok = 1 Then
- D = &H0000 : Gosub Wert
- Ausgang(1) = Startbyte
- Ausgang(2) = Eingang(3) And &H0F
- Ausgang(3) = Eingang(2) 'Zieladresse
- Ausgang(4) = High(telegramm_ctr)
- Ausgang(5) = Low(telegramm_ctr)
- Ausgang(6) = High(zaehler)
- Ausgang(7) = Low(zaehler)
- Ausgang(8) = Crc8(ausgang(1) , 7)
- Waitms 10
- Send_rfm12
- D = &H82C8 : Gosub Wert 'Empfang einschalten
- Empfang_ok = 0
- ' Print "gesendet";
- ' For Status = 1 To 8
- ' Print Hex(ausgang(status));
- ' Next
- 'Test_z = Test_z + &H1000
- Waitms 10
- End If
- Incr Wdzaehler
- Loop
- End
- Tasterauswertung:
- Return
- '----------------------------------------------------------------------------------------------------------------
- Sub Send_rfm12:
- D = &H8238 : Gosub Wert
- Wait_rfm12
- If Nursenderegister = 1 Then Goto S_ende
- D = &HB8AA : Gosub Wert
- Wait_rfm12
- D = &HB8AA : Gosub Wert
- Wait_rfm12
- D = &HB8AA : Gosub Wert
- Wait_rfm12
- D = &HB82D : Gosub Wert
- Wait_rfm12
- D = &HB8D4 : Gosub Wert
- ' Wait_rfm12
- ' D = &HB8AA : Gosub Wert
- For N = 1 To 8
- Wait_rfm12
- D = &HB800 + Ausgang(n) : Gosub Wert
- Next N
- Wait_rfm12
- D = &HB8AA : Gosub Wert
- Wait_rfm12
- D = &HB8AA : Gosub Wert
- Wait_rfm12
- S_ende:
- D = &H8208 : Gosub Wert
- Nursenderegister = 0
- End Sub
- Sub Wait_rfm12
- Nsel = 0
- Do
- Led = 1
- If Rfminit = 0 Then Exit Do
- Loop Until Sdo = 1
- Led = 0
- End Sub
- Sub Receive_rfm12
- D = &HB000 : Gosub Wert
- Data_in(e_z + 1) = D
- End Sub
- Wert:
- Nsel = 0
- Waitus 10
- Dsdo = 0
- For Nspi = 1 To 16
- Dspi = D And &H8000
- If Dspi = 0 Then
- Sdi = 0
- Else
- Sdi = 1
- End If
- D = D * 2
- Dsdo = Dsdo * 2
- Dsdo = Dsdo + Sdo
- Sck = 1
- Waitus 5
- Sck = 0
- Next Nspi
- Nsel = 1
- D = Dsdo
- Return
- Initrfm12:
- 'Print "- Init -"
- Waitms 100
- Nsel = 1
- Waitus 10
- Sck = 0
- D = &H0000 : Gosub Wert
- 'D = Spi16(&H80d7) ' El , Ef , 11.5pf, 433 MHz band
- D = &H80E7 : Gosub Wert ' El , Ef , 11.5pf, 868 MHz band
- D = &H82D9 : Gosub Wert '!er , !ebb , Et , Es , Ex , !eb , !ew , Dc
- D = &HA67C : Gosub Wert ' 434,15 MHz / 868,3 MHz
- D = &HC647 : Gosub Wert ' 4.8kbps
- 'D = &HC612 : Gosub Wert ' 19.2kbps
- D = &H94A4 : Gosub Wert ' Vdi , Fast , 134 kHz , 0db , -79dbm
- D = &HC2AC : Gosub Wert ' Al , !ml , Dig , Dqd4
- D = &HCA11 : Gosub Wert ' Fifo8 , Sync , !ff , Dr
- D = &HC483 : Gosub Wert ' @pwr , No Rstric , !st , !fi , Oe , En
- D = &H9850 : Gosub Wert ' 90 kHz , power - 0 dB
- D = &HE000 : Gosub Wert '
- D = &HC800 : Gosub Wert '
- D = &HC000 : Gosub Wert ' 1 MHz , 2.2V
- D = 1660 + &HA000 : Gosub Wert 'Frequenz einstellen 868,3 MHz
- ' (868,3-860)/0,005 = 1660 ,muß aber > 96 und < 3903 sein
- D = &H0000 : Gosub Wert
- Return
- T1irq:
- Timer1 = 3036
- Reset Watchdog
- If Time_mmv > 0 Then Decr Time_mmv
- Tick = 1
- 'Print "Tick = 1 E_ok=" ; Empfang_ok ; " RfmIRQ=" ; Rfm_irq ; " E_r_wd=" ; E_r_wd ; " Wdz=" ; Wdzaehler
- If Empfang_ok = 0 And Rfm_irq = 0 Then
- Incr E_r_wd
- End If
- Rfm_irq = 0
- If E_r_wd > 2 Then
- E_r_wd = 0
- Wdzaehler = 0
- End If
- If Wdzaehler > 0 Then
- Wdzaehler = 0
- Else
- If Empfang_ok = 1 Then
- Config Rfm_reset = Output
- Rfm_reset = 0
- Waitms 100
- Config Rfm_reset = Input
- Rfm_reset = 1
- Rfminit = 0
- 'Gosub Initrfm12
- ' Goto 0
- Else
- Empfang_ok = 1
- Nursenderegister = 1
- End If
- End If
- Return