GPS Project: PIC18F26K22 or PIC18F46K22 - Page 2


Closed Thread
Page 2 of 2 FirstFirst 12
Results 41 to 69 of 69
  1. #41
    Join Date
    Oct 2010
    Posts
    411


    Did you find this post helpful? Yes | No

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    Dear all,

    i did the following....

    Code:
    '*-----------------------------------------------------------------------------|
    '*                        |  --------------------- |                           |
    '*----------------------- | EUART 1 Configuration  | --------------------------|
    '*                        |  --------------------- |                           |
    '*-----------------------------------------------------------------------------|
            
            RCSTA = $90 ' Enable serial port & continuous receive
            TXSTA = $24 ' Enable transmit, BRGH = 1
            'CLROERR = 1 ' Clear overflow automatically
            SPBRG = 160 ' 38400 Baud @ 64MHz, -0,08%
            SPBRGH = 1
            BAUDCON.3 = 1         ' Enable 16 bit baudrate generator
            
    '*-----------------------------------------------------------------------------|
    '*                        |  --------------------- |                           |
    '*----------------------- | EUART 2 Configuration  | --------------------------|
    '*                        |  --------------------- |                           |
    '*-----------------------------------------------------------------------------|
    
            RCSTA2 = $90 ' Enable serial port & continuous receive
            TXSTA2 = $24 ' Enable transmit, BRGH = 1
            'CLROERR2 1 ' Clear overflow automatically
            SPBRG2 = 130 ' 9600 Baud @ 64MHz, -0,02%
            SPBRGH2 = 6
            BAUDCON2.3 = 1         ' Enable 16 bit baudrate generator
            
    
    '------------------------------------------------------------------------------|
    '-----------sent a sentence to gps, this is not working at the moment----------|
    '------------------------------------------------------------------------------|
    ' When the GPS Module is POWERED ON, then the following sentenses are received. 
    
    '          $PMTK011,MTKGPS*08
    '          $PMTK010,001*2E
    '          $PMTK010,002*2D   
    
    pause 800 
    HSEROUT2 ["$PMTK251,38400*27",13,10]      ' 38400 boundrate, check MTK manual configuration
    pause 800
    
    SPBRG2 = 160 ' 38400 Baud @ 64MHz, -0,08%
    Pause 500
    
    HSEROUT2 ["$PMTK220,100*2F",13,10]        ' 100(millisecond)=0.1(sec)-->1/0.1= 10Hz
    pause 100
    It works the part of a baudrate change, when i send the command to the gps

    Code:
    HSEROUT2 ["$PMTK251,38400*27",13,10]      ' 38400 boundrate, check MTK manual configuration
    pause 800
    but i think the following it goes to GPS but for some reason is not set.

    Code:
    HSEROUT2 ["$PMTK220,100*2F",13,10]        ' 100(millisecond)=0.1(sec)-->1/0.1= 10Hz
    pause 100

  2. #42
    Join Date
    Aug 2011
    Posts
    408


    Did you find this post helpful? Yes | No

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    When you switch the baudrate you have to set both SPBRG2 and SPBRGH2.

    Try:
    Code:
    SPBRG2 = 160 ' 38400 Baud @ 64MHz, -0,08%
    SPBRGH2 = 1
    Pause 500

  3. #43
    Join Date
    Oct 2010
    Posts
    411


    Did you find this post helpful? Yes | No

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    Quote Originally Posted by tumbleweed View Post
    When you switch the baudrate you have to set both SPBRG2 and SPBRGH2.

    Try:
    Code:
    SPBRG2 = 160 ' 38400 Baud @ 64MHz, -0,08%
    SPBRGH2 = 1
    Pause 500
    It worked!!! I will post later on what i have done up to now. Maybe i need to set up a small indication when those commands are set. So i know that program is working up to that stage.

    This is the code for changing the baudrate to GPS and the hz rate at 10Hz at the NMEA data.

    Code:
    '*-----------------------------------------------------------------------------|
    '*                        |  --------------------- |                           |
    '*----------------------- | EUART 1 Configuration  | --------------------------|
    '*                        |  --------------------- |                           |
    '*-----------------------------------------------------------------------------|
            
            RCSTA = $90 ' Enable serial port & continuous receive
            TXSTA = $24 ' Enable transmit, BRGH = 1
            'CLROERR = 1 ' Clear overflow automatically
            SPBRG = 160 ' 38400 Baud @ 64MHz, -0,08%
            SPBRGH = 1
            BAUDCON.3 = 1         ' Enable 16 bit baudrate generator
            
    '*-----------------------------------------------------------------------------|
    '*                        |  --------------------- |                           |
    '*----------------------- | EUART 2 Configuration  | --------------------------|
    '*                        |  --------------------- |                           |
    '*-----------------------------------------------------------------------------|
    
            RCSTA2 = $90 ' Enable serial port & continuous receive
            TXSTA2 = $24 ' Enable transmit, BRGH = 1
            'CLROERR2 1 ' Clear overflow automatically
            SPBRG2 = 130 ' 9600 Baud @ 64MHz, -0,02%
            SPBRGH2 = 6
            BAUDCON2.3 = 1         ' Enable 16 bit baudrate generator
            
    
    '------------------------------------------------------------------------------|
    '-----------sent a sentence to gps, this is not working at the moment----------|
    '------------------------------------------------------------------------------|
    ' When the GPS Module is POWERED ON, then the following sentenses are received. 
    
    '          $PMTK011,MTKGPS*08
    '          $PMTK010,001*2E
    '          $PMTK010,002*2D   
    
    pause 800 
    HSEROUT2 ["$PMTK251,38400*27",13,10]      ' 38400 boundrate, check MTK manual configuration
    pause 800
    
    SPBRG2 = 160 ' 38400 Baud @ 64MHz, -0,08%
    SPBRGH2 = 1
    Pause 500
    
    HSEROUT2 ["$PMTK220,100*2F",13,10]        ' 100(millisecond)=0.1(sec)-->1/0.1= 10Hz
    pause 100

  4. #44
    Join Date
    Oct 2010
    Posts
    411


    Did you find this post helpful? Yes | No

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    Dear all,

    i need you help.

    After removing all the DEFINEs and use only the following

    Code:
    'RCSTA2 = $90 ' Enable serial port & continuous receive
    'TXSTA2 = $24 ' Enable transmit, BRGH = 1
    'DEFINE HSER_CLROERR2 1 ' Clear overflow automatically
    'SPBRG2 = 130 ' 9600 Baud @ 64MHz, -0,02%
    'SPBRGH2 = 6
    'BAUDCON2.3 = 1         ' Enable 16 bit baudrate generator
    and for changing the baudrate and the frequency for the Second Serial,

    Code:
    pause 800 
    HSEROUT2 ["$PMTK251,38400*27",13,10]      ' 38400 boundrate, check MTK manual configuration
    pause 800
    
    SPBRG2 = 160 ' 38400 Baud @ 64MHz, -0,08%
    SPBRGH2 = 1
    Pause 500
    
    ;HSEROUT2 ["$PMTK314,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0*29",13,10]
    HSEROUT2  ["$PMTK314,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*28",13,10]
    pause 100
    
    HSEROUT2 ["$PMTK220,100*2F",13,10]        ' 100(millisecond)=0.1(sec)-->1/0.1= 10Hz
    pause 100
    I found out that on SERIAL TERMINAL on the computer of course i see the data coming from the GPS but unfortunately when i connect an LCD to PIC using the first Serial, the data cannot be displayed.

    It seems that when i use

    Code:
    HSERIN2[wait("$GPRMC")
    the data cannot be read from the GPS to the RX of the PIC.

    I tried to check if there is a problem with the LCD, but i can send text to the LCD.

    I tried to check and use only the DEFINEs with 9600 because the default for the GPS is 9600 and it worked.

    so when i do not use the defines, it looks like that RX port on the PIC doesnt work.

    Could you please help?

  5. #45
    Join Date
    Nov 2003
    Location
    Greece
    Posts
    3,796


    Did you find this post helpful? Yes | No

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    I don't know about other members of the forum, but I got confused.

    Best throw in both codes that work and don't work.

    Do they compile OK?

    Are you sure about your connections?

    Ioannis

  6. #46
    Join Date
    Oct 2010
    Posts
    411


    Did you find this post helpful? Yes | No

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    Ioanni,

    thanks for your reply.

    The problem is when i use the code to change on the fly as of the guys on the forum advice, without using the "DEFINE" word.

    So using the registers like in the following code:

    Code:
    'RCSTA2 = $90 ' Enable serial port & continuous receive
    'TXSTA2 = $24 ' Enable transmit, BRGH = 1
    'DEFINE HSER_CLROERR2 1 ' Clear overflow automatically
    'SPBRG2 = 130 ' 9600 Baud @ 64MHz, -0,02%
    'SPBRGH2 = 6
    'BAUDCON2.3 = 1         ' Enable 16 bit baudrate generator
    and later in order to change the baudrate i use the following:

    Code:
    pause 800 
    HSEROUT2 ["$PMTK251,38400*27",13,10]      ' 38400 boundrate, check MTK manual configuration
    pause 800
    
    SPBRG2 = 160 ' 38400 Baud @ 64MHz, -0,08%
    SPBRGH2 = 1
    Pause 500
    
    ;HSEROUT2 ["$PMTK314,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0*29",13,10]
    HSEROUT2  ["$PMTK314,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*28",13,10]
    pause 100
    
    HSEROUT2 ["$PMTK220,100*2F",13,10]        ' 100(millisecond)=0.1(sec)-->1/0.1= 10Hz
    pause 100
    The GPS gets the command and set correctly the new configuration.

    So up to here we are fine. I checked this by using a Serial Terminal and i see that both Baudrate and frequency have changed.

    That means that TX is working well, for the first command to the GPS

    Code:
    HSEROUT2 ["$PMTK251,38400*27",13,10]      ' 38400 boundrate, check MTK manual configuration
    pause 800
    and changing on the fly the Baudrate the following command to GPS is working fine as well with the NEW baudrate.

    Code:
    HSEROUT2  ["$PMTK314,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*28",13,10]
    pause 100
    
    HSEROUT2 ["$PMTK220,100*2F",13,10]        ' 100(millisecond)=0.1(sec)-->1/0.1= 10Hz
    pause 100
    [/CODE]

    Now what is the problem.

    I used a uLCD to send the VTG and RCM data to the display as i have done in the past using both SEROUT and HSEROUT2 command (for the HSEROUT2 i used the following code with the "DEFINE" and worked well)

    Code:
    'DEFINE HSER2_RCSTA 90h ' Enable serial port & continuous receive
            'DEFINE HSER2_TXSTA 24h ' Enable transmit, BRGH = 1
            'DEFINE HSER2_CLROERR 1 ' Clear overflow automatically
            'DEFINE HSER2_SPBRG 130 ' 9600 Baud @ 64MHz, -0,02%
            'SPBRGH2 = 6
            'BAUDCON2.3 = 1         ' Enable 16 bit baudrate generator
    Now using the registers without the "DEFINEs" the RX on the PIC seems that it doesnt work, something like it is closed or cannot read data from GPS.

    Forgot to mention that 2 hours now i have tried most of the different settings for the

    Code:
    BAUDCON2 = %xxxxxxxx
    without any luck.

  7. #47
    Join Date
    Oct 2010
    Posts
    411


    Did you find this post helpful? Yes | No

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    Compile is ok, the same circuit as when the code is working with the "DEFINE" code.

    Something is wrong with the new code that i change the baudrate on the fly.

    there is something going really wrong. Maybe i need to give more PAUSE time?

    I try that as well.

  8. #48
    Join Date
    Aug 2011
    Posts
    408


    Did you find this post helpful? Yes | No

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    Are you aware of what's been commented out in the code you're showing?

    Post the entire code as it is.

  9. #49
    Join Date
    Nov 2003
    Location
    Greece
    Posts
    3,796


    Did you find this post helpful? Yes | No

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    Page 281 of the K22 PIC has all the settings of the BRGH, BRG16, SPBRGx in relation to the system Clock.

    Also, depending whether you have RS232 driver or not you have to set or reset the BAUDCONx bits 4 and 5.

    If you will use on both Rx and Tx pins a driver (like the MAX232) then these bits should be 0. If you connect directly to another TTL serial port then these bits should be 1.

    Ioannis

  10. #50
    Join Date
    Oct 2010
    Posts
    411


    Did you find this post helpful? Yes | No

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    Quote Originally Posted by tumbleweed View Post
    Are you aware of what's been commented out in the code you're showing?

    Post the entire code as it is.
    Thanks for the reply. Yes i will post later today the code. But i understand the logic using MISTERE's calculator for EUART and it worked fine. But As the GPS at default is working at 9600, i need to speed it up to 38400. So at this point baudarate change on the fly needs a different settings.

    I have configured the code in order to change the baudrate as mentioned on my previous posts, and from the SERIAL TERMINAL, on the computer i see that TX from PIC to GPS is working fine.

    But the RX of the PIC looks like is not receiving or is not reading the info.

    In any case i will post the entire code later.

    Thanks once again.

  11. #51
    Join Date
    Oct 2010
    Posts
    411


    Did you find this post helpful? Yes | No

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    Here is the code that is not working.

    Code:
    '*********************************************************************************
    @ ERRORLEVEL -306 ; this command prevents the compiler to give you a notice of   *
                      ; crossing page boundary - make sure bits are set              *
    '********************************************************************************* 
     
      #CONFIG   ;  The PBP configuration for the PIC18F26K22 is:
    ;    CONFIG FOSC     = RCIO6	    ; External RC oscillator
         CONFIG FOSC     = HSHP	        ; HS oscillator (high power > 16 MHz)
         
    
    ;*---------------------------------4x PLL ENABLE--------------------------------------*|
    ;*  4X PLL Enable                                                                     *|
    ;*    CONFIG PLLCFG  = OFF	        ;Oscillator used directly                         *|
        CONFIG PLLCFG    = ON	        ;Oscillator multiplied by 4                       *|
    ;*------------------------------------------------------------------------------------*|
    ;
    ;  Primary clock enable bit
    ;    CONFIG PRICLKEN = OFF	        ;Primary clock can be disabled by software
        CONFIG PRICLKEN  = ON	        ;Primary clock enabled
    ;
    ;  Fail-Safe Clock Monitor Enable bit
        CONFIG FCMEN     = OFF	        ;Fail-Safe Clock Monitor disabled
    ;    CONFIG FCMEN    = ON	        ;Fail-Safe Clock Monitor enabled
    ;
    ;  Internal/External Oscillator Switchover bit
        CONFIG IESO      = OFF	        ;Oscillator Switchover mode disabled
    ;    CONFIG IESO     = ON	        ;Oscillator Switchover mode enabled
        
        CONFIG  BOREN    = SBORDIS      ; Brown-out Reset enabled in hardware only (SBOREN is disabled)
        
    ;*--------------------------------------------------------------------------------------------------------;|
        CONFIG  WDTEN    = ON           ; WDT is always enabled. SWDTEN bit has no effect                     ;|
        CONFIG  WDTPS    = 32768        ; 1:32768 ---> HERE enable the watchdog timer with a 1:32768 postscale;|
    ;*--------------------------------------------------------------------------------------------------------;|
        
        CONFIG  PWRTEN   = ON
        CONFIG  HFOFST   = ON           ; HFINTOSC output and ready status are not delayed by the oscillator stable status
        CONFIG  MCLRE    = EXTMCLR      ; MCLR pin enabled, RE3 input pin disabled
        CONFIG  LVP      = OFF          ; Single-Supply ICSP disabled
        CONFIG  XINST    = OFF          ; Instruction set extension and Indexed Addressing mode disabled (Legacy mode)
        CONFIG  DEBUG    = OFF          ; Disabled
    
    ;*----------------------------------------------------------------------------------|
    ;*---------------Available configuration settings for PIC18F26K22-------------------|
    ;*----------------------------------------------------------------------------------|
    ;
    ;  Oscillator Selection bits
    ;    CONFIG FOSC = RC	    ;111X External RC oscillator, CLKOUT function on RA6
    ;    CONFIG FOSC = ECLPIO6  ;EC oscillator (low power, <500 kHz)
    ;    CONFIG FOSC = ECLP	    ;EC oscillator, CLKOUT function on OSC2 (low power, <500 kHz)
    ;    CONFIG FOSC = ECMPIO6  ;EC oscillator (medium power, 500 kHz-16 MHz)
    ;    CONFIG FOSC = ECMP	    ;EC oscillator, CLKOUT function on OSC2 (medium power, 500 kHz-16 MHz)
    ;    CONFIG FOSC = INTIO7   ;Internal oscillator block, CLKOUT function on OSC2
    ;    CONFIG FOSC = INTIO67  ;Internal oscillator block
    ;    CONFIG FOSC = RCIO6    ;External RC oscillator
    ;    CONFIG FOSC = RC	    ;External RC oscillator, CLKOUT function on OSC2
    ;    CONFIG FOSC = ECHPIO6  ;EC oscillator (high power, >16 MHz)
    ;    CONFIG FOSC = ECHP	    ;EC oscillator, CLKOUT function on OSC2 (high power, >16 MHz)
    ;    CONFIG FOSC = HSMP	    ;HS oscillator (medium power 4-16 MHz)
    ;    CONFIG FOSC = HSHP	    ;HS oscillator (high power > 16 MHz)
    ;    CONFIG FOSC = XT	    ;XT oscillator
    ;    CONFIG FOSC = LP	    ;LP oscillator
        
    ;*--------------------------------------------------------------------------------------------------------|
    ;*                                  | -------------------------- |                                        |
    ;*  -----------------------------   |  [PROTECTED OPTION FUSES]  |  ------------------------------------  |
    ;*                                  | -------------------------- |                                        |
    ;*--------------------------------------------------------------------------------------------------------|
    
        CONFIG  CP0 = OFF             ; Block 0 (000800-003FFFh) not code-protected
        CONFIG  CP1 = OFF             ; Block 1 (004000-007FFFh) not code-protected
        CONFIG  CP2 = OFF             ; Block 2 (008000-00BFFFh) not code-protected
        CONFIG  CP3 = OFF             ; Block 3 (00C000-00FFFFh) not code-protected
        CONFIG  CPB = OFF             ; Boot block (000000-0007FFh) not code-protected
        CONFIG  CPD = OFF             ; Data EEPROM not code-protected
        CONFIG  WRT0 = OFF            ; Block 0 (000800-003FFFh) not write-protected
        CONFIG  WRT1 = OFF            ; Block 1 (004000-007FFFh) not write-protected
        CONFIG  WRT2 = OFF            ; Block 2 (008000-00BFFFh) not write-protected
        CONFIG  WRT3 = OFF            ; Block 3 (00C000-00FFFFh) not write-protected
        CONFIG  WRTC = OFF            ; Configuration registers (300000-3000FFh) not write-protected
        CONFIG  WRTB = OFF            ; Boot Block (000000-0007FFh) not write-protected
        CONFIG  WRTD = OFF            ; Data EEPROM not write-protected
        CONFIG  EBTR0 = OFF           ; Block 0 (000800-003FFFh) not protected from table reads executed in other blocks
        CONFIG  EBTR1 = OFF           ; Block 1 (004000-007FFFh) not protected from table reads executed in other blocks
        CONFIG  EBTR2 = OFF           ; Block 2 (008000-00BFFFh) not protected from table reads executed in other blocks
        CONFIG  EBTR3 = OFF           ; Block 3 (00C000-00FFFFh) not protected from table reads executed in other blocks
        CONFIG  EBTRB = OFF           ; Boot Block (000000-0007FFh) not protected from table reads executed in other blocks
    
      #ENDCONFIG
      
    ;*---------------------------------------------------------------------------------------------------------|
    ;*---------------------------------------------------------------------------------------------------------|
    
    define  OSC 64
    
            INCLUDE "modedefs.bas"
            INCLUDE "ALLDIGITAL.pbp"         ; Make all ports Digital
            INCLUDE "DT_INTS-18.bas"        ; Base Interrupt System
            INCLUDE "ReEnterPBP-18.bas"     ; Include if using PBP interrupts
    
    OSCCON    = %01110000   ; 64Mhz
    OSCTUNE.6 = 1           ; Enable 4x PLL
    
    while ! osccon2.7 :WEND ; to make sure the pll has stabilised before you run any other code
    '*-----------------------------------------------------------------------------|
    
    '------------------------------------------------------------------------------|
    '                            INITIALIZE RAM                                    |
    '------------------------------------------------------------------------------|
    initialize:
    	CLEAR   	
    '-------------------------------------------------------------------------------------------------------------------------------------------------------------
    
    TRISA = %00000000   'use TRISA to specify which pin is (1 = input) and which (0 = output)  (ALL pins are output)
    TRISB = %10000000   'use TRISB to specify which pin is (1 = input) and which (0 = output)  (RB7 PORTB.7 is the RX input pin of the EUART, the rest are output)
    TRISC = %10000000   'use TRISC to specify which pin is (1 = input) and which (0 = output)  (RC7 PORTC.7 is the RX input pin of the EUART, the rest are output)
                        'in PORTC the RC3 attached is an LED. 
    
    '------------------------------------------------------------------------|
    '--------------------------- TRIS A B C ---------------------------------|
    '------------------------------------------------------------------------|
    ' PORTA.7  PORTA.6  PORTA.5  PORTA.4  PORTA.3  PORTA.2  PORTA.1  PORTA.0 |
    '  bit7     bit6     bit5     bit4     bit3     bit2     bit1     bit0   |
    '   0        0        0        0        0        0        0        0     |
    '------------------------------------------------------------------------|
    '------------------------------------------------------------------------|
    ' PORTB.7  PORTB.6  PORTB.5  PORTB.4  PORTB.3  PORTB.2  PORTB.1  PORTB.0 |
    '  bit7     bit6     bit5     bit4     bit3     bit2     bit1     bit0   |
    '   1        0        0        0        0        0        0        0     |
    '------------------------------------------------------------------------|
    '------------------------------------------------------------------------|
    ' PORTC.7  PORTC.6  PORTC.5  PORTC.4  PORTC.3  PORTC.2  PORTC.1  PORTC.0 |
    '  bit7     bit6     bit5     bit4     bit3     bit2     bit1     bit0   |
    '   1        0        0        0        0        0        0        0     |
    '------------------------------------------------------------------------|
    
    '------------------------------------------------------------------------|
    '----------------------- At start all PORTS LOW -------------------------|
    '------------------------------------------------------------------------|
    PORTA = 0            'make low all ports at A range                      |
    PORTB = 0            'make low all ports at B range                      |
    PORTC = 0            'make low all ports at C range                      |
    PORTE = 0            'make low all ports at E range                      |
    '------------------------------------------------------------------------|
    
    '------------------------------------------------------------------------|
    '-------------------------- COMPARATORS OFF -----------------------------|
    '------------------------------------------------------------------------|
    CM1CON0.7 = 0 'Disable comparator1                                       |
    CM2CON0.7 = 0 'Disable comparator2                                       |
    '------------------------------------------------------------------------|
    
    '*-----------------------------------------------------------------------------|
    '*                        |  --------------------- |                           |
    '*----------------------- | EUART 1 Configuration  | --------------------------|
    '*                        |  --------------------- |                           |
    '*-----------------------------------------------------------------------------|
    
            'DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
            'DEFINE HSER_TXSTA 24h ' Enable transmit, BRGH = 1
            'DEFINE HSER_CLROERR 1 ' Clear overflow automatically
            'DEFINE HSER_SPBRG 160 ' 38400 Baud @ 64MHz, -0,08%
            'SPBRGH = 1
            'BAUDCON.3 = 1         ' Enable 16 bit baudrate generator
            
            RCSTA = $90 ' Enable serial port & continuous receive
            TXSTA = $24 ' Enable transmit, BRGH = 1
            DEFINE HSER_CLROERR = 1 ' Clear overflow automatically
            SPBRG = 160 ' 38400 Baud @ 64MHz, -0,08%
            SPBRGH = 1
            BAUDCON.3 = 1         ' Enable 16 bit baudrate generator
            
    '*-----------------------------------------------------------------------------|
    '*                        |  --------------------- |                           |
    '*----------------------- | EUART 2 Configuration  | --------------------------|
    '*                        |  --------------------- |                           |
    '*-----------------------------------------------------------------------------|
            
            'DEFINE HSER2_RCSTA 90h ' Enable serial port & continuous receive
            'DEFINE HSER2_TXSTA 24h ' Enable transmit, BRGH = 1
            'DEFINE HSER2_CLROERR 1 ' Clear overflow automatically
            'DEFINE HSER2_SPBRG 130 ' 9600 Baud @ 64MHz, -0,02%
            'SPBRGH2 = 6
            'BAUDCON2.3 = 1         ' Enable 16 bit baudrate generator
    
            RCSTA2 = $90 ' Enable serial port & continuous receive
            TXSTA2 = $24 ' Enable transmit, BRGH = 1
            DEFINE HSER_CLROERR2 1 ' Clear overflow automatically
            SPBRG2 = 130 ' 9600 Baud @ 64MHz, -0,02%
            SPBRGH2 = 6
            BAUDCON2.3 = 1         ' Enable 16 bit baudrate generator
            'BAUDCON2.5 = 1 
            
    '------------------------------------------------------------------------------|
    '-----------sent a sentence to gps, this is not working at the moment----------|
    '------------------------------------------------------------------------------|
    ' When the GPS Module is POWERED ON, then the following sentenses are received. 
    
    '          $PMTK011,MTKGPS*08
    '          $PMTK010,001*2E
    '          $PMTK010,002*2D   
    Pause 800 
    HSEROUT2 ["$PMTK251,38400*27",13,10]      ' 38400 boundrate, check MTK manual configuration
    pause 800
    
    SPBRG2 = 160 ' 38400 Baud @ 64MHz, -0,08%
    SPBRGH2 = 1
    Pause 500
    
    ;HSEROUT2 ["$PMTK314,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0*29",13,10]
    HSEROUT2  ["$PMTK314,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*28",13,10]
    pause 100
    
    HSEROUT2 ["$PMTK220,100*2F",13,10]        ' 100(millisecond)=0.1(sec)-->1/0.1= 10Hz
    pause 100
    
    '------------------------------------------------------------------------------|
    
    ASM
    INT_LIST  macro    ; IntSource,        Label,  Type, ResetFlag?
            INT_Handler   TMR0_INT,  _ToggleLED,   PBP,  yes
        endm
        INT_CREATE             ; Creates the interrupt processor
    ENDASM
    T0CON = %10010110             ; T0 = 16-bit, Prescaler 8
    @   INT_ENABLE  TMR0_INT     ; enable Timer 0 interrupts
    
    '*-----------------------------------------------------------------------------|
    timeout     con     2000
    LED         VAR     PORTC.4
    PWRLED      var     PORTC.3 ' indicates that PIC is working on port C.4
    TOGPS       var     PORTB.5 ' this is the pin serout to GPS rx port
    
    hh          var     byte    'hours
    mm          var     byte    'minutes
    ss          var     byte    'seconds  
    sss         var     word    'milisecs
    degrees		VAR     BYTE	'latitude/longitude degrees
    minutes		VAR		BYTE	'latitude/Longitude minutes
    minutesD	VAR		word	'latitude/LONGITUDE DECIMAL MINUTES
    dir       	VAR     BYTE   	' direction (latitude: 0 = N, 1 = S / longitude: 0 = E, 1 = W)
    degrees2	VAR     BYTE	'latitude/longitude degrees
    minutes2	VAR		BYTE	'latitude/Longitude minutes
    minutesD2	VAR		word	'latitude/LONGITUDE DECIMAL MINUTES
    dir2        var     byte    'direction (latitude: 0 = N, 1 = S / longitude: 0 = E, 1 = W)
    SatNo   	VAR		BYTE	'number of satellites connected
    day         var     byte    'day
    month       var     byte    'month
    year        var     byte    'year
    SPEED       var     word    'speed with conversion ASCII to dec -48
    Km          var     byte    'this is a letter K --> KM/H om the GPVTG sentence 
    TS          var     byte[4] 'TOTAL SPEED. we create an array to combine each possible character for speed
    decimal     var     byte
    i           var     word    'we use this for Total speed point
    FIX         var     byte    'fix sat V/A
    Modefix     var     byte    'mode fix 1 or 2 or 3 depens
    
    RED         var     PORTA.3
    GREEN       var     PORTA.2
    BLUE        VAR     PORTA.1
    ' -----------------------------------------------------------------------------|  
    '                          [ LCD Initialization ]                              |
    '------------------------------------------------------------------------------|
              ' FIRST TIME BOOTUP: We give plenty of time for tbe LCD '
    
    pause 2000  
    HSEROUT[$55]      ' uOLED Initialize this is the 'U' character of autoband rate to LCD
    Hserin  [wait(6)]
    hserout[$56,$01]  ' this is the Version info --> '01 10 17 28 28   -->> "(("
    Hserin  [wait(1),wait(16),wait(23),wait(40),wait(40)]
    HSEROUT [$45]    ' clear the LCD
    Hserin  [wait(6)]
    pause 500
    
    hserout[$73,$00,$03,$11,$ff,$ff," Leonardo Bilalis",$00] 
    Hserin  [wait(6)]           
    hserout[$73,$02,$06,$10,$ff,"     Copyright 2018",$00]
    Hserin  [wait(6)]
    pause 3000
    
    Hserout [$4F,01]   'Set transparent / opaque TEXT ($00 for transparent or $01 for opaque)
    Hserin  [wait(6)]
    
    HSEROUT [$45]    ' clear the LCD
    Hserin  [wait(6)]
    
    '-------------------------------------------------------------------------------------
    
    high led
    
    Main:
    
    ;serin2  gps_tx,84,timeout,lostcable,[wait("$GNRMC"),_          ;we wait for $GNRMC
    HSERIN2[wait("$GPRMC"),_           ;we wait for $GPRMC
    wait(","),dec2 hh,dec2 mm,dec2 ss,wait("."),dec3 sss,_          ;we wait for 090045.000 which is the time when we got the info
    wait(","),fix,_                                                 ;we wait for A
    wait(","),dec2 degrees,dec2 minutes,wait("."),dec4 minutesd,_   ;we wait for 3823.6645
    wait(","),dir,_                                                 ;we wait for N/S ;wait(","),dec3 degrees2,dec2 minutes2,wait("."),dec4 minutesd2,_;we wait for 02353.3600
    wait(","),dec3 degrees2,dec2 minutes2,wait("."),dec4 minutesd2,_;we wait for 02353.3600
    wait(","),dir2,_                                                ;we wait for E/W
    wait(","),wait(","),_                                               
    wait(","),dec2 day,dec2 month,dec2 year,_                       ;we wait for 170518
    wait(","),SKIP 3]  
    
    if fix = "V" then gps
    
    'serin2 gps_tx,84,timeout,lostcable,[wait("GNVTG"),_
    HSERIN2[wait("GPVTG"),wait("N"),_
    wait(","),TS[0],TS[1],TS[2],TS[3],TS[4],_
    wait(","),SKIP 3]
    
    for i = 1 to 3
        if TS[i]="." then decimal = i   'TOTAL SPEED. find which character is the decimal point 
        next i
    
    select case decimal 'if the gps shows 1.45 it may be 145
                        'for the conversion ASCII to number we can use the -48
        case    1       'decimal position is x.xx
            SPEED = (10*(TS[0]-48))+(TS[2]-48)
        case    2       'decimal position is xx.xx
            SPEED = (100*(TS[0]-48))+(10*(TS[1]-48))+(TS[3]-48)
        case    3       'decimal position is xxx.xx
            SPEED = (1000*(TS[0]-48))+(100*(TS[1]-48))+(10*(TS[2]-48))
        end select     
        
    gosub OVERSPEED
    
    HSEROUT [$73,$05,$06,$11,$FF,$E0," SPEED",$00]
    Hserin  [wait(6)]
    HSEROUT [$73,$06,$05,$12,$6D,$BF,TS[0],TS[1],TS[2],TS[3],$00]
    Hserin  [wait(6)]
    HSEROUT [$73,$06,$06,$12,$FF,$E0,"Km/h",$00]
    Hserin  [wait(6)]
    
    goto main
    
    '-----------------------------------------------------------------------------/
    '                              [ SUB ROUTINES ]                              /
    '---------------------------------------------------------------------------/
    
    OVERSPEED: 
    
    if SPEED > 1000 then     ' 100Km/h
        high BLUE
        low  GREEN
        low  RED    
    else
        LOW BLUE
        
    if SPEED > 500 then     ' 50Km/h
        high GREEN
        low  RED    
    else
        LOW GREEN
        
    if SPEED > 100  then    ' 10Km/h
        high RED
    else
        LOW RED
    
    endif
        endif
            endif
        return
    
    GPS: 
    HSEROUT [$45]  ' clears the LCD 
    Hserin  [wait(6)]
    
    HSEROUT [$73,$00,$03,$11,$6D,$BF,"   Waiting for GPS",$00]
    Hserin  [wait(6)]
    HSEROUT [$73,$04,$07,$12,$F8,$00,"NOT FIXED",$00]
    Hserin  [wait(6)]
    pause 3000
    
    HSEROUT [$45]  ' clears the LCD 
    Hserin  [wait(6)]
    
    goto main      'returns to notfix  
    '---[INT - interrupt handler]---------------------------------------------------
    
    ToggleLED:
         TOGGLE pwrled
    @ INT_RETURN

  12. #52
    Join Date
    Aug 2011
    Posts
    408


    Did you find this post helpful? Yes | No

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    Try changing this:
    Code:
                DEFINE HSER_CLROERR2 1 ' Clear overflow automatically
    to this:
    Code:
                DEFINE HSER2_CLROERR 1 ' Clear overflow automatically
    You'll definitely be getting overrun errors, so if they're not cleared properly it'll stop receiving.

    I'd also try some a LOT simpler to start with. I'd be amazed if those HSERIN2 commands in your main loop work reliably... one thing out of place and it'll likely take a long time to sync up again (if ever).

  13. #53
    Join Date
    Oct 2010
    Posts
    411


    Did you find this post helpful? Yes | No

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    Hi tumbleweed,

    that was the typo mistake really. Now it works. thanks a lot.

    I was stuck for a day! Now i can move forward to the next target.

    Really appreciate your help.

  14. #54
    Join Date
    Oct 2010
    Posts
    411


    Did you find this post helpful? Yes | No

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    Dear all,

    as for the last step, changing the baudrate of the GPS on the fly, the same time as the PIC chip it self on PORT EUART 2, i've notice that not all the time the configuration work.

    Sometimes the GPS doesn't get the command. I tried to see if i could get an ACK but couldn't see anything coming on RX.

    Base on the manufacturer datasheet there should be a reply message for every command we send. But really didn't see any reply.

    Is there anything i could do, to help the GPS to receive always the command and not "reject" it? Should i give more time at start up?

    I have already place the following commands on the code in order to check if the GPS has successfully powered up.

    Code:
    ' -----------------------------------------------------------------------------|  
    '                          [ GPS Initialization ]                              |
    '------------------------------------------------------------------------------| 
    ' When the GPS Module is POWERED ON, then the following sentenses are received.       
    HSERIN2 [wait("PMTK011,MTKGPS*08")]
    HSERIN2 [wait("PMTK010,001*2E")] 
    HSERIN2 [wait("PMTK010,002*2D")]
    Last edited by astanapane; - 15th July 2018 at 00:00.

  15. #55
    Join Date
    May 2013
    Location
    australia
    Posts
    2,383


    Did you find this post helpful? Yes | No

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    I'd be amazed if those HSERIN2 commands in your main loop work reliably
    I agree with tumbleweeds thought, increasing baud rate to 38k cuts the time available to process that streamed data to one quarter of what was available at 9600 baud . its asking for trouble .
    what possible advantage are you seeking with the higher baud rate ?
    there is great merit in sending data to the serial display as fast as possible but I have difficulty seeing any benefit in getting nmea data at higher speeds.

    now that you have a chip with adequate memory and horsepower why not use a buffer to store and process the sentences?
    Warning I'm not a teacher

  16. #56
    Join Date
    Oct 2010
    Posts
    411


    Did you find this post helpful? Yes | No

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    Quote Originally Posted by richard View Post
    I agree with tumbleweeds thought, increasing baud rate to 38k cuts the time available to process that streamed data to one quarter of what was available at 9600 baud . its asking for trouble .
    what possible advantage are you seeking with the higher baud rate ?
    there is great merit in sending data to the serial display as fast as possible but I have difficulty seeing any benefit in getting nmea data at higher speeds.

    now that you have a chip with adequate memory and horsepower why not use a buffer to store and process the sentences?
    Hi Richard, to be honest i dont know the way to store and process the sentences , but i will search for it and come back with some question. First i will try to understand the concept.

    Now at the moment i need to speed up the serial communication because i need to use to fastest refresh rate of NMEA data from GPS at 10Hz.

    As from the manufacturer and datasheet of the GPS, if you need to go at 5Hz or 10Hz then you need at least to speed up the GPS communication rate at 38400.

    The SERIN command inside the main look, do not have any issue. Only at the beginning of the initialization and changing the baudrate and refresh rate.

    Apart from that everything else works fine at that rate. At the end of the project which may not be able to complete, i will not use the GPS at 10Hz.

    Now i do some fancy test to see how fast the Speed on the Display can be refreshed. As you better understand than me, in order to achieve that, the GPS data must be at a very high rate and the serial communication as well. Actually is a simple speedometer.

    Thanks once again all of you for your time and effort to help me.

  17. #57
    Join Date
    Aug 2011
    Posts
    408


    Did you find this post helpful? Yes | No

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    Do you control power to the GPS?

    The sequence of what to do depends on who powers up first. You probably shouldn't assume that the mcu is powered up and initialized before the GPS. It would be good to know how long the GPS takes to powerup and start sending those initial strings.

    The sequence might look something like:

    - wait several seconds at powerup for the GPS to initialize
    leave the uart set for 9600 baud
    You'll likely miss any initial serial transmissions that the GPS sends you, but that's ok.

    - send a string to the GPS that you know the response for, and wait for that response with a timeout.
    The simpler the better... a single response that's easy to parse would work a lot better than a sequence of responses.
    loop doing this until you have sync with the GPS.

    - now you can switch to 38400

  18. #58
    Join Date
    Oct 2010
    Posts
    411


    Did you find this post helpful? Yes | No

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    Quote Originally Posted by tumbleweed View Post
    Do you control power to the GPS?

    The sequence of what to do depends on who powers up first. You probably shouldn't assume that the mcu is powered up and initialized before the GPS. It would be good to know how long the GPS takes to powerup and start sending those initial strings.

    The sequence might look something like:

    - wait several seconds at powerup for the GPS to initialize
    leave the uart set for 9600 baud
    You'll likely miss any initial serial transmissions that the GPS sends you, but that's ok.

    - send a string to the GPS that you know the response for, and wait for that response with a timeout.
    The simpler the better... a single response that's easy to parse would work a lot better than a sequence of responses.
    loop doing this until you have sync with the GPS.

    - now you can switch to 38400
    Hi tumbleweed,

    i think i could control the GPS module via Enable pin.

    The GPS based on the datasheet, powerup and start sending commands after the following PMTKs.

    Code:
    ' -----------------------------------------------------------------------------|  
    '                          [ GPS Initialization ]                              |
    '------------------------------------------------------------------------------| 
    ' When the GPS Module is POWERED ON, then the following sentenses are received.       
    HSERIN2 [wait("PMTK011,MTKGPS*08")]
    HSERIN2 [wait("PMTK010,001*2E")] 
    HSERIN2 [wait("PMTK010,002*2D")]
    I guess that by using the above code, i wait for each of this commands, and the program only continues if those PMKT sentences from GPS has been received and read. Is that right?

    May i use a timeout in there?

  19. #59
    Join Date
    Aug 2011
    Posts
    408


    Did you find this post helpful? Yes | No

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    i think i could control the GPS module via Enable pin.
    Does the Enable act like a reset? Do you have a link to the datasheet?

    Maybe you could keep the GPS disabled until the main uC powers up and is ready...

  20. #60
    Join Date
    Oct 2010
    Posts
    411


    Did you find this post helpful? Yes | No

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    Hmm i need to check that. For the datasheet the gps module is from the MKT with MK3339 chip in it.

    Datasheet is on the following Page on the Links mention PA6H
    https://www.adafruit.com/product/790

  21. #61
    Join Date
    Oct 2010
    Posts
    411


    Did you find this post helpful? Yes | No

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    Enable pin has only the MKT3333 chip, which i also have but i wont use at the moment the MK3333 chip.

    http://www.alphamicrowireless.com/me...asheet-v0e.pdf
    Last edited by astanapane; - 15th July 2018 at 19:15.

  22. #62
    Join Date
    Aug 2011
    Posts
    408


    Did you find this post helpful? Yes | No

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    Both of those have an NRESET input which is a low-active signal that will reset the module.
    Connect that to one of the pic's IO pins (as long as you're powering the pic at 3.3V).

    At startup, init the uart to 9600.
    Then set NRESET low, delay 1msec, and set it high. They don't have any timing specs for the NRESET input, but that should do it.

    After you get the initial sequence from the GPS then you can switch it to 38400.

  23. #63
    Join Date
    Oct 2010
    Posts
    411


    Did you find this post helpful? Yes | No

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    Quote Originally Posted by tumbleweed View Post
    Both of those have an NRESET input which is a low-active signal that will reset the module.
    Connect that to one of the pic's IO pins (as long as you're powering the pic at 3.3V).

    At startup, init the uart to 9600.
    Then set NRESET low, delay 1msec, and set it high. They don't have any timing specs for the NRESET input, but that should do it.

    After you get the initial sequence from the GPS then you can switch it to 38400.
    Thanks a lot, i'll do that tomorrow and i will post the result.

  24. #64
    Join Date
    Oct 2010
    Posts
    411


    Did you find this post helpful? Yes | No

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    I was checking the manual but at the same time the pcb board, which is an adafruit ultimate GPS. They do have an ENABLE pin but this is not coming from the GPS module but from the mic5225 3.3V legulator.

    So i guess that via EN pin on the regulator we can hold the pin to GND or LOW for a 1ms and will do the job. I think it will work. Thanks a lot once again.

    I would also like to thank you all, because i learn everyday more things step by step.

    Apologize for my limited knowlegde, i know that i cannot help you, and it is difficult for you to understand my questions in order to help me as well.

    Appreciate your patience.....

  25. #65
    Join Date
    Aug 2011
    Posts
    408


    Did you find this post helpful? Yes | No

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    The EN to the regulator should work as well, but since that will shut off power to the GPS you should make sure to set any IO pins that are outputs to the GPS to tri-state (ie inputs), or drive them low while you have the power off.

    For the UART TX output that means disabling the uart to get control of the IO pins.

    Also, you may need to pull EN low for longer than 1ms. When the regulator shuts off it'll probably take a while for the GPS 3.3V to drop.

  26. #66
    Join Date
    Oct 2010
    Posts
    411


    Did you find this post helpful? Yes | No

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    What i did, is to have all ports low, until the LCD is powered up. Then i set one of the PIC's port to high to enable the GPS's regulator.

    That's all and it works up to now fine. Should i leave the PIC's pin to high? Or should i add a transistor and use it as a switch to control the EN pin of the regulator? So setting the PIC's pin to high, close the transistor EC to GND, and the EN pin is set to 0. Then release the PIC pin to LOW, and the same time open the EC from the transistor, and enable the GPS.

    But with this method i will have one more component in my final circuit and couple of resistors at B and E.

    EDITED:....................

    I did make the portb.2 as an input after i powered up the GPS. It seems that works the same.

    Code:
    '------------------------------------------------------------------------------|
    '                      [ GPS HOLD ON RESET for a bit ]                         |
    '------------------------------------------------------------------------------|
    high portb.2     ' we set high the ENABLE pin at GPS                           |
    ' -----------------------------------------------------------------------------|  
    '                          [ GPS Initialization ]                              |
    '------------------------------------------------------------------------------| 
    ' When the GPS Module is POWERED ON, then the following sentenses are received.       
    HSERIN2 [wait("PMTK011,MTKGPS*08")]
    HSERIN2 [wait("PMTK010,001*2E")] 
    HSERIN2 [wait("PMTK010,002*2D")]
    
    HSEROUT [$73,$01,$03,$00,$ff,$ff,"GPS is ENABLED",$00] 
    Hserin  [wait(6)]
    pause 1500    
    HSEROUT [$45]    ' clear the LCD
    Hserin  [wait(6)]  
    
    '------------------------------------------------------------------------------|
    input portb.2  'release the pic's pin and the ENABLE pin of the GPS's regulator|
    '------------------------------------------------------------------------------|
    Last edited by astanapane; - 16th July 2018 at 20:17.

  27. #67
    Join Date
    Aug 2011
    Posts
    408


    Did you find this post helpful? Yes | No

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    Sorry, I should have explained better.

    The PIC IO pin is fine for driving the regulator ENable input... you shouldn't need any other circuitry. Set PORTB.2 as an output low to power off the GPS, and then set it high to turn on the GPS. Leave it as an output high, otherwise the regulator may shut itself off.

    However, when you have the GPS power off you must make sure that NONE of the PIC output pins that connect to the GPS are high, otherwise the GPS could get partially powered from those logic lines that are sourcing 3.3V.

    The UART TX output pin idles high once the UART is enabled (RCSTA2.SPEN, bit 7 = 1), which I think happens during initialization. With SPEN = 0 the uart TX and RX pins are under control of the ports.

  28. #68
    Join Date
    Oct 2010
    Posts
    411


    Did you find this post helpful? Yes | No

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    Quote Originally Posted by tumbleweed View Post
    Sorry, I should have explained better.

    The PIC IO pin is fine for driving the regulator ENable input... you shouldn't need any other circuitry. Set PORTB.2 as an output low to power off the GPS, and then set it high to turn on the GPS. Leave it as an output high, otherwise the regulator may shut itself off.

    However, when you have the GPS power off you must make sure that NONE of the PIC output pins that connect to the GPS are high, otherwise the GPS could get partially powered from those logic lines that are sourcing 3.3V.

    The UART TX output pin idles high once the UART is enabled (RCSTA2.SPEN, bit 7 = 1), which I think happens during initialization. With SPEN = 0 the uart TX and RX pins are under control of the ports.
    Now it is clear. I did it as you advised. Thank a lot.

  29. #69
    Join Date
    Oct 2010
    Posts
    411


    Did you find this post helpful? Yes | No

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    i havent post for some days now, because i have changed the Display from 1'44 to 3.2 and the old serial interface code from 1'44 to SPE as 4D Systems calls it.

    I have changed also the GPS and the firmware which is configured at 115200 bps. Still the code is very simple.

    Code:
    '**********************************************************************
    '*  Name    : 18F26K22.BAS                                            *
    '*  Author  : [Leonardo Bilalis]                                      *
    '*  Notice  : Copyright (c) 2018 [Leonardo Bilalis]                   *
    '*          : All Rights Reserved                                     *
    '*  Date    : 18/Jul/2018                                             *
    '*  Version : 1.0                                                     *
    '*  Notes   : This is a GPS Tracker based on the following components *
    '*          : PIC18F26K22 or PIC18F46K22 @ 64Mhz                      *
    '*          : MKT 3333 or 3339 GPS MODULE                             *
    '*          : 4D Systems ULCD Goldelox or Picasso Graphic Processor   *
    '********************************************************************** 
    
    '**********************************************************************
    '*                    AXN5.1.1_8524_3333_1152.1151100.1               *
    '**********************************************************************
        
    ' --------------------[ GPS Variables for NMEA sentenses ]---------------------/
    '                                                                             /
    '   $GPRMC,090045.000,A,3823.6645,N,02353.3600,E,0.02,195.80,170518,,,A*62   /
    '   $GNGGA,140405.000,3823.6010,N,02353.3054,E,1,9,0.88,0.8,M,35.9,M,,*40   /
    '   $GPGSA,A,3,18,08,10,11,14,27,22,32,01,,,,2.62,1.11,2.37*03             /
    '   $GPVTG,215.60,T,,M,0.44,N,0.82,K,A*37                                 /
    '                                                                        /
    '-----------------------------------------------------------------------/
    
    ' When the GPS Module is POWERED ON, then the following sentenses are received. 
    
    '          $PMTK011,MTKGPS*08
    '          $PMTK010,001*2E
    '          $PMTK010,002*2D
    
    
    '*********************************************************************************
    @ ERRORLEVEL -306 ; this command prevents the compiler to give you a notice of   *
                      ; crossing page boundary - make sure bits are set              *
    '********************************************************************************* 
     
      #CONFIG   ;  The PBP configuration for the PIC18F26K22 is:
    ;    CONFIG FOSC     = RCIO6	    ; External RC oscillator
         CONFIG FOSC     = HSHP	        ; HS oscillator (high power > 16 MHz)
         
    
    ;*---------------------------------4x PLL ENABLE--------------------------------------*|
    ;*  4X PLL Enable                                                                     *|
    ;*    CONFIG PLLCFG  = OFF	        ;Oscillator used directly                         *|
        CONFIG PLLCFG    = ON	        ;Oscillator multiplied by 4                       *|
    ;*------------------------------------------------------------------------------------*|
    ;
    ;  Primary clock enable bit
    ;    CONFIG PRICLKEN = OFF	        ;Primary clock can be disabled by software
        CONFIG PRICLKEN  = ON	        ;Primary clock enabled
    ;
    ;  Fail-Safe Clock Monitor Enable bit
        CONFIG FCMEN     = OFF	        ;Fail-Safe Clock Monitor disabled
    ;    CONFIG FCMEN    = ON	        ;Fail-Safe Clock Monitor enabled
    ;
    ;  Internal/External Oscillator Switchover bit
        CONFIG IESO      = OFF	        ;Oscillator Switchover mode disabled
    ;    CONFIG IESO     = ON	        ;Oscillator Switchover mode enabled
        
        CONFIG  BOREN    = SBORDIS      ; Brown-out Reset enabled in hardware only (SBOREN is disabled)
        
    ;*--------------------------------------------------------------------------------------------------------;|
        CONFIG  WDTEN    = ON           ; WDT is always enabled. SWDTEN bit has no effect                     ;|
        CONFIG  WDTPS    = 32768        ; 1:32768 ---> HERE enable the watchdog timer with a 1:32768 postscale;|
    ;*--------------------------------------------------------------------------------------------------------;|
        
        CONFIG  PWRTEN   = ON
        CONFIG  HFOFST   = ON           ; HFINTOSC output and ready status are not delayed by the oscillator stable status
        CONFIG  MCLRE    = EXTMCLR      ; MCLR pin enabled, RE3 input pin disabled
        CONFIG  LVP      = OFF          ; Single-Supply ICSP disabled
        CONFIG  XINST    = OFF          ; Instruction set extension and Indexed Addressing mode disabled (Legacy mode)
        CONFIG  DEBUG    = OFF          ; Disabled
    
    ;*----------------------------------------------------------------------------------|
    ;*---------------Available configuration settings for PIC18F26K22-------------------|
    ;*----------------------------------------------------------------------------------|
    ;
    ;  Oscillator Selection bits
    ;    CONFIG FOSC = RC	    ;111X External RC oscillator, CLKOUT function on RA6
    ;    CONFIG FOSC = ECLPIO6  ;EC oscillator (low power, <500 kHz)
    ;    CONFIG FOSC = ECLP	    ;EC oscillator, CLKOUT function on OSC2 (low power, <500 kHz)
    ;    CONFIG FOSC = ECMPIO6  ;EC oscillator (medium power, 500 kHz-16 MHz)
    ;    CONFIG FOSC = ECMP	    ;EC oscillator, CLKOUT function on OSC2 (medium power, 500 kHz-16 MHz)
    ;    CONFIG FOSC = INTIO7   ;Internal oscillator block, CLKOUT function on OSC2
    ;    CONFIG FOSC = INTIO67  ;Internal oscillator block
    ;    CONFIG FOSC = RCIO6    ;External RC oscillator
    ;    CONFIG FOSC = RC	    ;External RC oscillator, CLKOUT function on OSC2
    ;    CONFIG FOSC = ECHPIO6  ;EC oscillator (high power, >16 MHz)
    ;    CONFIG FOSC = ECHP	    ;EC oscillator, CLKOUT function on OSC2 (high power, >16 MHz)
    ;    CONFIG FOSC = HSMP	    ;HS oscillator (medium power 4-16 MHz)
    ;    CONFIG FOSC = HSHP	    ;HS oscillator (high power > 16 MHz)
    ;    CONFIG FOSC = XT	    ;XT oscillator
    ;    CONFIG FOSC = LP	    ;LP oscillator
        
    ;*--------------------------------------------------------------------------------------------------------|
    ;*                                  | -------------------------- |                                        |
    ;*  -----------------------------   |  [PROTECTED OPTION FUSES]  |  ------------------------------------  |
    ;*                                  | -------------------------- |                                        |
    ;*--------------------------------------------------------------------------------------------------------|
    
        CONFIG  CP0 = OFF             ; Block 0 (000800-003FFFh) not code-protected
        CONFIG  CP1 = OFF             ; Block 1 (004000-007FFFh) not code-protected
        CONFIG  CP2 = OFF             ; Block 2 (008000-00BFFFh) not code-protected
        CONFIG  CP3 = OFF             ; Block 3 (00C000-00FFFFh) not code-protected
        CONFIG  CPB = OFF             ; Boot block (000000-0007FFh) not code-protected
        CONFIG  CPD = OFF             ; Data EEPROM not code-protected
        CONFIG  WRT0 = OFF            ; Block 0 (000800-003FFFh) not write-protected
        CONFIG  WRT1 = OFF            ; Block 1 (004000-007FFFh) not write-protected
        CONFIG  WRT2 = OFF            ; Block 2 (008000-00BFFFh) not write-protected
        CONFIG  WRT3 = OFF            ; Block 3 (00C000-00FFFFh) not write-protected
        CONFIG  WRTC = OFF            ; Configuration registers (300000-3000FFh) not write-protected
        CONFIG  WRTB = OFF            ; Boot Block (000000-0007FFh) not write-protected
        CONFIG  WRTD = OFF            ; Data EEPROM not write-protected
        CONFIG  EBTR0 = OFF           ; Block 0 (000800-003FFFh) not protected from table reads executed in other blocks
        CONFIG  EBTR1 = OFF           ; Block 1 (004000-007FFFh) not protected from table reads executed in other blocks
        CONFIG  EBTR2 = OFF           ; Block 2 (008000-00BFFFh) not protected from table reads executed in other blocks
        CONFIG  EBTR3 = OFF           ; Block 3 (00C000-00FFFFh) not protected from table reads executed in other blocks
        CONFIG  EBTRB = OFF           ; Boot Block (000000-0007FFh) not protected from table reads executed in other blocks
    
      #ENDCONFIG
      
    ;*---------------------------------------------------------------------------------------------------------|
    ;*---------------------------------------------------------------------------------------------------------|
    
    define  OSC 64
    
            INCLUDE "modedefs.bas"
            INCLUDE"ALLDIGITAL.pbp"
    
    OSCCON    = %01110000   ; 64Mhz
    OSCTUNE.6 = 1           ; Enable 4x PLL
    
    while ! osccon2.7 :WEND ; to make sure the pll has stabilised before you run any other code
    
    
    '------------------------------------------------------------------------------|
    '                            INITIALIZE RAM                                    |
    '------------------------------------------------------------------------------|
    initialize:
    	CLEAR                   
    	
    '-------------------------------------------------------------------------------------------------------------------------------------------------------------
    
    TRISA = %00000000   'use TRISA to specify which pin is (1 = input) and which (0 = output)  (ALL pins are output)
    TRISB = %10000000   'use TRISB to specify which pin is (1 = input) and which (0 = output)  (RB7 PORTB.7 is the RX input pin of the EUART, the rest are output)
    TRISC = %00000000   'use TRISC to specify which pin is (1 = input) and which (0 = output)  (RC7 PORTC.7 is the RX input pin of the EUART, the rest are output)
                        'in PORTC the RC3 attached is an LED. 
    
    '------------------------------------------------------------------------|
    '--------------------------- TRIS A B C ---------------------------------|
    '------------------------------------------------------------------------|
    ' PORTA.7  PORTA.6  PORTA.5  PORTA.4  PORTA.3  PORTA.2  PORTA.1  PORTA.0 |
    '  bit7     bit6     bit5     bit4     bit3     bit2     bit1     bit0   |
    '   0        0        0        0        0        0        0        0     |
    '------------------------------------------------------------------------|
    '------------------------------------------------------------------------|
    ' PORTB.7  PORTB.6  PORTB.5  PORTB.4  PORTB.3  PORTB.2  PORTB.1  PORTB.0 |
    '  bit7     bit6     bit5     bit4     bit3     bit2     bit1     bit0   |
    '   1        0        0        0        0        0        0        0     |
    '------------------------------------------------------------------------|
    '------------------------------------------------------------------------|
    ' PORTC.7  PORTC.6  PORTC.5  PORTC.4  PORTC.3  PORTC.2  PORTC.1  PORTC.0 |
    '  bit7     bit6     bit5     bit4     bit3     bit2     bit1     bit0   |
    '   1        0        0        0        0        0        0        0     |
    '------------------------------------------------------------------------|
    
    '------------------------------------------------------------------------|
    '----------------------- At start all PORTS LOW -------------------------|
    '------------------------------------------------------------------------|
    PORTA = 0            'make low all ports at A range                      |
    PORTB = 0            'make low all ports at B range                      |
    PORTC = 0            'make low all ports at C range                      |
    PORTE = 0            'make low all ports at E range                      |
    '------------------------------------------------------------------------|
    
    '------------------------------------------------------------------------|
    '-------------------------- COMPARATORS OFF -----------------------------|
    '------------------------------------------------------------------------|
    CM1CON0.7 = 0 'Disable comparator1                                       |
    CM2CON0.7 = 0 'Disable comparator2                                       |
    '------------------------------------------------------------------------|
    
    '*-----------------------------------------------------------------------------|
    '*                        | --------------------- |                            |
    '*----------------------- | EUART 1 Configuration | ---------------------------|
    '*                        | --------------------- |                            |
    '*-----------------------------------------------------------------------------|
    
    
            'RCSTA = $90 ' Enable serial port & continuous receive
            'TXSTA = $24 ' Enable transmit, BRGH = 1
            'DEFINE HSER_CLROERR 1 ' Clear overflow automatically
            'SPBRG = 130 ' 9600 Baud @ 64MHz, -0,02%
            'SPBRGH = 6
            'BAUDCON.3 = 1         ' Enable 16 bit baudrate generator
            'BAUDCON.5 = 1 
            'BAUDCON = %10001000
    
            DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
            DEFINE HSER_TXSTA 24h ' Enable transmit, BRGH = 1
            DEFINE HSER_CLROERR 1 ' Clear overflow automatically
            DEFINE HSER_SPBRG 138 ' 115200 Baud @ 64MHz, -0,08%
            SPBRGH = 0
            BAUDCON.3 = 1         ' Enable 16 bit baudrate generator
    
                   
    '*-----------------------------------------------------------------------------|
    '*                        | --------------------- |                            |
    '*----------------------- | EUART 2 Configuration | ---------------------------|
    '*                        | --------------------- |                            |
    '*-----------------------------------------------------------------------------|
    
            DEFINE HSER2_RCSTA 90h ' Enable serial port & continuous receive
            DEFINE HSER2_TXSTA 24h ' Enable transmit, BRGH = 1
            DEFINE HSER2_CLROERR 1 ' Clear overflow automatically
            DEFINE HSER2_SPBRG 160 ' 38400 Baud @ 64MHz, -0,08%
            SPBRGH2 = 1
            BAUDCON2.3 = 1         ' Enable 16 bit baudrate generator
    
    '*-----------------------------------------------------------------------------|
    '*-----------------------------------------------------------------------------|
    
    PWRLED      var     PORTA.0 ' indicates that PIC is working on port C.4
    
    
    
    '------------------------------------------------------------------------------|
    '                              FONTS FROM THE uSD                              |
    '------------------------------------------------------------------------------|
    'file_LoadImageControl[0009 "FONTST~2.d01" "FONTST~2.g01" 0001] 0,033 (ACK 5148 0x141C)
    'file_LoadImageControl[0009 "FONTST~2.d02" "FONTST~2.g02" 0001] 0,038 (ACK 4845 0x12ED)
    'file_LoadImageControl[0009 "FONTST~2.d03" "FONTST~2.g03" 0001] 0,037 (ACK 4542 0x11BE)
    'file_LoadImageControl[0009 "FONTST~2.d04" "FONTST~2.g04" 0001] 0,039 (ACK 4239 0x108F)
    'file_LoadImageControl[0009 "FONTST~2.d05" "FONTST~2.g05" 0001] 0,042 (ACK 3936 0x0F60)
    'file_LoadImageControl[0009 "FONTST~2.d06" "FONTST~2.g06" 0001] 0,038 (ACK 3633 0x0E31)
    'file_LoadImageControl[0009 "FONTST~2.d07" "FONTST~2.g07" 0001] 0,040 (ACK 3330 0x0D02)
    'file_LoadImageControl[0009 "FONTST~2.d08" "FONTST~2.g08" 0001] 0,045 (ACK 3027 0x0BD3)
    
    ' -----------------------------------------------------------------------------|  
    '                          [ LCD Initialization ]                              |
    '------------------------------------------------------------------------------|
              ' FIRST TIME BOOTUP: We give plenty of time for tbe LCD '
    
    pause 3000
    high pwrled
    
    HSerout2[$FF,$9E,$00,$01] 'SPE serial graphic interface -SET THE LANDSCAPE R
    Hserin2 [wait(6)]
    HSEROUT2 [$FF,$03] ' MOUNT FILE, this is very imporntat command in here. 
    Hserin2 [wait(6)]
    'HSEROUT2[$00,$09,"FONTST~2.d07","FONTST~2.g07",$00,$01] ' SPE serial graphic interface - CALL FONT from SD
    'Hserin2 [wait(6)]
    
    HSEROUT2 [$FF,$00,$00,$46]  ' SOUND VOLUME to 70
    Hserin2 [wait(6)]
    Pause 100
    
    HSEROUT2[$FF,$E5,$00,$02] ' SPE serial graphic interface - SET FONT
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E7,$07,$7F] ' SPE serial graphic interface - SET COLOR (CYAN)
    Hserin2 [wait(6)] 
    HSEROUT2[$FF,$E4,$00,$02] 'SPE serial graphic interface - SET WIDTH of the text
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E3,$00,$02] ' SPE serial graphic interface - SET HEIGHT of the text
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E9,$00,$01,$00,$02] ' SPE serial graphic interface - SET Y,X position
    Hserin2 [wait(6)]
    HSEROUT2 [$00,$0B,"LASER2.WAV",$00]
    Hserin2 [wait(6)]
    pause 100
    hserout2[$00,$18,"Leonardo Bilalis",$00] 'SPE serial graphic interface - PUT STRING
    Hserin2 [wait(6)] 
    HSEROUT2[$FF,$E7,$F8,$00] ' SPE serial graphic interface - SET COLOR (RED)
    Hserin2 [wait(6)]  
    HSEROUT2[$FF,$E9,$00,$03,$00,$03] ' SPE serial graphic interface - SET Y,X position
    Hserin2 [wait(6)] 
    HSEROUT2 [$00,$0B,"LASER2.WAV",$00]
    Hserin2 [wait(6)]
    pause 100
    hserout2[$00,$18,"Copyright 2018",$00] 'SPE serial graphic interface - PUT STRING
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E9,$00,$05,$00,$05] ' SPE serial graphic interface - SET Y,X position
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E7,$FF,$E0] ' SPE serial graphic interface - SET COLOR (YELLOW)
    Hserin2 [wait(6)]
    HSEROUT2 [$00,$0B,"LASER2.WAV",$00]
    Hserin2 [wait(6)]
    pause 100
    hserout2[$00,$18,"GPS SYSTEM",$00] 'SPE serial graphic interface - PUT STRING
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E9,$00,$07,$00,$03] ' SPE serial graphic interface - SET Y,X position
    Hserin2 [wait(6)] 
    HSEROUT2[$FF,$E5,$00,$02] ' SPE serial graphic interface - SET FONT
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E4,$00,$01] 'SPE serial graphic interface - SET WIDTH of the text
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E3,$00,$01] ' SPE serial graphic interface - SET HEIGHT of the text
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E7,$07,$E0] ' SPE serial graphic interface - SET COLOR (LIME)
    Hserin2 [wait(6)]
    hserout2[$00,$18,"G",$00] 'SPE serial graphic interface - PUT STRING
    Hserin2 [wait(6)]
    HSEROUT2 [$00,$0B,"SOUND.WAV",$00]
    'HSEROUT2 [$00,$0B,"LASER2.WAV",$00]
    Hserin2 [wait(6)] 
    hserout2[$00,$18,"P",$00] 'SPE serial graphic interface - PUT STRING
    Hserin2 [wait(6)]
    HSEROUT2 [$00,$0B,"SOUND.WAV",$00]
    'HSEROUT2 [$00,$0B,"LASER2.WAV",$00]
    Hserin2 [wait(6)] 
    hserout2[$00,$18,"S",$00] 'SPE serial graphic interface - PUT STRING
    Hserin2 [wait(6)]
    HSEROUT2 [$00,$0B,"SOUND.WAV",$00]
    'HSEROUT2 [$00,$0B,"LASER2.WAV",$00]
    Hserin2 [wait(6)] 
    hserout2[$00,$18," M",$00] 'SPE serial graphic interface - PUT STRING
    Hserin2 [wait(6)]
    HSEROUT2 [$00,$0B,"SOUND.WAV",$00]
    'HSEROUT2 [$00,$0B,"LASER2.WAV",$00]
    Hserin2 [wait(6)] 
    hserout2[$00,$18,"K",$00] 'SPE serial graphic interface - PUT STRING
    Hserin2 [wait(6)]
    HSEROUT2 [$00,$0B,"SOUND.WAV",$00]
    'HSEROUT2 [$00,$0B,"LASER2.WAV",$00]
    Hserin2 [wait(6)] 
    hserout2[$00,$18,"T",$00] 'SPE serial graphic interface - PUT STRING
    Hserin2 [wait(6)]
    HSEROUT2 [$00,$0B,"SOUND.WAV",$00]
    'HSEROUT2 [$00,$0B,"LASER2.WAV",$00]
    Hserin2 [wait(6)] 
    hserout2[$00,$18," 3",$00] 'SPE serial graphic interface - PUT STRING
    Hserin2 [wait(6)]
    HSEROUT2 [$00,$0B,"SOUND.WAV",$00]
    'HSEROUT2 [$00,$0B,"LASER2.WAV",$00]
    Hserin2 [wait(6)] 
    hserout2[$00,$18,"3",$00] 'SPE serial graphic interface - PUT STRING
    Hserin2 [wait(6)]
    HSEROUT2 [$00,$0B,"SOUND.WAV",$00]
    'HSEROUT2 [$00,$0B,"LASER2.WAV",$00]
    Hserin2 [wait(6)] 
    hserout2[$00,$18,"3",$00] 'SPE serial graphic interface - PUT STRING
    Hserin2 [wait(6)]
    HSEROUT2 [$00,$0B,"SOUND.WAV",$00]
    'HSEROUT2 [$00,$0B,"LASER2.WAV",$00]
    Hserin2 [wait(6)] 
    hserout2[$00,$18,"9",$00] 'SPE serial graphic interface - PUT STRING
    Hserin2 [wait(6)]
    HSEROUT2 [$00,$0B,"SOUND.WAV",$00]
    'HSEROUT2 [$00,$0B,"LASER2.WAV",$00]
    Hserin2 [wait(6)] 
    hserout2[$00,$18," a",$00] 'SPE serial graphic interface - PUT STRING
    Hserin2 [wait(6)]
    HSEROUT2 [$00,$0B,"SOUND.WAV",$00]
    'HSEROUT2 [$00,$0B,"LASER2.WAV",$00]
    Hserin2 [wait(6)] 
    hserout2[$00,$18,"n",$00] 'SPE serial graphic interface - PUT STRING
    Hserin2 [wait(6)]
    HSEROUT2 [$00,$0B,"SOUND.WAV",$00]
    'HSEROUT2 [$00,$0B,"LASER2.WAV",$00]
    Hserin2 [wait(6)] 
    hserout2[$00,$18,"d",$00] 'SPE serial graphic interface - PUT STRING
    Hserin2 [wait(6)]
    HSEROUT2 [$00,$0B,"SOUND.WAV",$00]
    'HSEROUT2 [$00,$0B,"LASER2.WAV",$00]
    Hserin2 [wait(6)] 
    hserout2[$00,$18," P",$00] 'SPE serial graphic interface - PUT STRING
    Hserin2 [wait(6)]
    HSEROUT2 [$00,$0B,"SOUND.WAV",$00]
    'HSEROUT2 [$00,$0B,"LASER2.WAV",$00]
    Hserin2 [wait(6)] 
    hserout2[$00,$18,"I",$00] 'SPE serial graphic interface - PUT STRING
    Hserin2 [wait(6)]
    HSEROUT2 [$00,$0B,"SOUND.WAV",$00]
    'HSEROUT2 [$00,$0B,"LASER2.WAV",$00]
    Hserin2 [wait(6)] 
    hserout2[$00,$18,"C",$00] 'SPE serial graphic interface - PUT STRING
    Hserin2 [wait(6)]
    HSEROUT2 [$00,$0B,"SOUND.WAV",$00]
    'HSEROUT2 [$00,$0B,"LASER2.WAV",$00]
    Hserin2 [wait(6)] 
    hserout2[$00,$18,"1",$00] 'SPE serial graphic interface - PUT STRING
    Hserin2 [wait(6)]
    HSEROUT2 [$00,$0B,"SOUND.WAV",$00]
    'HSEROUT2 [$00,$0B,"LASER2.WAV",$00]
    Hserin2 [wait(6)] 
    hserout2[$00,$18,"8",$00] 'SPE serial graphic interface - PUT STRING
    Hserin2 [wait(6)]
    HSEROUT2 [$00,$0B,"SOUND.WAV",$00]
    'HSEROUT2 [$00,$0B,"LASER2.WAV",$00]
    Hserin2 [wait(6)] 
    hserout2[$00,$18,"F",$00] 'SPE serial graphic interface - PUT STRING
    Hserin2 [wait(6)]
    HSEROUT2 [$00,$0B,"SOUND.WAV",$00]
    'HSEROUT2 [$00,$0B,"LASER2.WAV",$00]
    Hserin2 [wait(6)] 
    hserout2[$00,$18,"2",$00] 'SPE serial graphic interface - PUT STRING
    Hserin2 [wait(6)]
    HSEROUT2 [$00,$0B,"SOUND.WAV",$00]
    'HSEROUT2 [$00,$0B,"LASER2.WAV",$00]
    Hserin2 [wait(6)] 
    hserout2[$00,$18,"6",$00] 'SPE serial graphic interface - PUT STRING
    Hserin2 [wait(6)]
    HSEROUT2 [$00,$0B,"SOUND.WAV",$00]
    'HSEROUT2 [$00,$0B,"LASER2.WAV",$00]
    Hserin2 [wait(6)] 
    hserout2[$00,$18,"K",$00] 'SPE serial graphic interface - PUT STRING
    Hserin2 [wait(6)]
    HSEROUT2 [$00,$0B,"SOUND.WAV",$00]
    'HSEROUT2 [$00,$0B,"LASER2.WAV",$00]
    Hserin2 [wait(6)] 
    hserout2[$00,$18,"2",$00] 'SPE serial graphic interface - PUT STRING
    Hserin2 [wait(6)]
    HSEROUT2 [$00,$0B,"SOUND.WAV",$00]
    'HSEROUT2 [$00,$0B,"LASER2.WAV",$00]
    Hserin2 [wait(6)] 
    hserout2[$00,$18,"2",$00] 'SPE serial graphic interface - PUT STRING
    Hserin2 [wait(6)]
    pause 3000
    HSEROUT2 [$FF,$CD]    ' clear the LCD
    Hserin2  [wait(6)]        
    
    
    '------------------------------------------------------------------------------|
    '                      [ GPS HOLD ON RESET for a bit ]                         |
    '------------------------------------------------------------------------------|
    high portc.3     ' we set high the ENABLE pin at GPS                           |
    
    HSEROUT2[$FF,$E5,$00,$02] ' SPE serial graphic interface - SET FONT
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E7,$07,$E0] ' SPE serial graphic interface - SET COLOR (LIME)
    Hserin2 [wait(6)] 
    'HSEROUT2[$FF,$DE,$00,$01] ' SPE serial graphic interface - SETO BOLD
    HSEROUT2[$FF,$E4,$00,$02] 'SPE serial graphic interface - SET WIDTH of the text
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E3,$00,$02] ' SPE serial graphic interface - SET HEIGHT of the text
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E9,$00,$01,$00,$00] ' SPE serial graphic interface - SET Y,X position
    Hserin2 [wait(6)]
    hserout2[$00,$18,"Powering up the GPS",$00] 'SPE serial graphic interface - PUT STRING
    Hserin2 [wait(6)]
    
    ' -----------------------------------------------------------------------------|  
    '                          [ GPS Initialization ]                              |
    '------------------------------------------------------------------------------|
    ' When the GPS Module is POWERED ON, then the following sentenses are received.       
    HSERIN [wait("PMTK011,MTKGPS*08")]
    HSERIN [wait("PMTK010,001*2E")] 
    HSERIN [wait("PMTK010,002*2D")]
    HSEROUT2[$FF,$E9,$00,$03,$00,$03] ' SPE serial graphic interface - SET Y,X position
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E7,$F8,$00] ' SPE serial graphic interface - SET COLOR (RED)
    Hserin2 [wait(6)] 
    HSEROUT2 [$00,$18,"GPS is ENABLED",$00] 
    Hserin2  [wait(6)]
    pause 1500      
    '------------------------------------------------------------------------------|
    '                        Changing Baudrate and Frequency                       |
    '------------------------------------------------------------------------------|  
    HSEROUT ["$PMTK314,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0*28",13,10]
    'HSEROUT["$PMTK314,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0*29",13,10]    ' ZDA ONLY
    pause 100
    
    HSEROUT2[$FF,$E5,$00,$02] ' SPE serial graphic interface - SET FONT
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E4,$00,$01] 'SPE serial graphic interface - SET WIDTH of the text
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E3,$00,$01] ' SPE serial graphic interface - SET HEIGHT of the text
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E7,$FF,$FF] ' SPE serial graphic interface - SET COLOR (WHITE)
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E9,$00,$0C,$00,$02] ' SPE serial graphic interface - SET Y,X position
    Hserin2 [wait(6)]
    hserout2[$00,$18,"NMEA:",$00]
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E9,$00,$0F,$00,$01] ' SPE serial graphic interface - SET Y,X position
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E7,$07,$7F] ' SPE serial graphic interface - SET COLOR (CYAN)
    Hserin2 [wait(6)] 
    hserout2[$00,$18,"RMC+VTG",$00]
    Hserin2 [wait(6)]
    
    
    'HSEROUT["$PMTK251,38400*27",13,10]      ' 38400 boundrate, check MTK manual configuration
    'pause 100
    
    'HSEROUT2[$FF,$E9,$00,$0C,$00,$0F] ' SPE serial graphic interface - SET Y,X position
    'Hserin2 [wait(6)]
    'HSEROUT2[$FF,$E7,$FF,$FF] ' SPE serial graphic interface - SET COLOR (WHITE)
    'Hserin2 [wait(6)]
    'hserout2[$00,$18,"Baudrate:",$00] 
    'Hserin2 [wait(6)]
    'HSEROUT2[$FF,$E9,$00,$0F,$00,$0F] ' SPE serial graphic interface - SET Y,X position
    'Hserin2 [wait(6)]
    'HSEROUT2[$FF,$E7,$07,$7F] ' SPE serial graphic interface - SET COLOR (CYAN)
    'Hserin2 [wait(6)] 
    'hserout2[$00,$18,"38400 bps",$00] 
    'Hserin2 [wait(6)]
    
    'SPBRG = 160 ' 38400 Baud @ 64MHz, -0,08%
    'SPBRG2 = 21  ' 57600 Baud @ 64MHz, -0,08%
    'SPBRG2 = 138 ' 115200 Baud @ 64MHz, -0,08%
    'SPBRGH = 1
    
    HSEROUt["$PMTK220,100*2F",13,10]        ' 100(millisecond)=0.1(sec)-->1/0.1= 10Hz   
    pause 100
    
    HSEROUT2[$FF,$E9,$00,$0C,$00,$1B] ' SPE serial graphic interface - SET Y,X position
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E7,$FF,$FF] ' SPE serial graphic interface - SET COLOR (WHITE)
    Hserin2 [wait(6)]
    hserout2 [$00,$18,"Refresh Rate:",$00]
    Hserin2  [wait(6)]
    HSEROUT2[$FF,$E9,$00,$0F,$00,$20] ' SPE serial graphic interface - SET Y,X position
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E7,$07,$7F] ' SPE serial graphic interface - SET COLOR (CYAN)
    Hserin2 [wait(6)] 
    hserout2 [$00,$18,"10Hz",$00]
    Hserin2  [wait(6)]
    
    
    pause 3000
    
    HSEROUT2 [$FF,$CD]  ' clears the LCD 
    Hserin2  [wait(6)]
    '*-----------------------------------------------------------------------------|
    timeout     con     2000
    hh          var     byte    'hours
    mm          var     byte    'minutes
    ss          var     byte    'seconds  
    sss         var     word    'milisecs
    degrees		VAR     BYTE	'latitude/longitude degrees
    minutes		VAR		BYTE	'latitude/Longitude minutes
    minutesD	VAR		word	'latitude/LONGITUDE DECIMAL MINUTES
    dir       	VAR     BYTE   	'direction (latitude: 0 = N, 1 = S / longitude: 0 = E, 1 = W)
    degrees2	VAR     BYTE	'latitude/longitude degrees
    minutes2	VAR		BYTE	'latitude/Longitude minutes
    minutesD2	VAR		word	'latitude/LONGITUDE DECIMAL MINUTES
    dir2        var     byte    'direction (latitude: 0 = N, 1 = S / longitude: 0 = E, 1 = W)
    SatNo   	VAR		BYTE	'number of satellites connected
    day         var     byte    'day
    month       var     byte    'month
    year        var     byte    'year
    SPEED       var     word    'speed with conversion ASCII to dec -48
    Km          var     byte    'this is a letter K --> KM/H om the GPVTG sentence 
    TS          var     byte[4] 'TOTAL SPEED. we create an array to combine each possible character for speed
    decimal     var     byte
    i           var     word    'we use this for Total speed point
    FIX         var     byte    'fix sat V/A
    Modefix     var     byte    'mode fix 1 or 2 or 3 depens
    Day_added   var     byte
    Numofdays   var     byte    'these are the days of each months
    LeapYear    var     byte    'this is a year leap
    ndays       var     byte[13]'create an array with 13 byte location for Months values
    mode2d3d    var     byte
    
    RED         var     PORTA.3
    GREEN       var     PORTA.2
    BLUE        VAR     PORTA.1
    
    
    '--------------------------------------------------------------------------------|
    '                                                                                |
    ' ----------------------------    [ MAIN ]   ----------------------------------- |
    '                                                                                |
    '--------------------------------------------------------------------------------|
    
    Main:
    
    '-------------------------------------------------------------------------------/
    '                                                                              /
    '                    [ Example NMEA Sentense of GNRMC ]                       /
    ' [$GNRMC,090045.000,A,3823.6645,N,02353.3600,E,0.02,195.80,170518,,,A*62]   /
    '                                                                           /
    '--------------------------------------------------------------------------/
    ;serin2  gps_tx,84,timeout,lostcable,[wait("$GNRMC"),_          ;we wait for $GNRMC
    HSERIN timeout,lostcable,[wait("$GNRMC"),_           ;we wait for $GPRMC
    wait(","),dec2 hh,dec2 mm,dec2 ss,wait("."),dec3 sss,_          ;we wait for 090045.000 which is the time when we got the info
    wait(","),fix,_                                                 ;we wait for A
    wait(","),dec2 degrees,dec2 minutes,wait("."),dec4 minutesd,_   ;we wait for 3823.6645
    wait(","),dir,_                                                 ;we wait for N/S ;wait(","),dec3 degrees2,dec2 minutes2,wait("."),dec4 minutesd2,_;we wait for 02353.3600
    wait(","),dec3 degrees2,dec2 minutes2,wait("."),dec4 minutesd2,_;we wait for 02353.3600
    wait(","),dir2,_                                                ;we wait for E/W
    wait(","),wait(","),_                                               
    wait(","),dec2 day,dec2 month,dec2 year,_                       ;we wait for 170518
    wait(","),SKIP 3]
    
    '------------------------------------------------------------------------------/
    '                                                                             /
    '                     [ Example NMEA Sentense of GNGGA ]                     /
    ' [$GNGGA,140405.000,3823.6010,N,02353.3054,E,1,9,0.88,0.8,M,35.9,M,,*40    /           
    '                                                                          /
    '-------------------------------------------------------------------------/
    'serin2 gps_tx,84,timeout,lostcable,[wait("$GNGGA"),_            ;we wait for GNGGA
    HSERIN timeout,lostcable,[wait("$GNGGA"),_            ;we wait for GPGGA
    wait(","),skip 41,_
    wait(","),dec2 satno,_
    wait(","),skip 19]
    
    'wait(","),modefix,_        ;we wait for modefix 1,2 or 3 check gps manual for NMEA
    '------------------------------------------------------------------------------/
    '                                                                             /
    '                     [ Example NMEA Sentense of GPGSA ]                     /
    '          [$GPGSA,A,3,18,08,10,11,14,27,22,32,01,,,,2.62,1.11,2.37*03]     /           
    '                                                                          /
    '-------------------------------------------------------------------------/
    
    HSERIN timeout,lostcable,[wait("$GPGSA"),wait(","),wait(","),mode2d3d,wait(","),SKIP 50]  
    
    if fix = "V" then gps
    
    'serin2 gps_tx,84,timeout,lostcable,[wait("GNVTG"),_
    HSERIN timeout,lostcable,[wait("GNVTG"),wait("N"),_
    wait(","),TS[0],TS[1],TS[2],TS[3],TS[4],_
    wait(","),SKIP 3]
    
    for i = 1 to 3
        if TS[i]="." then decimal = i   'TOTAL SPEED. find which character is the decimal point at ulcd fort is the ":" 
        next i
    
    select case decimal 'if the gps shows 1.45 it may be 145
                        'for the conversion ASCII to number we can use the -48
        case    1       'decimal position is x.xx
            SPEED = (10*(TS[0]-48))+(TS[2]-48)
        case    2       'decimal position is xx.xx
            SPEED = (100*(TS[0]-48))+(10*(TS[1]-48))+(TS[3]-48)
        case    3       'decimal position is xxx.xx
            SPEED = (1000*(TS[0]-48))+(100*(TS[1]-48))+(10*(TS[2]-48))
        end select     
        
    gosub OVERSPEED
    '-----------------------------------------------------------------------------/
    '                   Here we start the calendar conversion                    /
    '---------------------------------------------------------------------------/
    
    arraywrite ndays,13,NDAY,[0,31,28,31,30,31,30,31,31,30,31,30,31]
    if ndays = 2 then
    if ((year//4 = 0) and (year//400 != 0)) then    'check the leap year
     ndays[2] = 29                                  'then February has 29 days
       else                                         
     ndays[2] = 28                                  'else has 28 days
     endif
        endif
     hh = hh + 3                                    'the Hour from GPS is UTC so for our country in Greece we add +3
     if hh>23 then                                  'if the hh+3 hour is greater than 23 (23:00) then
     day = day + 1                                  'we check the day added is true
     hh = hh//24                                    'but the hour not exceed the 24 so go to 00:00
        if (day > ndays[month]) then
     month = month + 1
     day = 1 
            if (month > 12) then
     year = year + 1
     month = 1
            endif
         endif
     endif
    
    '--------------------------------------------------------------------------/
    ' here is where the code dispays the stored info from the NMEA sentenses  /
    '------------------------------------------------------------------------/
    
    HSEROUT2[$FF,$E5,$00,$02] ' SPE serial graphic interface - SET FONT
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E7,$FF,$FF] ' SPE serial graphic interface - SET COLOR (WHITE)
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E4,$00,$02] 'SPE serial graphic interface - SET WIDTH of the text
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E3,$00,$02] ' SPE serial graphic interface - SET HEIGHT of the text
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E9,$00,$02,$00,$04] ' SPE serial graphic interface - SET Y,X position
    Hserin2 [wait(6)]
    HSEROUT2 [$00,$18,"GROUND SPEED",$00]
    Hserin2  [wait(6)]
    
    HSEROUT2[$FF,$E9,$00,$06,$00,$08] ' SPE serial graphic interface - SET Y,X position
    Hserin2 [wait(6)]
    HSEROUT2 [$00,$18,"Km/h",$00]
    Hserin2  [wait(6)]
    
    HSEROUT2[$FF,$E7,$07,$E0] ' SPE serial graphic interface - SET COLOR (LIME)
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E4,$00,$05] 'SPE serial graphic interface - SET WIDTH of the text
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E3,$00,$06] ' SPE serial graphic interface - SET HEIGHT of the text
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E9,$00,$01,$00,$02] ' SPE serial graphic interface - SET Y,X position
    Hserin2 [wait(6)]
    HSEROUT2 [$00,$18,TS[0],TS[1],TS[2],TS[3],$00]
    Hserin2  [wait(6)]
    
    HSEROUT2[$FF,$E5,$00,$02] ' SPE serial graphic interface - SET FONT
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E7,$FF,$E0] ' SPE serial graphic interface - SET COLOR (Yellow)
    Hserin2 [wait(6)] 
    HSEROUT2[$FF,$E4,$00,$02] 'SPE serial graphic interface - SET WIDTH of the text
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E3,$00,$02] ' SPE serial graphic interface - SET HEIGHT of the text
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E9,$00,$00,$00,$00] ' SPE serial graphic interface - SET Y,X position
    Hserin2 [wait(6)]
    HSEROUT2 [$00,$18,dec2 hh,":",dec2 mm,":",dec2 ss,$00]
    Hserin2  [wait(6)]
    
    HSEROUT2[$FF,$E7,$FF,$E0] ' SPE serial graphic interface - SET COLOR (Yellow)
    Hserin2 [wait(6)] 
    HSEROUT2[$FF,$E9,$00,$00,$00,$0C] ' SPE serial graphic interface - SET Y,X position
    Hserin2 [wait(6)]
    HSEROUT2 [$00,$18,dec2 day,"/",dec2 month,"/",dec2 year,$00]
    Hserin2  [wait(6)]
    
    
    HSEROUT2[$FF,$E7,$F8,$00] ' SPE serial graphic interface - SET COLOR (RED)
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E4,$00,$02] 'SPE serial graphic interface - SET WIDTH of the text
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E3,$00,$02] ' SPE serial graphic interface - SET HEIGHT of the text
    Hserin2 [wait(6)] 
    HSEROUT2[$FF,$E9,$00,$04,$00,$00] ' SPE serial graphic interface - SET Y,X position
    Hserin2 [wait(6)]
    HSEROUT2 [$00,$18,"Sats",$00] 
    Hserin2  timeout,lostcable,[wait(6)]
    
    HSEROUT2[$FF,$E7,$07,$FF] ' SPE serial graphic interface - SET COLOR (AQUA)
    Hserin2 [wait(6)] 
    HSEROUT2[$FF,$E9,$00,$05,$00,$01] ' SPE serial graphic interface - SET Y,X position
    Hserin2 [wait(6)]
    HSEROUT2 [$00,$18,dec2 satno,$00]
    Hserin2  timeout,lostcable,[wait(6)]
    
    HSEROUT2[$FF,$E7,$F8,$00] ' SPE serial graphic interface - SET COLOR (RED)
    Hserin2 [wait(6)] 
    HSEROUT2[$FF,$E9,$00,$04,$00,$11] ' SPE serial graphic interface - SET Y,X position
    Hserin2 [wait(6)]
    HSEROUT2 [$00,$18,"Fix",$00]
    Hserin2  timeout,lostcable,[wait(6)]
    
    HSEROUT2[$FF,$E7,$07,$FF] ' SPE serial graphic interface - SET COLOR (AQUA)
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E9,$00,$05,$00,$011] ' SPE serial graphic interface - SET Y,X position
    Hserin2 [wait(6)]
    HSEROUT2 [$00,$18,fix,mode2d3d,"D",$00]
    Hserin2  timeout,lostcable,[wait(6)]
    
    HSEROUT2[$FF,$E7,$F8,$00] ' SPE serial graphic interface - SET COLOR (RED)
    Hserin2 [wait(6)] 
    HSEROUT2[$FF,$E9,$00,$08,$00,$01] ' SPE serial graphic interface - SET Y,X position
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E4,$00,$02] 'SPE serial graphic interface - SET WIDTH of the text
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E3,$00,$02] ' SPE serial graphic interface - SET HEIGHT of the text
    Hserin2 [wait(6)]
    HSEROUT2[$00,$18,"Lat:",$00]
    Hserin2 timeout,lostcable,[wait(6)]
    HSEROUT2[$FF,$E7,$FF,$E0] ' SPE serial graphic interface - SET COLOR (Yellow)
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E9,$00,$08,$00,$06] ' SPE serial graphic interface - SET Y,X position
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E4,$00,$02] 'SPE serial graphic interface - SET WIDTH of the text
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E3,$00,$02] ' SPE serial graphic interface - SET HEIGHT of the text
    Hserin2 [wait(6)]
    HSEROUT2[$00,$18,dec2 degrees,"°",dec2 minutes,".",dec4 minutesd,"'"," ",$00]
    Hserin2 [wait(6)]
    
    HSEROUT2[$FF,$E7,$07,$E0] ' SPE serial graphic interface - SET COLOR (LIME)
    Hserin2 [wait(6)] 
    HSEROUT2[$FF,$E9,$00,$08,$00,$11] ' SPE serial graphic interface - SET Y,X position
    Hserin2 [wait(6)]
    HSEROUT2[$00,$18,dir,$00]
    Hserin2 [wait(6)] 
    
    
    HSEROUT2[$FF,$E7,$F8,$00] ' SPE serial graphic interface - SET COLOR (RED)
    Hserin2 [wait(6)] 
    HSEROUT2[$FF,$E9,$00,$09,$00,$01] ' SPE serial graphic interface - SET Y,X position
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E4,$00,$02] 'SPE serial graphic interface - SET WIDTH of the text
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E3,$00,$02] ' SPE serial graphic interface - SET HEIGHT of the text
    Hserin2 [wait(6)]
    HSEROUT2[$00,$18,"Lon:",$00]
    Hserin2 [wait(6)] 
    HSEROUT2[$FF,$E7,$FF,$E0] ' SPE serial graphic interface - SET COLOR (Yellow)
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E9,$00,$09,$00,$05] ' SPE serial graphic interface - SET Y,X position
    Hserin2 [wait(6)]              
    HSEROUT2[$00,$18,dec3 degrees2,"°",dec2 minutes2,".",dec4 minutesd2,"'"," ",$00]
    Hserin2 [wait(6)]
    
    HSEROUT2[$FF,$E7,$07,$FF] ' SPE serial graphic interface - SET COLOR (CYAN)
    Hserin2 [wait(6)] 
    HSEROUT2[$FF,$E9,$00,$09,$00,$11] ' SPE serial graphic interface - SET Y,X position
    Hserin2 [wait(6)]                
    HSEROUT2[$00,$18,dir2,$00]
    Hserin2 [wait(6)]
    
    
    goto main
    
    '-----------------------------------------------------------------------------/
    '                              [ SUB ROUTINES ]                              /
    '---------------------------------------------------------------------------/
    
    OVERSPEED: 
    
    if SPEED > 1000 then     ' 100Km/h
        high BLUE
        low  GREEN
        low  RED    
    else
        LOW BLUE
        
    if SPEED > 500 then     ' 50Km/h
        high GREEN
        low  RED    
    else
        LOW GREEN
        
    if SPEED > 100  then    ' 10Km/h
        high RED
    else
        LOW RED
    
    endif
        endif
            endif
        return
    
    GPS: 
    HSEROUT2 [$FF,$CD]    ' clear the LCD
    Hserin2  [wait(6)]
    
    hh = hh + 3
    hh = hh//24
    
    HSEROUT2[$FF,$E5,$00,$02] ' SPE serial graphic interface - SET FONT
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E7,$FF,$FF] ' SPE serial graphic interface - SET COLOR (WHITE)
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E4,$00,$02] 'SPE serial graphic interface - SET WIDTH of the text
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E3,$00,$02] ' SPE serial graphic interface - SET HEIGHT of the text
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E9,$00,$01,$00,$05] ' SPE serial graphic interface - SET Y,X position
    Hserin2 [wait(6)]
    HSEROUT2 [$00,$18,"PLEASE WAIT",$00]
    Hserin2  [wait(6)]
    
    HSEROUT2[$FF,$E9,$00,$04,$00,$09] ' SPE serial graphic interface - SET Y,X position
    Hserin2 [wait(6)]
    HSEROUT2 [$00,$18,"GPS",$00]
    Hserin2  [wait(6)]
    
    HSEROUT2[$FF,$E9,$00,$06,$00,$06] ' SPE serial graphic interface - SET Y,X position
    Hserin2 [wait(6)]
    HSEROUT2 [$00,$18,"NOT FIXED",$00]
    Hserin2  [wait(6)]
    pause 3000
    
    HSEROUT2 [$FF,$CD]    ' clear the LCD
    Hserin2  [wait(6)]
    
    goto main      'returns to main  
    
    '-----------------------------------------------------------------------------/
    '                 [ Connection lost Please check the GPS ]                   /
    '---------------------------------------------------------------------------/
    
    lostcable: 
    
    HSEROUT2 [$FF,$CD]    ' clear the LCD
    Hserin2  [wait(6)]
    
    
    HSEROUT2[$FF,$E5,$00,$02] ' SPE serial graphic interface - SET FONT
    Hserin2 [wait(6)]
    
    HSEROUT2[$FF,$E4,$00,$02] 'SPE serial graphic interface - SET WIDTH of the text
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E3,$00,$02] ' SPE serial graphic interface - SET HEIGHT of the text
    Hserin2 [wait(6)]
    
    HSEROUT2[$FF,$E9,$00,$02,$00,$02] ' SPE serial graphic interface - SET Y,X position
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E7,$F8,$00] ' SPE serial graphic interface - SET COLOR (RED)
    Hserin2 [wait(6)]
    HSEROUT2 [$00,$18,"Connection lost",$00]
    Hserin2  timeout,lostcable,[wait(6)]
    
    HSEROUT2[$FF,$E9,$00,$04,$00,$01] ' SPE serial graphic interface - SET Y,X position
    Hserin2 [wait(6)]
    HSEROUT2[$FF,$E7,$FF,$E0] ' SPE serial graphic interface - SET COLOR (YELLOW)
    Hserin2 [wait(6)]
    HSEROUT2 [$00,$18,"Please check cable",$00]
    Hserin2  timeout,lostcable,[wait(6)]
    
    pause 2000
    
    HSEROUT2 [$FF,$CD]    ' clear the LCD
    Hserin2  [wait(6)]
    
    goto main
    
    '-----------------------------------------------------------------------------/
    '                         [ Calendar days in Months ]                        /
    '---------------------------------------------------------------------------/
    NDAY:
    ndays[0] = 0
    ndays[1] = 31       'January
    ndays[2] = 28       'February
    ndays[3] = 31       'March
    ndays[4] = 30       'April
    ndays[5] = 31       'May
    ndays[6] = 30       'June
    ndays[7] = 31       'July
    ndays[8] = 31       'August
    ndays[9] = 30       'September
    ndays[10] = 31      'October
    ndays[11] = 30      'November
    ndays[12] = 31      'December
    Last edited by astanapane; - 25th July 2018 at 08:36.

Similar Threads

  1. PIC18F46K22 config issue
    By LGabrielson in forum mel PIC BASIC Pro
    Replies: 2
    Last Post: - 29th September 2012, 04:20
  2. Replies: 1
    Last Post: - 27th July 2008, 07:14
  3. Pic GPS project Demo
    By Art in forum GPS
    Replies: 0
    Last Post: - 28th October 2007, 04:05
  4. GPS project question
    By mjp130 in forum GPS
    Replies: 6
    Last Post: - 4th July 2007, 21:09
  5. gps project
    By chuckad in forum GPS
    Replies: 2
    Last Post: - 9th February 2007, 03:52

Members who have read this thread : 4

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts