'GPS.bas DT$="16/11/20" '28 pin uMITE Ver 5.2 5.02 'Written by Duane C. Johnson AD0TJ 'Red Rock Energy 'redrok@redrok.com 'http://www.redrok.com GOSUB Initialize '-------------------------------------- Again: LINE INPUT #2,NMEA$ 'PRINT NMEA$:GOTO Again IF MID$(NMEA$,4,3)="RMC" THEN STARS1=(STARS1+1)MOD 4:PRINT CHR$(27);"[1B";STARL$(STARS1);BU1$;NMEA$;STARR$(STARS1);EL0$;HM0$; IF MID$(NMEA$,4,3)="GLL" THEN STARS2=(STARS2+1)MOD 4:PRINT CHR$(27);"[2B";STARL$(STARS2);BU1$;NMEA$;STARR$(STARS2);EL0$;HM0$; IF MID$(NMEA$,4,3)="GGA" THEN STARS3=(STARS3+1)MOD 4:PRINT CHR$(27);"[3B";STARL$(STARS3);BU1$;NMEA$;STARR$(STARS3);EL0$;HM0$; IF MID$(NMEA$,4,3)="GSA" THEN STARS4=(STARS4+1)MOD 4:PRINT CHR$(27);"[4B";STARL$(STARS4);BU1$;NMEA$;STARR$(STARS4);EL0$;HM0$; IF MID$(NMEA$,4,3)="VTG" THEN STARS5=(STARS5+1)MOD 4:PRINT CHR$(27);"[5B";STARL$(STARS5);BU1$;NMEA$;STARR$(STARS5);EL0$;HM0$; IF MID$(NMEA$,4,3)="GSV" AND MID$(NMEA$,10,1)="1" THEN STARS6=(STARS6+1)MOD 4:PRINT CHR$(27);"[6B";STARL$(STARS6);BU1$;NMEA$;STARR$(STARS6);EL0$;HM0$; IF MID$(NMEA$,4,3)="GSV" AND MID$(NMEA$,10,1)="2" THEN STARS7=(STARS7+1)MOD 4:PRINT CHR$(27);"[7B";STARL$(STARS7);BU1$;NMEA$;STARR$(STARS7);EL0$;HM0$; IF MID$(NMEA$,4,3)="GSV" AND MID$(NMEA$,10,1)="3" THEN STARS8=(STARS8+1)MOD 4:PRINT CHR$(27);"[8B";STARL$(STARS8);BU1$;NMEA$;STARR$(STARS8);EL0$;HM0$; IF MID$(NMEA$,4,3)="GSV" AND MID$(NMEA$,10,1)="4" THEN STARS9=(STARS9+1)MOD 4:PRINT CHR$(27);"[9B";STARL$(STARS9);BU1$;NMEA$;STARR$(STARS9);EL0$;HM0$; GOTO AGAIN 'PRINT NMEA$ IF MID$(NMEA$,19,1)<>"A" THEN GOTO TimeDisplay '-------------------------------------- CkSum=0:FOR T = 2 TO LEN(NMEA$)-3:CkSum=CkSum XOR ASC(MID$(NMEA$,T,1)):NEXT T' Calculate Checksum 'CST=0:CSTS$="$PSRF100,1,19200,8,1,0*38" 'FOR T = 2 TO LEN(CSTS$)-3 'CST=CST XOR ASC(MID$(CSTS$,T,1)) 'NEXT T' Calculate Checksum TEST 'PRINT CSTS$,HEX$(CST):END STARS=(STARS+1)MOD 4 IF HEX$(CkSum,2)<>MID$(NMEA$,LEN(NMEA$)-1)THEN PRINT BEL$;BEL$;:GOTO TimeDisplay 'PRINT HM1$; PRINT STARL$(STARS);BU1$; FOR T = 10 TO 80 STEP 10:PRINT "12345678";STARC$(STARS);STR$(T,2);BU1$;:NEXT T PRINT STARR$(STARS);BU1$;EL0$ PRINT STARL$(STARS);BU1$; PRINT " ";NMEA$; PRINT STARR$(STARS);BU1$;EL0$ GPRMCT$( 0)=MID$(NMEA$, 1, 6) GPRMCT$( 1)=MID$(NMEA$, 8,10):GPRMCT$( 2)=MID$(NMEA$,19, 1) GPRMCT$( 3)=MID$(NMEA$,21, 9):GPRMCT$( 4)=MID$(NMEA$,31, 1) GPRMCT$( 5)=MID$(NMEA$,33,10):GPRMCT$( 6)=MID$(NMEA$,44, 1) PRINT STARL$(STARS);BU1$;" "; FOR T = 0 TO 5 PRINT GPRMCT$(T);STARC$(STARS);",";BU1$; NEXT T:PRINT GPRMCT$(6); PRINT STARR$(STARS);BU1$;EL0$ IF MID$(TIME$,7,2)="59" OR MID$(TIME$,7,2)="00" THEN GOTO TimeDisplay ' Skip Setting RTC IF PIN(15)=1 THEN RTC SETREG 2, VAL(MID$(NMEA$,12,1))*16 + VAL(MID$(NMEA$,13,1)) IF PIN(15)=1 THEN RTC SETREG 3, VAL(MID$(NMEA$,10,1))*16 + VAL(MID$(NMEA$,11,1))-1 IF PIN(15)=1 THEN HourLocal$=STR$((VAL(MID$(NMEA$, 8,2))+24 + TimeZone + DST)MOD 24,2,0,"0") TIME$=STR$((VAL(MID$(NMEA$, 8,2))+24 + TimeZone + DST)MOD 24,2,0,"0")+":"+MID$(NMEA$,10,2)+":"+MID$(NMEA$,12,2) IF PIN(15)=1 THEN RTC SETREG 4, VAL(MID$(HourLocal$, 1,1))*16 + VAL(MID$(HourLocal$, 2,1)) 'RTC GETTIME '-------------------------------------- TimeDisplay: 'PRINT EL2$;UP1$; PRINT STARL$(STARS);BU1$; PRINT MID$(DATE$,9,2);STARC$(STARS);"/";BU1$;MID$(DATE$,4,2);STARC$(STARS);"/";BU1$;MID$(DATE$,1,2);" "; PRINT MID$(TIME$,1,2);STARC$(STARS);":";BU1$;MID$(TIME$,4,2);STARC$(STARS);":";BU1$;MID$(TIME$,7,2);" GPS/Internal"; PRINT STARR$(STARS);BU1$ ';EL0$ RTC GETREG 2,SECS:RTC GETREG 3,MINS:RTC GETREG 4,HOURS SECS =(SECS AND 240)/16*10 + (SECS AND 15) MINS =(MINS AND 240)/16*10 + (MINS AND 15) HOURS=(HOURS AND 240)/16*10 + (HOURS AND 15) PRINT STARL$(STARS);BU1$; PRINT " ";STR$(HOURS,2,0,"0");":";STR$(MINS,2,0,"0");":";STR$(SECS,2,0,"0");" RTC-1 Minute"; PRINT STARR$(STARS);BU1$ ' ;EL0$; GOTO Again '-------------------------------------- END Initialize: 'OPTION LCDPANEL DISABLE 'OPTION TOUCH DISABLE 'Option AUTORUN ON 'Option AUTORUN OFF 'Option COLOURCODE OFF 'CPU 40 'Option BAUDRATE 9600 'Option BAUDRATE 38400 'Option BAUDRATE 115200 'Option BAUDRATE 921600 'Cls 'OPTION DEFAULT FLOAT '-------------------------------------- 'Setup all pins so non are floating ' PIN 1 RESET SETPIN 2, DIN,PULLDOWN SETPIN 3, DIN,PULLDOWN SETPIN 4, DIN,PULLDOWN SETPIN 5, DIN,PULLDOWN SETPIN 6, DIN,PULLDOWN SETPIN 7, DIN,PULLDOWN ' PIN 8 GND 'SETPIN 9, DIN,PULLDOWN'COM2: TX 'SETPIN 10, DIN,PULLDOWN'COM2: RX ' SETPIN 11,DOUT 'COM1: TX Console ' SETPIN 12, DIN,PULLDOWN'COM1: RX Console ' PIN 13 +3.3V SETPIN 14, DIN,PULLDOWN'5V SETPIN 15, DIN,PULLDOWN'5V ' SETPIN 16, DIN,PULLDOWN'5V SETPIN 16, DIN,PULLDOWN'5V SETPIN 17, DIN,PULLDOWN'5V I2C SETPIN 18, DIN,PULLDOWN'5V I2C ' PIN 19 GND ' PIN 20 10uF Cap SETPIN 21, DIN,PULLDOWN'5V SETPIN 22, DIN,PULLDOWN'5V SETPIN 23, DIN,PULLDOWN SETPIN 24, DIN,PULLDOWN SETPIN 25, DIN,PULLDOWN SETPIN 26, DIN,PULLDOWN ' PIN 27 GND ' PIN 28 +3.3V '-------------------------------------- 'Set the Terminal to 16 Colors(PC style) 'Set the Terminal to Enable bold font 'Set the Terminal to Courier10BT UL1$=CHR$(27)+"[4m" 'Underline Mode NM1$=CHR$(27)+"[0m" 'Cursor Normal (Reset) BK0$=CHR$(27)+"[0;30m"'Black actually White RD0$=CHR$(27)+"[0;31m"'Red GR0$=CHR$(27)+"[0;32m"'Green YE0$=CHR$(27)+"[0;33m"'Yellow BU0$=CHR$(27)+"[0;34m"'Blue MG0$=CHR$(27)+"[0;35m"'Magenta CY0$=CHR$(27)+"[0;36m"'Cyan WH0$=CHR$(27)+"[0;37m"'White actually Gray BK1$=CHR$(27)+"[1;30m"'Bold Black RD1$=CHR$(27)+"[1;31m"'Bold Red GR1$=CHR$(27)+"[1;32m"'Bold Green YE1$=CHR$(27)+"[1;33m"'Bold Yellow BU1$=CHR$(27)+"[1;34m"'Bold Blue MG1$=CHR$(27)+"[1;35m"'Bold Magenta CY1$=CHR$(27)+"[1;36m"'Bold Cyan WH1$=CHR$(27)+"[1;37m"'Bold White actually Black HM0$=Chr$(27)+"[0f" 'Curser to Upper Left Corner HM1$=Chr$(27)+"[1f" 'Curser to Upper Left Corner HM2$=Chr$(27)+"[2f" 'Curser to Upper Left Corner ED2$=CHR$(27)+"[2J" 'Erase Display After the Curser, Pause 500mS UP1$=CHR$(27)+"[1A" ' ^ Up 1 Line 'EL0$=CHR$(27)+"[0K" 'CLEAR TO EOL End Of Line EL0$=CHR$(27)+"[K" 'CLEAR TO EOL End Of Line EL2$=Chr$(27)+"[2K" 'CLEAR Entire Line Doesn't Work UP1$=CHR$(27)+"[1A" 'Up 1 Line BEL$=CHR$(7) 'BELL SUB MM.PROMPT:PRINT RD1$;"GPS";BU1$;">";:END SUB GOTO ColorTestDone PRINT HM1$; 'Curser to Upper Left Corner PRINT ED2$; 'Erase Display PRINT BK0$;"BK0$";BK1$;"BK1$";RD0$;"RD0$";RD1$;"RD1$" PRINT GR0$;"GR0$";GR1$;"GR1$";YE0$;"YE0$";YE1$;"YE1$" PRINT BU0$;"BU0$";BU1$;"BU1$";MG0$;"MG0$";MG1$;"MG1$" PRINT CY0$;"CY0$";CY1$;"CY1$";WH0$;"WH0$";WH1$;"WH1$" PAUSE 1000 ColorTestDone: Dim STARL$(3),STARR$(3),STARC$(3) STARL$(0)=RD1$+"-":STARL$(1)=CY1$+"\":STARL$(2)=MG1$+"|":STARL$(3)=GR1$+"/" STARR$(0)=RD1$+"-":STARR$(1)=CY1$+"/":STARR$(2)=MG1$+"|":STARR$(3)=GR1$+"\" STARC$(0)=RD1$ :STARC$(1)=CY1$ :STARC$(2)=MG1$ :STARC$(3)=GR1$ PRINT HM1$;ED2$; '-------------------------------------- TimeZone = -6 ' Local Time Zone -=West +=East DST = 1 ' 1 = Daylight Saving Time ELSE 0 OPEN "COM2:9600" AS #2 'Print #2, "$PSRF100,1,19200,8,1,0*38" ' Enable 19200 baud rate 'PAUSE 250 'CLOSE #2 'PAUSE 250 'OPEN "COM2:19200" AS #2 DIM GPRMCD(13) ' Delimiter Position DIM GPRMCT$(13)' Text Data END SUB '-------------------------------------- Sub nmea_sentence 'http://www.thebackshed.com/forum/forum_posts.asp?TID=5617&KW=COMMA+DELIMITED+STRING Do msg$ ="$" ' subroutine start Do While Input$(1, #1) <> "$" : Loop ' wait for the start For i = 0 To max arg$(i) = "" ' clear ready for data Do ' loops until a specific exit x$ = Input$(1, #1) ' Print x$ msg$ = msg$ + x$ ' get the character If x$ = "," Then Exit ' new data field, increment i If x$ = "*" Then Return ' we have all the data so return arg$(i) = arg$(i) + x$ ' Print arg$(i) ' add to the data Loop ' Print arg$(i) ' loop back for the next char Next i ' move to the next data field ' Print "Corrupt data..." ' exceeded max data items 'Print msg$ Loop End Sub ' http://www.thebackshed.com/forum/forum_posts.asp?TID=5996&KW=COMMA+DELIMITED+STRING