'18lf2520 8mhz int SX1278 LORA S 060717 1100 'Define SIMULATION_WAITMS_VALUE = 1 'Comment in for SIM out for PIC Define CLOCK_FREQUENCY = 8 Define SINGLE_DECIMAL_PLACES = 2 Define CONFIG1L = 0x00 Define CONFIG1H = 0x08 'INT OSC Define CONFIG2L = 0x1e Define CONFIG2H = 0x00 Define CONFIG3L = 0x00 Define CONFIG3H = 0x80 Define CONFIG4L = 0x80 'Set for HVP Define CONFIG4H = 0x00 Define CONFIG5L = 0x0f Define CONFIG5H = 0xc0 Define CONFIG6L = 0x0f Define CONFIG6H = 0xe0 Define CONFIG7L = 0x0f Define CONFIG7H = 0x40 AllDigital OSCCON = %01110010 'internal 8Mhz clock '------------------------------------------------------------------------------------------------------------------------------------ 'NAME IN/OUT DESCRIPTION 18LF2520 '------------------------------------------------------------------------------------------------------------------------------------ '1 MCLR/VPP/RE3 |D 1|RSTButton | |Goes low when button is pressed '2 RA0/AN0 |D 1|DIO0 | |SX1278 BIT GOES HIGH WHEN TX RX IS COMPLETE '3 RA1/AN1 |D 0|DIO1 | |SX1278 RXTIMEOUT '4 RA2/AN2/VREF-/CVREF |D 0|DIO2 |DATA |SX1278 FHSSCHANGECHANNEL '5 RA3/AN3/VREF+ |D 0|DIO3 | |SX1278 VALIDHEADER '6 RA4/T0CKI/C1OUT |D 0|DIO4 | |SX1278 CADHEADER '7 RA5/AN4/SS/HLVDIN/C2OUT|D 0|DIO5 | |SX1278 MODEREADY '8 VSS |VSS| | |Ground '9 OSC1CLK1RA7 |D 0|XTL | | '10 OSC2CLKORA6 |D 0|XTL | | '11 RC0/T1OSO/T13CKI |D 1|BUTTON | |Button '12 RC1/T1OSI/CCP2(1) |D 0|YLED | |YLED '13 RC2/CCP1 |D 0|RLED | |RLED '14 RC3/SCK/SCL |D O|SCK | | '15 RC4/SDI/SDA |D 1|MISO | |10K PULL-UP (Not sure?) '16 RC5/SDO |D 0|MOSI | |10K PULL-UP (Not sure?) '17 RC6/TX/CK |D 0| | | '18 RC7/RX/DT |D 1| | | '19 VSS |GND| | |Ground '20 VDD |3.3| | |+V '21 RB0/INT0/FLT0/AN12 |D 0|NSS | |Chip select '22 RB1/INT1/AN10 |D 0|LCD RS | | '23 RB2/INT2/AN8 |D 0|LCD RW | | '24 RB3/AN9/CCP2(1) |D 0|LCD E | | '25 RB4/KBI0/AN11 |D 0|LCD DATA | | '26 RB5/KBI1/PGM |D 0|LCD DATA | | '27 RB6//KBI2/PGC |D 0|LCD DATA | | '28 RB7/KBI3/PGD |D 0|LCD DATA | | '############################################################################### 'SET PIN IN/OUT 'DIO2 DATA IN/OUT??????????????????????????????????????????????????????? TRISA = %10100001 '7=XTLIN 6=XTLOUT 5=DIO5IN 4=DIO4 3=DIO3 2=DIO2 1=DIO1 0=DIO0IN[[DIO2 IN/OUT??]]] TRISB = %00000000 TRISC = %10010001 '7=RX RC4 SDI 'SET BITS ON/OFF PORTA = %00000000 'ON/OFF PORTB = %00000000 PORTC = %00000000 PORTE = %00001000 'POSS MCLR RE3 'Define SPI_CS_REG = PORTB 'Define SPI_CS_BIT = 0 'Define SPI_SCK_REG = PORTC 'Define SPI_SCK_BIT = 3 'Define SPI_SDI_REG = PORTC 'Define SPI_SDI_BIT = 4 'Define SPI_SDO_REG = PORTC 'Define SPI_SDO_BIT = 5 'Define SPICLOCK_INVERT = 1 'Reverse signal 'Define SPICLOCK_STRETCH = 20 'Make the SPI signals slower '################################################################## Define SPI_CS_REG = PORTA Define SPI_CS_BIT = 5 Define SPI_SCK_REG = PORTC Define SPI_SCK_BIT = 3 'Define SPI_SDI_REG = PORTC 'Define SPI_SDI_BIT = 4 Define SPI_SDO_REG = PORTC Define SPI_SDO_BIT = 5 'Define SPICLOCK_INVERT = 1 'Reverse signal 'Define SPICLOCK_STRETCH = 20 'Make the SPI signals slower '################################################################## SPIPrepare Define LCD_DREG = PORTB 'Port for LCD Data Define LCD_DBIT = 4 'Use upper 4 bits of Port Define LCD_RSREG = PORTB 'Port for (RS) Define LCD_RSBIT = 1 'Pin for RS bit (pin22) Define LCD_RWREG = PORTB 'Port for (RW) Define LCD_RWBIT = 2 'Pin for RW (pin23) Define LCD_EREG = PORTB 'Port for Enable (E) Define LCD_EBIT = 3 'Pin for E bit (pin24) Define LCD_BITS = 4 'Using 4-bit bus Define LCD_LINES = 4 'Using 4 line Display Define LCD_CHARS = 20 WaitMs 100 'Symbol rstbutton = PORTE.3 '??????????????????????? 'Symbol button = PORTA.0 Symbol yled = PORTC.1 Symbol rled = PORTC.2 'SPI Dim write_reg_spi As Byte Dim read_reg_spi As Byte Symbol dio0 = PORTA.0 'TXDONE-RXDONE Used in CHECK RECEIVE IF-ENDIF 'Symbol dio1 = PORTA.1 'RXTIMEOUT 'Symbol dio2 = PORTA.2 'FHSSCHANGECHANNEL [DATA] 'Symbol dio3 = PORTA.3 'VALIDHEADER 'Symbol dio4 = PORTA.4 'CADDETECTED 'Symbol dio5 = PORTA.5 'MODEREADY 'Dim length As Byte 'Length of DATA [PAYLOAD] 'length = 0 'SETPAYLOADLENGTH Dim x As Byte 'WAS N WHILE WEND>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> x = 0 Dim rxsize As Byte Dim data As Byte data = 0 'TEST''''''''''''''''''''''''''''''''''''''''''''''' '******************************************************************************************** 'SET CONSTANTS and VARIABLES '******************************************************************************************** Const r_fifo = 0x00 'See Page 110 DATA sheet TX/RX, then masking for SPI 10000000??????????????????? Const w_fifo = 0x80 'SET for crystal or TXCO (TXCO Temp controlled. Use crystal till outside temp range) Const r_regopmode = 0x01 Const w_regopmode = 0x81 Dim set_regopmode_lora_access0_res_low_modesleep As Byte set_regopmode_lora_access0_res_low_modesleep = %10001000 '88 136 Dim set_regopmode_lora_access0_res_low_modestdby As Byte set_regopmode_lora_access0_res_low_modestdby = %10001001 Dim set_regopmode_lora_access0_res_low_modetx As Byte set_regopmode_lora_access0_res_low_modetx = %10001011 Dim set_regopmode_lora_access0_res_low_moderxcontinuous As Byte set_regopmode_lora_access0_res_low_moderxcontinuous = %10001101 '8b 139 Const regfrfmsb = 0x06 Dim setfrfmsb As Byte 'leave As default For now. Const regrfmid = 0x07 Dim setfrfmid As Byte 'leave As default For now. Const reglsb = 0x08 Dim setfrflsb As Byte 'leave As default For now. Const r_regpaconfig = 0x09 Const w_regpaconfig = 0x89 Dim set_regpaconfig_paselectpaboost_maxpower_outputpower As Byte set_regpaconfig_paselectpaboost_maxpower_outputpower = %11001111 'cf 207 Const r_regocp = 0x0b Const w_regocp = 0x8b Dim set_regocp_ocpon_ocptrimmax As Byte set_regocp_ocpon_ocptrimmax = %00011011 '0b 11 MAX??????? Const r_reglna = 0x0c Const w_reglna = 0x8c Dim set_reglna_lnagain_lnaboostlf_res_lnaboosthf As Byte set_reglna_lnagain_lnaboostlf_res_lnaboosthf = %00100000 '20 32 Const r_regfifoaddrptr = 0x0d 'PAGE 40 and 110 Const w_regfifoaddrptr = 0x8d 'regfifoaddrptr +%10000000 (WRITE) Dim fifoaddrptr As Byte 'Present fifo tx/rx addr from READ Const r_regfifotxbaseaddr = 0x0e 'PAGE 40 and 110 Dim fifotxbaseaddr As Byte Const r_regfiforxbaseaddr = 0x0f 'PAGE 40 Dim fiforxbaseaddr As Byte Const r_regfiforxcurrentaddr = 0x10 'Dim fiforxcurrentaddr As Byte Const r_regirqflagsmask = 0x11 Const w_regirqflagsmask = 0x91 Dim set_irqflagsmask As Byte set_irqflagsmask = %11110000 'f0 240 'Initialise receive Dim set_irqflagsmask_txdonemask As Byte set_irqflagsmask_txdonemask = %00001000 'TX DONE???????????????????????CHECK?????????????????????????????????????????????? Const r_regirqflags = 0x12 Const w_regirqflags = 0x92 'Dim setirqflags_rxtimeout_rxdone_payloadcrcerror_validheader_txdone_caddone_fhsschangechannel_caddetected As Byte 'setirqflags_rxtimeout_rxdone_payloadcrcerror_validheader_txdone_caddone_fhsschangechannel_caddetected = 0x00 'CLEARS IRQ Dim irqflags As Byte 'Set by SX1278 'Dim regirqflags_validheader As Byte 'Set by SX1278 'Dim regirqflags_payloadcrcerror As Byte 'Set by SX1278 Dim set_irqflagsto0 As Byte set_irqflagsto0 = %00000000 'Sets all to 0. Dim set_clearirqflags As Byte set_clearirqflags = %11111111 'Clear all irqflags 'Dim res1 As Byte 'regirqflags AND regirqflags_validheader 'Dim res2 As Byte 'regirqflags AND regirqflags_payloadcrcerror 'Dim res3 As Byte 'NOT res2 Const r_regrxnbbytes = 0x13 Dim fiforxbytesnb As Byte Const r_regmodemconfig1 = 0x1d Const w_regmodemconfig1 = 0x9d Dim set_bw_codingrate_explicit As Byte set_bw_codingrate_explicit = %01110010 '72 114 Const r_regmodemconfig2 = 0x1e Const w_regmodemconfig2 = 0x9e Dim set_sf_txcontinuousmode_rxpayloadcrcen_symbtimeout As Byte set_sf_txcontinuousmode_rxpayloadcrcen_symbtimeout = %01110100 '74 116 CHECK- Is thia normal_mode Const r_regmodemconfig3 = 0x26 Const w_regmodemconfig3 = 0xa6 Dim set_un_lowdatarateoptimize_agcautoon_res As Byte set_un_lowdatarateoptimize_agcautoon_res = %00000000 Const r_regsymbtimeoutlsb = 0x1f Const w_regsymbtimeoutlsb = 0x9f Dim set_symbtimeoutlsb As Byte set_symbtimeoutlsb = 0xff Const r_regpreamblemsb = 0x20 Const w_regpreamblemsb = 0xa0 Dim set_preamblemsblength As Byte set_preamblemsblength = 0x64 Const r_regpreamblelsb = 0x21 Const w_regpreamblelsb = 0xa1 Dim set_preamblelsblength As Byte set_preamblelsblength = 0x08 Const r_regpayloadlength = 0x22 'Register needs to be in IMPLICIT MODE Const w_regpayloadlength = 0xa2 Dim txsize As Byte txsize = 0x40 '64 Copied from payloadmaxlength Const r_regmaxpayloadlength = 0x23 'If MAXPAYLOADLENGTH exeeds value a CRC error is generated. Const w_regmaxpayloadlength = 0xa3 Dim set_payloadmaxlength As Byte set_payloadmaxlength = 0x40 '64 Const r_reghopperiod = 0x24 'NOT CLEAR????????????? Const w_reghopperiod = 0xa4 Dim set_freqhoppingperiod As Byte set_freqhoppingperiod = 0x00 Const r_regdiomapping1 = 0x40 'DIO0-3 Const w_regdiomapping1 = 0xc0 Dim set_diomapping1_rxdone_rxtimeout_fhsschangechannel_validheader As Byte set_diomapping1_rxdone_rxtimeout_fhsschangechannel_validheader = 0x40 '%01000000 Startup-Initialise receive Dim set_diomapping1_txdone_rxtimeout_fhsschangechannel_validheader As Byte set_diomapping1_txdone_rxtimeout_fhsschangechannel_validheader = 0x41 '%01000001 Startup-Initialise transmit 'DIO0-TXDONE_DIO1-RXTIMEOUT_DIO2-FHSSCHANGECHANNEL_DIO3-VALIDHEADERCHECK>>>>>>>>>>>>>>>>> Const r_regdiomapping2 = 0x41 'DIO4-5 Const w_regdiomapping2 = 0xc1 Dim set_diomapping2_caddetected_modeready2 As Byte set_diomapping2_caddetected_modeready2 = 0x00 'DIO4-CADDETECTED_DIO5-MODEREADY Const r_regtcxo = 0x4b 'CHECK:::::::::::::::::::::::::::::::::::::::::::::::::::::: Const w_regtcxo = 0xcb 'CRYSTAL OR TCXO===PCB has crystal Dim set_crystal As Byte set_crystal = %0001001 '9 9 Const r_regpadac = 0x4d 'CHECK>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Const w_regpadac = 0xcd Dim set_regpadac_paboost As Byte set_regpadac_paboost = 0x84 '%10000111 87 135 CHECK MAX OUTPUT% 5.4.3 'SET REGISTER VARIABLES TO SX1278'//////////////////////////////////////////////// 'write_reg_spi = spi_write_reg_func(w_regtcxo, set_crystal, r_regtcxo) [>>>>>>>>>>>>check>>>>>>>>>>>} 'Gosub lcd write_reg_spi = spi_write_reg_func(w_regopmode, set_regopmode_lora_access0_res_low_modesleep) 'SLEEP MODE FOR SPI read_reg_spi = spi_read_reg_func(r_regopmode, set_regopmode_lora_access0_res_low_modesleep) Gosub lcd write_reg_spi = spi_write_reg_func(w_regpaconfig, set_regpaconfig_paselectpaboost_maxpower_outputpower) read_reg_spi = spi_read_reg_func(r_regpaconfig, set_regpaconfig_paselectpaboost_maxpower_outputpower) Gosub lcd write_reg_spi = spi_write_reg_func(w_regpadac, set_regpadac_paboost) read_reg_spi = spi_read_reg_func(r_regpadac, set_regpadac_paboost) Gosub lcd write_reg_spi = spi_write_reg_func(w_regocp, set_regocp_ocpon_ocptrimmax) read_reg_spi = spi_read_reg_func(r_regocp, set_regocp_ocpon_ocptrimmax) Gosub lcd write_reg_spi = spi_write_reg_func(w_reglna, set_reglna_lnagain_lnaboostlf_res_lnaboosthf) read_reg_spi = spi_read_reg_func(r_reglna, set_reglna_lnagain_lnaboostlf_res_lnaboosthf) Gosub lcd write_reg_spi = spi_write_reg_func(w_regmodemconfig1, set_bw_codingrate_explicit) read_reg_spi = spi_read_reg_func(r_regmodemconfig1, set_bw_codingrate_explicit) Gosub lcd write_reg_spi = spi_write_reg_func(w_regmodemconfig2, set_sf_txcontinuousmode_rxpayloadcrcen_symbtimeout) read_reg_spi = spi_read_reg_func(r_regmodemconfig2, set_sf_txcontinuousmode_rxpayloadcrcen_symbtimeout) Gosub lcd write_reg_spi = spi_write_reg_func(w_regmodemconfig3, set_un_lowdatarateoptimize_agcautoon_res) read_reg_spi = spi_read_reg_func(r_regmodemconfig3, set_un_lowdatarateoptimize_agcautoon_res) Gosub lcd write_reg_spi = spi_write_reg_func(w_regsymbtimeoutlsb, set_symbtimeoutlsb) read_reg_spi = spi_read_reg_func(r_regsymbtimeoutlsb, set_symbtimeoutlsb) Gosub lcd write_reg_spi = spi_write_reg_func(w_regpreamblemsb, set_preamblemsblength) read_reg_spi = spi_read_reg_func(r_regpreamblemsb, set_preamblemsblength) Gosub lcd write_reg_spi = spi_write_reg_func(w_regpreamblelsb, set_preamblelsblength) read_reg_spi = spi_read_reg_func(r_regpreamblelsb, set_preamblelsblength) Gosub lcd write_reg_spi = spi_write_reg_func(w_reghopperiod, set_freqhoppingperiod) read_reg_spi = spi_read_reg_func(r_reghopperiod, set_freqhoppingperiod) Gosub lcd write_reg_spi = spi_write_reg_func(w_regmaxpayloadlength, set_payloadmaxlength) read_reg_spi = spi_read_reg_func(r_regmaxpayloadlength, set_payloadmaxlength) Gosub lcd write_reg_spi = spi_write_reg_func(w_regdiomapping1, set_diomapping1_rxdone_rxtimeout_fhsschangechannel_validheader) read_reg_spi = spi_read_reg_func(r_regdiomapping1, set_diomapping1_rxdone_rxtimeout_fhsschangechannel_validheader) Gosub lcd write_reg_spi = spi_write_reg_func(w_regdiomapping2, set_diomapping2_caddetected_modeready2) read_reg_spi = spi_read_reg_func(r_regdiomapping2, set_diomapping2_caddetected_modeready2) Gosub lcd write_reg_spi = spi_write_reg_func(w_regirqflags, set_irqflagsto0) read_reg_spi = spi_read_reg_func(r_regirqflags, set_irqflagsto0) Gosub lcd write_reg_spi = spi_write_reg_func(w_regopmode, set_regopmode_lora_access0_res_low_modestdby) read_reg_spi = spi_read_reg_func(r_regopmode, set_regopmode_lora_access0_res_low_modestdby) Gosub lcd '################################################################################################################################# '################################################################################################################################# Hseropen 9600 mainloop: Lcdinit '******************************************************************************************** 'INITIALISE RECEIVE '******************************************************************************************** 'WRITE INITIALISE RECEIVE'////////////////////////////////////////////////////////// write_reg_spi = spi_write_reg_func(w_regdiomapping1, set_diomapping1_rxdone_rxtimeout_fhsschangechannel_validheader) read_reg_spi = spi_read_reg_func(r_regdiomapping1, set_diomapping1_rxdone_rxtimeout_fhsschangechannel_validheader) Gosub lcd write_reg_spi = spi_write_reg_func(w_regpadac, set_regpadac_paboost) read_reg_spi = spi_read_reg_func(r_regpadac, set_regpadac_paboost) Gosub lcd write_reg_spi = spi_write_reg_func(w_regirqflagsmask, set_irqflagsmask) read_reg_spi = spi_read_reg_func(r_regirqflagsmask, set_irqflagsmask) Gosub lcd write_reg_spi = spi_write_reg_func(w_regirqflags, set_clearirqflags) 'clears all irqflags read_reg_spi = spi_read_reg_func(r_regirqflags, set_clearirqflags) 'CLEAR ALL FLAGS BEFORE FIFO Gosub lcd ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' read_reg_spi = spi_read_reg_func(r_regfiforxbaseaddr, fiforxbaseaddr) 'Read FIFORXBASEADDR AND VVV write_reg_spi = spi_write_reg_func(w_regfifoaddrptr, fifotxbaseaddr) 'SET FIFOADDRPTR ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' write_reg_spi = spi_write_reg_func(w_regopmode, set_regopmode_lora_access0_res_low_moderxcontinuous) Gosub lcd '****************************************************************************************************************** 'CHECK RECEIVE '*************************************************************************************************************** dio0 = 1 irqflags.4 = 1 irqflags.5 = 0 'yled = 1 If dio0 = 1 Then 'DIO0 goes high from SX1278 when data has been received and ready. read_reg_spi = spi_read_reg_func(r_regirqflags, irqflags) 'CHECK SYNTAX (SUBROUTINE) If irqflags.4 = 1 Then If irqflags.5 = 0 Then read_reg_spi = spi_read_reg_func(r_regrxnbbytes, rxsize) x = 0 While x < rxsize rled = 1 read_reg_spi = spi_read_reg_func(r_regfiforxbaseaddr, fiforxbaseaddr) 'I'm not sure this is correct????????????????????? x = x + 1 Gosub rxlcd Wend Endif Endif Hserout CrLf, "test", CrLf WaitMs 500 Hserout data Hserout CrLf, CrLf ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' read_reg_spi = spi_read_reg_func(r_regfiforxbaseaddr, fiforxbaseaddr) 'Read FIFORXBASEADDR AND VVV write_reg_spi = spi_write_reg_func(w_regfifoaddrptr, fiforxbaseaddr) 'SET FIFOADDRPTR ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Endif 'yled = 0 '****************************************************************************************************************** 'INITIALISE TRANSMIT '****************************************************************************************************************** write_reg_spi = spi_write_reg_func(w_reghopperiod, set_freqhoppingperiod) Gosub lcd write_reg_spi = spi_write_reg_func(w_regpadac, set_regpadac_paboost) Gosub lcd write_reg_spi = spi_write_reg_func(w_regocp, set_regocp_ocpon_ocptrimmax) Gosub lcd write_reg_spi = spi_write_reg_func(w_regpaconfig, set_regpaconfig_paselectpaboost_maxpower_outputpower) Gosub lcd write_reg_spi = spi_write_reg_func(w_regdiomapping1, set_diomapping1_txdone_rxtimeout_fhsschangechannel_validheader) 'TXDONE-Upon completion the TxDone interrupt is issued and the radio returns to STANDBY mode Gosub lcd write_reg_spi = spi_write_reg_func(w_regirqflags, set_clearirqflags) 'CLEARS ALL IRQFLAGS Gosub lcd write_reg_spi = spi_write_reg_func(w_regirqflagsmask, set_irqflagsmask_txdonemask) Gosub lcd ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' read_reg_spi = spi_read_reg_func(r_regfifotxbaseaddr, fifotxbaseaddr) 'Read FIFOTXBASEADDR AND VVV write_reg_spi = spi_write_reg_func(w_regfifoaddrptr, fifotxbaseaddr) 'SET FIFOADDRPTR ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '****************************************************************************************************************** 'LOAD TRANSMIT FIFO '****************************************************************************************************************** 'NOTE FIFO can only be filled in Standby mode. 'DATA transmission is initiated by sending TX MODE request. 'Upon completion the txdone Interrupt is issued And the radio returns To standby mode. 'Following transmission the radio can be manually placed in sleep mode Or refilled For A subsequeny tx operation. '**************************************************************************************************** 'txsixe is from the DATA count of the sentence to be sent from 'say' a terminal '**************************************************************************************************** txsize = 0x0a 'TEST@@@@@@@@@@@@@@@@@@@@@@@@@@@@ write_reg_spi = spi_write_reg_func(w_regopmode, set_regopmode_lora_access0_res_low_modestdby) 'ADDED TEST!!!!!!!!!!!!!!!!!! write_reg_spi = spi_write_reg_func(w_regpayloadlength, txsize) x = 0 While x < txsize Hserin data, 'If there's no DATA to send it locks. yled = 1 write_reg_spi = spi_write_reg_func(r_regfifotxbaseaddr, data) 'WRITE DATA to the FIFO txsize times x = x + 1 Gosub txlcd Wend WaitMs 1000 data = 0 yled = 0 '********************************************************************************************************** 'TRANSMIT '****************************************************************************************************************** write_reg_spi = spi_write_reg_func(w_regopmode, set_regopmode_lora_access0_res_low_modetx) Gosub lcd Goto mainloop End lcd: 'Check registers as they are written to Lcdcmdout LcdClear Lcdout "fiforxbaseaddr= ", #fiforxbaseaddr, " " 'CHANGE WRITE TO RECEIVE_SPI WHEN ON MODULE@@@@@@@@@@@@@@@@ Lcdcmdout LcdLine2Home Lcdout "fifoaddrptr ", #fifoaddrptr, " " Lcdcmdout LcdLine3Home Lcdout "X= ", #x, " " Return rxlcd: 'check registers when running###############check correct############ Lcdcmdout LcdClear Lcdout "FIFORX= ", #fiforxbaseaddr, " " 'CHANGE WRITE TO RECEIVE_SPI WHEN ON MODULE@@@@@@@@@@@@@@@@ Return txlcd: 'check registers when running###############check correct############ Lcdcmdout LcdClear Lcdout "FIFOTX= ", #fifotxbaseaddr, " " 'CHANGE WRITE TO RECEIVE_SPI WHEN ON MODULE@@@@@@@@@@@@@@@@ Lcdcmdout LcdLine3Home Lcdout "X= ", #x, " " Return Function spi_read_reg_func(r_spi As Byte, receive_spi As Byte) As Byte SPIPrepare SPICSOn SPISend r_spi SPIReceive receive_spi SPICSOff spi_read_reg_func = receive_spi 'result_spi End Function Function spi_write_reg_func(w_spi As Byte, write_reg_spi As Byte) As Byte SPIPrepare SPICSOn SPISend w_spi SPISend write_reg_spi SPICSOff spi_write_reg_func = write_reg_spi 'result_spi End Function '######################################################################