Olyan budapesti vállalkozó kedvű hobbistát keresek aki segít nekem feléleszteni egy Hope RFM12B típusú párost... Hardver elvileg jó.. innen letöltöttem a fájl csere-bere menüpontból a teszt programot bascomra de nem akar működni... Adó részt betöltöm egyik hárdverbe, szépen villognak is a ledek de ez még nem biztos hogy azt jelenti hogy él a modulom, vagy jól van konfigolva... a másik hárdverbe betöltöm a vevőt, de ez nem ad jelet hogy adat jött, egyébként fut a program. a vevőben ez:
Kód: Egész kijelölése
If Ffit_bit = 1 Then
vevő:
Kód: Egész kijelölése
'********************************* konfig *********************************
$regfile = "m128def.dat"
$crystal = 14745600
$baud = 19200
'$baud1 = 115200
'LCD
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.4 , Db6 = Portc.5 , Db7 = Portc.6 , Rs = Portc.0 , E = Portc.1
Config Lcd = 20 * 4
Config Lcdmode = Port
Initlcd
Cls
Cursor Off
'sd kártyát kikapcsolni
Config Portd.7 = Output
Set Portd.7
'LCD világítás
Config Portc.2 = Output
Lcd_hatter Alias Portc.2
Lcd_hatter = 1
Config Portb.4 = Output
Config Portb.2 = Output
Config Portb.1 = Output
Config Portb.3 = Input
Config Portb.0 = Output
Config Portb.6 = Output
'Config Portb.5 = Output
'Config Portb.7 = Output
'max3002
Set Portb.4
'Ledek
Config Portf.3 = Output
Config Portf.1 = Output
'Led1
Error_led Alias Portf.3
Reset Error_led
'Led2
Tx_led Alias Portf.1
Reset Tx_led
'Led3
Rx_led Alias Portb.6
Reset Rx_led
'********************************* konfig *********************************
Mod_cs Alias Portc.7 ' A modul CS vezetéke
Set Mod_cs
Mod_sdi Alias Portb.2 ' A modul SDI vezetéke, ami a MOSI lábra csatlakozik
Mod_sdo Alias Pinb.3 ' A modul SDO vezetéke, ami a MISO lábra csatlakozik
Set Portb.3
Mod_sck Alias Portb.1
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 4 , Noss = 1
Spiinit
Print "SPI init megvolt"
Declare Sub Mod_spiwrite
Declare Sub Mod_tx(txdata As Byte)
Declare Sub Mod_rx(rxdata As Byte)
Declare Sub Mod_tx_ready
Declare Sub Mod_rx_wait
Declare Sub Mod_statusbit
Declare Sub Mod_clear_fifo
Declare Sub Mod_rx_on
Declare Sub Mod_init
Const Maxbyte = 14
Const Max2byte = Maxbyte + 1
Dim Tempbit As Bit
Dim Temp As Byte
Dim Tempw As Word
Dim Mod_txword As Word
Dim Mod_txword_lsb As Byte At Mod_txword Overlay
Dim Mod_txword_msb As Byte At Mod_txword + 1 Overlay
Dim Mod_rxword As Word
Dim Mod_rxword_lsb As Byte At Mod_rxword Overlay
Dim Mod_rxword_msb As Byte At Mod_rxword + 1 Overlay
Dim Ffit_bit As Bit
Dim Rxbuffer(max2byte) As Byte
Dim Rxstring As String * Maxbyte At Rxbuffer(1) Overlay
Rxbuffer(max2byte) = 0
Dim Txindex As Byte
Dim Txbuffer(max2byte) As Byte
Dim Txstring As String * Maxbyte At Txbuffer(1) Overlay
Txbuffer(max2byte) = 0
Dim Timeout As Word
Set Rx_led
Set Tx_led
Set Error_led
Waitms 500
Reset Rx_led
Reset Tx_led
Reset Error_led
Mod_init
'Print "sdfsdf"
Mod_rx_on
Print "foprogram indul"
Do
Mod_statusbit
If Ffit_bit = 1 Then
Print "adat jott"
Mod_rx Rxbuffer(1)
Print Rxstring
End If
Loop
Sub Mod_init
Local A As Byte
Restore Init_data
For A = 1 To 14
Read Mod_txword
Call Mod_spiwrite
Print "mod_spiwrite utan"
Next A
End Sub
'868.175 MHz
Init_data:
Data &H80E7% , &H8298% , &HA663% , &HC67F% , &H94A0% , &HC2AC% , &HCA81%
Data &HCED4% , &HC483% , &H9850% , &HCC17% , &HE000% , &HC800% , &HC040%
Sub Mod_clear_fifo
Mod_txword = &HCA81
Mod_spiwrite
Mod_txword = &HCA83
Mod_spiwrite
Print "Mod_clear_fifo vege"
End Sub
Sub Mod_rx_on
Mod_txword = &H8299
Mod_spiwrite
Mod_clear_fifo
Print "Mod_rx_on vege"
Waitus 80
End Sub
Sub Mod_rx(rxdata As Byte)
Local I As Byte
Timeout = 1
Toggle Rx_led
Mod_txword = &HB000
For I = 1 To Maxbyte
Mod_rx_wait
If Timeout = 0 Then
Toggle Rx_led
Toggle Error_led
Exit For
End If
Mod_spiwrite
Rxdata(i) = Mod_rxword_lsb
Next I
Rxdata(i) = 0
Mod_clear_fifo
Toggle Rx_led
Print "Mod_rx(rxdata As Byte) vege"
End Sub
Sub Mod_rx_wait
Timeout = 35500
Do
Mod_statusbit
Decr Timeout
If Timeout = 0 Then
Toggle Error_led
Exit Do
End If
Loop Until Ffit_bit = 0
End Sub
Sub Mod_statusbit
Reset Mod_sdi ' A modul SDI vezetéke, ami a MOSI lábra csatlakozik
Reset Mod_cs ' A modul CS vezetéke
Set Mod_sck
Ffit_bit = Mod_sdo ' A modul SDO vezetéke, ami a MISO lábra csatlakozik
Reset Mod_sck
Set Mod_cs
End Sub
Sub Mod_spiwrite
Reset Mod_cs
Mod_rxword_msb = Spimove(mod_txword_msb)
Mod_rxword_lsb = Spimove(mod_txword_lsb)
Set Mod_cs
End Sub
Kód: Egész kijelölése
'********************************* konfig *********************************
$regfile = "m128def.dat"
$crystal = 8000000
$baud = 19200
'sd kártyát kikapcsolni
Config Portd.7 = Output
Set Portd.7
'LCD világítás
Config Portc.2 = Output
Lcd_hatter Alias Portc.2
Lcd_hatter = 0
Config Portb.4 = Output
Config Portb.2 = Output
Config Portb.1 = Output
Config Portb.3 = Input
Config Portb.0 = Output
Config Portb.6 = Output
'Config Portb.5 = Output
'Config Portb.7 = Output
'max3002
Set Portb.4
'Ledek
Config Portf.3 = Output
Config Portf.1 = Output
'Led1
Rx_led Alias Portf.3
Reset Rx_led
'Led2
Tx_led Alias Portf.1
Reset Tx_led
'Led3
Standby_led Alias Portb.6
Reset Standby_led
'********************************* konfig *********************************
Mod_cs Alias Portc.7 ' A modul CS vezetéke
Set Mod_cs
Mod_sdi Alias Portb.2 ' A modul SDI vezetéke, ami a MOSI lábra csatlakozik
Mod_sdo Alias Pinb.3 ' A modul SDO vezetéke, ami a MISO lábra csatlakozik
Set Portb.3
Mod_sck Alias Portb.1
'SPI busz konfigurálása, inicializálása
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 4 , Noss = 1
Spiinit
'Szubrutinok deklarálása
Declare Sub Mod_spiwrite
Declare Sub Mod_tx
Declare Sub Mod_tx_ready
Declare Sub Mod_init
'A Maxbyte-ban az egyszerre elküldhető legtöbb adatbyte számát lehet megadni.
'A Max2byte segédérték, mindig egyel több, mint a Maxbyte.
'A Maxbyte-ot legalább kettővel többre állítsuk, mint a ténylegesen küldendő adatbájtok száma!
Const Maxbyte = 14
Const Max2byte = 15 'maxbyte+1
Dim Txdata(maxbyte) As Byte
'Segédváltozók
Dim Tempbit As Bit
Dim Temp As Byte
Dim Tempw As Word
'Modulkezelő változók
'A modult 16 bites változókkal kezeljük, így szükség volt ezekre a változókra is (MSB, LSB)
Dim Mod_txword As Word
Dim Mod_txword_lsb As Byte At Mod_txword Overlay
Dim Mod_txword_msb As Byte At Mod_txword + 1 Overlay
Dim Mod_rxword As Word
Dim Mod_rxword_lsb As Byte At Mod_txword Overlay
Dim Mod_rxword_msb As Byte At Mod_txword + 1 Overlay
'Túlcsordulás változója
Dim Timeout As Word
'----------------------------------------------------------------------------------------
'Bekapcs után felkapcsoljuk a két ledet, hogy lássuk, elindult-e a proci
Reset Tx_led
Reset Standby_led
Wait 1
Set Tx_led
Set Standby_led
'A ledek kialszanak, inicializáljuk a modult.
Mod_init
'Elkezdődik a tesztadatok küldése a vevő felé
Do
Mod_tx
' A küldendő adatokat a Mod_tx szubrutinban adjuk meg.
' A Txdata nevű tömbben elemenként megadjuk az adatokat a küldés sorrendjének megfelelően.
Wait 2
Loop ' és ismételjük mindezt kikapcsolásig!
'***************
' Szubrutinok
'***************
'Modul inicializálása, a regisztereket az adatsorból olvassuk ki (Init_data), és
'MSB/LSB-re bontva küldjük a modulnak.
Sub Mod_init
Local A As Byte
Restore Init_data
For A = 1 To 14
Read Mod_txword
Mod_spiwrite
Next A
End Sub
'*************************************************************************
Init_data:
Data &H80E7% , &H8298% , &HA663% , &HC67F% , &H94A0% , &HC2AC% , &HCA81%
Data &HCED4% , &HC483% , &H9850% , &HCC17% , &HE000% , &HC800% , &HC040%
'A konfigurációs regiszterekről az adatlapból tájékozódhatsz. A működési
'frekvencia 868,100 MHz-re van beállítva.
'*************************************************************************
'Adatbyte küldése
Sub Mod_tx
Local A As Byte
Set Standby_led
Reset Tx_led 'Adásled bekapcs
Mod_txword = &H8239 'Adásra kapcsolunk
Mod_spiwrite
Waitus 150
Restore Sync_pattern ' A szinkronbyte-okat küldjük először
For A = 1 To 5 ' 3 db #AA, majd a 2D-D4 azonosító
Read Mod_txword
Mod_tx_ready
If Timeout = 0 Then Exit For
Mod_spiwrite
Next A
'Csak ezután küldjük a tényleges adatokat!
Txdata(1) = 65
Txdata(2) = 66
Txdata(3) = 67
Txdata(4) = 68
Txdata(5) = 35
Txdata(6) = 36
Txdata(7) = 37
Txdata(8) = 38
Txdata(9) = 49
Txdata(10) = 50
Txdata(11) = 51
Txdata(12) = 52
For A = 1 To Maxbyte
Mod_tx_ready
If Timeout = 0 Then Exit For
Mod_txword = &HB800 + Txdata(a)
Mod_spiwrite
Next A
Mod_tx_ready
Set Tx_led 'led kikapcs
Reset Standby_led
Mod_txword = &H8298 'Vételre kapcsolunk
Mod_spiwrite
Waitus 300
End Sub
'Itt vannak a szinkronbyte-ok
Sync_pattern:
Data &HB8AA% , &HB8AA% , &HB8AA% , &HB82D% , &HB8D4%
'A status regiszter nem csak vételkor, hanem adáskor is jelzi, hogy a modul elvégezte-e
'az adatküldést. Ezt is ellenőrizni kell. Amíg az SDO nem vált 1-re, addig az adás folyamatban van.
'Ha 0-ra váltott, akkor mehet csak a következő adatbyte!
Sub Mod_tx_ready
Reset Mod_cs
Timeout = 65500
While Mod_sdo = 0
Decr Timeout
Waitus 6
If Timeout = 0 Then
Exit While
End If
Wend
End Sub
'A 16 bites parancsok küldése a modulnak
Sub Mod_spiwrite
Reset Mod_cs
Mod_rxword_msb = Spimove(mod_txword_msb)
Mod_rxword_lsb = Spimove(mod_txword_lsb)
Set Mod_cs
End Sub