'18F46K20 32Mhz RX 2XPIC 030918 0900 Define CONFIG1L = 0x00 Define CONFIG1H = 0x08 'INT OSC Define CONFIG2L = 0x1e Define CONFIG2H = 0x00 Define CONFIG3L = 0x00 Define CONFIG3H = 0x81 '0x80 'Set for HVP Define CONFIG4L = 0x80 Define CONFIG4H = 0x00 Define CONFIG5L = 0x0f Define CONFIG5H = 0xc0 Define CONFIG6L = 0x0f Define CONFIG6H = 0xe0 Define CONFIG7L = 0x0f Define CONFIG7H = 0x40 'Define SIMULATION_WAITMS_VALUE = 1 'Comment in for SIM out for PIC Define CLOCK_FREQUENCY = 32 Define SINGLE_DECIMAL_PLACES = 2 Define STRING_MAX_LENGTH = 40 'Needs raising to fit the whole NMEA or BASE sentence for transmit>>>>>>>>>> AllDigital 'SET PIN IN/OUT TRISA = %00000000 '7=XTL 6=XTL 5=0=Slave select TRISB = %00000000 '7=PGD 6=PGC 543210 OLD SERVOS TRISC = %10010000 '7=RX=1 6=RX=0 5=SDO 4=SDI=1 3=SCK=0 1=LCD5110 RST=0 0=LCD5110 DATA=1 COMMAND=0 TRISD = %00000011 '7=RX SWITCH 6=CS3 COMPASS 5=CS2 altmtr c/s=0 4=CS1 lcd5110 c/s=0 3=SET HC-12 C/S=0 1=18lf2520 READY 0=18lf2520 ERROR TRISE = %00000100 '2=Button 1=RlED 0=YLED 'SET BITS ON/OFF PORTA = %00000000 'ON/OFF PORTB = %00000000 LATB = 0 PORTC = %00000000 PORTD = %11110000 'ALL C/S HIGH PORTE = %00000000 'POSS MCLR RE3 WaitMs 10 'SPI ''Define SPI_CS_REG = PORTD [USED WHEN IN SLAVE MODE] ''Define SPI_CS_BIT = 4[USED WHEN IN SLAVE MODE] Define SPI_SCK_REG = PORTC Define SPI_SCK_BIT = 3 Define SPI_SDI_REG = PORTC 'not used, but left in so OSH does not burp Define SPI_SDI_BIT = 4 Define SPI_SDO_REG = PORTC Define SPI_SDO_BIT = 5 Symbol rled = LATE.1 Symbol yled = LATE.0 Symbol lcd_reset = LATC.1 Symbol lcd_mode = LATC.0 '1=DATA ,0=COMMAND Symbol lcd5110 = LATD.4 '5110 LCD Symbol altmtr = LATD.5 'BAROMETER/TEMP Symbol compss = LATD.6 'MPU-9255 Symbol dataswitch = LATD.7 'RX 2to1 switch '#################################################################################################### Dim char As Byte Dim msg1 As String 'any msg data will be passed via this string Dim ascval As String Dim x As Byte Dim y As Byte ''Dim row As Byte 'lcd row pointer Dim xp As Byte 'normal font horiz Dim yp As Byte 'vert lcd location ''''''''GPS Dim str1(80) As Byte 'GPGGA or $BASE STR1 ARRAY Dim strchr As String 'GPGGA or $BASE msg Dim csv As Byte 'COMMA POSITION in GPS msg Dim sinlat As Single Dim sinlong As Single Dim strtim As String Dim strlat As String Dim strlong As String ''Dim char As Byte Dim rxi As Byte Dim txi As Byte ''''''''BMP280 CALC 'Dim var1 As Single 'Dim var2 As Single 'Dim b(24) As Byte 'Dim data As Byte 'Dim t_fine As Single 'Dim t_raw As Long 'Dim p_raw As Long 'Dim adc_t As Single 'Dim adc_p As Single 'Dim tp As Single 'TEMP result in CALC 'Dim pr As Single 'PRESS result in CALC 'Dim strtp As String 'Dim strpr As String 'Dim i As Byte 'Dim adr As Byte 'ADDRESS FOR BMP280 'Dim t1 As Word 'Compensation parameters 'Dim t2 As Word 'Dim t3 As Word 'Dim p1 As Word 'Dim p2 As Word 'Dim p3 As Word 'Dim p4 As Word 'Dim p5 As Word 'Dim p6 As Word 'Dim p7 As Word 'Dim p8 As Word 'Dim p9 As Word 'Dim dig_t1 As Single 'Compensation parameters 'Dim dig_t2 As Single 'Dim dig_t3 As Single 'Dim dig_p1 As Single 'Dim dig_p2 As Single 'Dim dig_p3 As Single 'Dim dig_p4 As Single 'Dim dig_p5 As Single 'Dim dig_p6 As Single 'Dim dig_p7 As Single 'Dim dig_p8 As Single 'Dim dig_p9 As Single '############################################################################### ''''''''COMPASS MPU-9250 NEEDS RE-CHECKING??????????????????????????????????? Dim id_raw As Long 'COMPASS ID ''Dim adc_id As Single Dim id As Single 'TEMP result in CALC'###################### Dim strid As String Dim regb_raw As Byte 'COMPASS REGLB Dim strregb As String Dim ct_raw As Long 'COMPASS TEMPERATURE ''Dim adc_ct As Single '''Dim ct As Single 'TEMP result in CALC'###################### Dim strct As String Dim x_rawhb As Byte Dim x_raw As Long 'COMPASS X 'Dim adc_x As Single Dim xx As Single 'XDATA'############################# Dim strx As String Dim strxhb As String Dim strxlb As String Dim y_raw As Long 'COMPASS Y 'Dim adc_y As Single Dim yy As Single 'YDATA'############################# Dim stry As String Dim z_raw As Long 'COMPASS Z 'Dim adc_z As Single Dim zz As Single 'ZDATA'############################# Dim strz As String Dim addr As Byte 'ADDRESS FOR COMPASS '''''''''''''''''''''''''''''''''''''''TEST''''''''''''''''''''''''''''''''''''' Dim ident As Byte Dim strdata As String ''''''''''''''''''''''''''''''''''''''''''TEST''''''''''''''''''''''''''''''''''''' ''''''''SERVOS Dim tmr1word As Word Dim servo1 As Single 'dim servo1 As Word 'servo 1 ontime Dim servo2 As Single 'dim servo2 As Word 'servo 2 ontime Dim servo3 As Single 'dim servo3 As Word 'Servo 3 ontime Dim servo4 As Single 'dim servo4 As Word 'Servo 4 ontime Dim tot As Word '22ms - T0 - T3 Dim servo As Byte Dim strbase As String '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Dim st0 As String Dim st1 As String Dim st2 As String Dim st3 As String Dim wt0 As Single Dim wt1 As Single Dim wt2 As Single Dim wt3 As Single Dim arg1 As String '??????????????????????????????? ADCON0 = 0x03 'AN0-1-2-3 Can be used as Analogue inputs. ADCON1 = 0x0e ADCON2 = %10100100 T1CON = %00111101 '1:8 -> Timer1 clock = 1MHz T2CON = 0 T3CON = 0 PIR1 = 0 PIR2 = 0 PIE1 = 0 PIE2 = 0 PIE1.RCIE = 1 'rxd Intr , used for GPS serial input work IPR1 = 0 IPR2 = 0 IPR1.TMR1IP = 1 RCON.IPEN = 1 'This MUST be included when using Interrupts OSCCON = %01100000 'internal 8Mhz clock<<<<<<<<<<<<<< OSCTUNE.PLLEN = 1 '*4 PLL enabled so Fosc = 32MHZ Disable High Disable Low ''Include "fontsml.bas" 'This 'FONT' file nust be in the same folder as this program code msg1 = "" Hseropen 9600 Hserout "Ready!", CrLf 'Start up LEDS rled = 1 yled = 1 WaitMs 1000 rled = 0 yled = 0 WaitMs 1000 ''START://??????????????????????? '''''''''Do a lcd Reset COMMENT IN<<<<<<<<<<<<<< ''''Gosub rst_lcd '5110 states very early RESET is important COMMENT IN<<<<<<<<<<<<<< 'SPIPrepare 'Gosub cmd5110 'init lcd 'WaitMs 10 ''''Call clear() COMMENT IN<<<<<<<<<<<<<< ''''''''''BMP280 INITIALISATION ''''''''''Compensation parameters 'SPICSOn 'For i = 0 To 23 [[[[[[[[BMP280 COMMENTED OUT TOO MANY VARIABLES}}}}}}}}}}}} 'altmtr = 0 'CHIP SELECT BMP280 ON 'adr = 0x88 + i 'SPISend adr 'SPIReceive data 'b(i) = data 'altmtr = 1 'CHIP SELECT BMP280 OFF 'Next i 'SPICSOff ''''''''''Temp coefficents 't1.LB = b(0) 't1.HB = b(1) 't2.LB = b(2) 't2.HB = b(3) 't3.LB = b(4) 't3.HB = b(5) '''''''''''pressure coefficients 'p1.LB = b(6) 'p1.HB = b(7) 'p2.LB = b(8) 'p2.HB = b(9) 'p3.LB = b(10) 'p3.HB = b(11) 'p4.LB = b(12) 'p4.HB = b(13) 'p5.LB = b(14) 'p5.HB = b(15) 'p6.LB = b(16) 'p6.HB = b(17) 'p7.LB = b(18) 'p7.HB = b(19) 'p8.LB = b(20) 'p8.HB = b(21) 'p9.LB = b(22) 'p9.HB = b(23) '''''''''''convert to singles with sign 'dig_t1 = t1 'dig_t2 = t2 'If dig_t2 > 32767 Then 'dig_t2 = dig_t2 - 65536 'Endif 'dig_t3 = t3 'If dig_t3 > 32767 Then 'dig_t3 = dig_t3 - 65536 'Endif 'dig_p1 = p1 'dig_p2 = p2 'If dig_p2 > 32767 Then 'dig_p2 = dig_p2 - 65536 'Endif 'dig_p3 = p3 'If dig_p3 > 32767 Then 'dig_p3 = dig_p3 - 65536 'Endif 'dig_p4 = p4 'If dig_p4 > 32767 Then 'dig_p4 = dig_p4 - 65536 'Endif 'dig_p5 = p5 'If dig_p5 > 32767 Then 'dig_p5 = dig_p5 - 65536 'Endif 'dig_p6 = p6 'If dig_p6 > 32767 Then 'dig_p6 = dig_p6 - 65536 'Endif 'dig_p7 = p7 'If dig_p7 > 32767 Then 'dig_p7 = dig_p7 - 65536 'Endif 'dig_p8 = p8 'If dig_p8 > 32767 Then 'dig_p8 = dig_p8 - 65536 'Endif 'dig_p9 = p9 'If dig_p9 > 32767 Then 'dig_p9 = dig_p9 - 65536 'Endif 'SPICSOn 'altmtr = 0 'CHIP SELECT BMP280 ON 'SPISend 0x60 'WRITE 0xe0 RESET ADDR [Is this needed?] 'SPISend 0xb6 '%10110110 RESET TO 0x00 'altmtr = 1 'CHIP SELECT BMP280 OFF 'altmtr = 0 'CHIP SELECT BMP280 ON 'SPISend 0x74 'WRITE 0xF4 Control CTRL_MEAS reg addr 'SPISend 0x5f '%01011111 T/ON P/ON 't_x2 px16 Normal Mode 'altmtr = 1 'CHIP SELECT BMP280 OFF 'altmtr = 0 'CHIP SELECT BMP280 ON 'SPISend 0x75 'WRITE 0xF5 Control CONFIG reg addr 'SPISend 0x1c '%00011100 osrs_t 0.5ms Table 11-11R filter x16 table 6 'altmtr = 1 'CHIP SELECT BMP280 OFF 'SPICSOff '####################################################################### ''''''''COMPASS INITIALISATION [[without this send the result shows default = 0x01]] 'compss = 0 'CHIP SELECT COMPASS ON 'SPICSOn 'SPISend 0x01 'CONFIG REGB ADDR 0X01 'SPISend 0x20 'WRITE CONFIG REGB DEFAULT %00100000 'compss = 1 'CHIP SELECT COMPASS OFF 'SPICSOff 'WaitMs 10 '++++++++++++++++++++++++++++++++++++ '########################################################################### 'INTCON.GIE = 1 'Global Interrupt Enable bit 'INTCON.PEIE = 1 'Peripheral Interrupt Enable bit 'INTCON.TMR0IE = 0 'TMR0 Overflow Interrupt Enable bit 'INTCON.INT0IE = 0 'INT0IE: INT0 External Interrupt Enable bit'' 'INTCON.RBIE = 0 'RBIE: RB Port Change Interrupt Enable bit 'INTCON.TMR0IF = 1 'TMR0IF: TMR0 Overflow Interrupt Flag bit 'INTCON.INT0IF = 0 'INT0IF: INT0 External Interrupt Flag bit 'INTCON.RBIF = 0 'RBIF: RB Port Change Interrupt Flag bit(0 = PORTB off) ''INTCON = %11000100 ''T1CON.TMR1ON = 0 ''PIE1.TMR1IE = 1 ''PIE1.RCIE = 1 '????????????????????????????????????? ''PIR1.RCIF = 0 ''msg1 = "" ''TMR1L = 0xdc ''TMR1H = 0xf0 ''Enable High ''Enable Low ''INTCON.GIE = 1 '%X0000000 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ''INTCON.PEIE = 1 '%0X000000 'SERVO ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''strbase = "1250,1500,1750,2000" ''msg1 = strbase ''Call strs2hex2(msg1) '?????????????????????????????????? '''idle_loop: '''Goto idle_loop '''End ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' servo1 = 1100 servo2 = 1200 servo3 = 1300 servo4 = 1400 tot = 14000 '22000-t0-t3 servo = 4 tmr1word = 65534 ''TMR1H = tmr1word.HB ''TMR1L = tmr1word.LB ''T1CON.TMR1ON = 1 main: '\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ rled = 1 WaitMs 1000 yled = 0 WaitMs 1000 rled = 0 WaitMs 1000 yled = 1 WaitMs 1000 Goto main '###############################################################