+ Reply to Thread
Page 1 of 2 12 LastLast
Results 1 to 40 of 69
  1. #1

    Talking GPS Project: PIC18F26K22 or PIC18F46K22

    Dear all, i open a separate thread from this one http://www.picbasic.co.uk/forum/show...t=19080&page=2 as far as i made a mistake continuing in there. I need to apologize for that.

    I have opened it under PBP3, because a friend has a PBP3 in his laptop, i still have an older version but i'm planning to purchase the PBP3 soon.

    If an admin would like to move all the post from #66 and then, please do so in here. thanks a lot.

    Now as long as the PIC16F88, is limited to what i need to do for the project i have placed an order for the following PICs.

    1. PIC18F26K22
    2. PIC18F46K22

    I know that it will be difficult to understand the fuses but i would like to read and learn if you also help me. As i have told in the past im not a programmer so the code i have done up to now with your help it may reached my limits. I keep reading on the internet useful info and datasheets.

    So lets start from the beginning:

    I need to write a code that is getting the NMEA information from the GPS and display them at an LCD. For the LCD i prefer in the beginning to have the uLCD 1'44 from 4D Systems as fas as it doesnt need any driver. At the end of the project i would like to use the .inc files in order to use a Nokia 3310 or any other cheaper display.

    I have in mind to start from the scratch, and with your advice based on what i need to do, to write the code in an appropriate format. Please be patience as i need time to understand things. And i need to understand what am i doing on the code. It will be useful for a newbie like me in the future to read the thread and really understand. Because for you all, that are experienced and you are in a good level of programming, you do not have either time to explain what you are doing and why you are doing at a difficult parts of code.

    So now i will start the project from the very basic, like why do we pick this particular PIC, why we select these fuses.....

    I place myself under a newbie and for the rest like me, i will start with a very basic info and code. We will continue that in order to reach a good level and to complete an average project.

    At the end it will be like a training with examples but real life examples with explanations and detailed info for each step.

    If there is anyone would like to help here please do so.

  2. #2

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    So simply i start, with what the first target is, for the code.

    1. We need to get NMEA information from any GPS module that Outputs: NMEA 0183, 9600 baud default, and display them on:

    a. A display that accept directly commands without any driver. (i have for testing the uLCD 1'44 from 4D systems with SGC ios for serial interface)
    b. A display that accept commands but we need to include the driver files. (a Nokia 3310 for example)

    Those files i believe are already completed by the experienced users in the forum.
    So they could help us and explain to us how to use them if they have the time and patience.

    The PIC that i will use for all way to the end, even for the very basic code in the beginning is the PIC18F26K22.

  3. #3

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    First Question is: How do we select the PIC, and why did we select this particular one (PIC18F26K22) for a number of examples in this project.

    The Datasheet is very important to have it as a reference all the time.

    I will answer as a newbie and hopefully the experienced programmers and users will help to correct me or add useful additional information.

    In most of the new basic projects, we need to add components in our circuit that require more ports to be in use, specific features, High CPU SPEED and SPACE in RAM....... For example, in this final project, we will use a variety of components like:

    1. Display
    2. GPS Module, (GSM 2G-SIM module, this will be added at the end)
    3. SD card

    Each of the components required to have a dedicated port on the PIC and a specific protocol to communicate with.

    For example we need to identifyfor each component, how it works and what communication protocol needs to be connected with the PIC!!!

    A Display and the SD that has the SPI or I2C option to communicate , needs to be connected with a PIC that features these peripherals.
    Attached Images Attached Images
    Last edited by astanapane; - 24th June 2018 at 11:22.

  4. #4

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    Second Question is: How to do we set the configuration fuses for the PIC, especially for the PIC18F26K22?

    Right now the first step is to Flash an LED at port RC3 ( pin14 ) of the PIC18F26K22.

    The following code is written in order to Flash the LED on the specific port.

    For me at the moment is quit difficult to explain the configuration fuses for all the setups, mostly important to the ones setting the frequency at high external speed HS of 64Mhz.

    From the manual it says that we need to enable the PLL bit and also specify that we are going to use the external OSC.

    I might need the help of the ones are most expirienced to help me out regarding the setting for 64 MHZ with an external crystal 16Mhz.

    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 default configuration for the PIC18F26K22 is:
    ;    CONFIG FOSC = RCIO6	          ; External RC oscillator
        CONFIG FOSC = HSHP	          ; HS oscillator (high power > 16 MHz)
    ;    CONFIG  FOSC = INTIO67       ; Internal oscillator block
    ;    CONFIG  PLLCFG = ON          ; Oscillator used directly
        CONFIG  PRICLKEN = ON         ; Primary clock can be disabled by software
        CONFIG  FCMEN = OFF           ; Fail-Safe Clock Monitor disabled
        CONFIG  IESO = OFF            ; Oscillator Switchover mode disabled
        CONFIG  PWRTEN = OFF          ; Power up timer disabled
        CONFIG  BOREN = SBORDIS       ; Brown-out Reset enabled in hardware only (SBOREN is disabled)
    ;    CONFIG  BORV = 190           ; VBOR set to 1.90 V nominal
        
    ;*--------------------------------------------------------------------------------------------------------;|
        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  CCP2MX = PORTC1      ; CCP2 input/output is multiplexed with RC1
    ;     CONFIG  PBADEN = OFF         ; PORTB<5:0> pins are configured as digital I/O on Reset
    ;     CONFIG  CCP3MX = PORTB5      ; P3A/CCP3 input/output is multiplexed with RB5
        CONFIG  HFOFST = ON           ; HFINTOSC output and ready status are not delayed by the oscillator stable status
    ;    CONFIG  T3CMX = PORTC0       ; T3CKI is on RC0
    ;    CONFIG  P2BMX = PORTB5       ; P2B is on RB5
        CONFIG  MCLRE = EXTMCLR       ; MCLR pin enabled, RE3 input pin disabled
    ;    CONFIG  STVREN = ON          ; Stack full/underflow will cause Reset
        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, &lt;500 kHz)
    ;    CONFIG FOSC = ECLP	    ;EC oscillator, CLKOUT function on OSC2 (low power, &lt;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, &gt;16 MHz)
    ;    CONFIG FOSC = ECHP	    ;EC oscillator, CLKOUT function on OSC2 (high power, &gt;16 MHz)
    ;    CONFIG FOSC = HSMP	    ;HS oscillator (medium power 4-16 MHz)
    ;    CONFIG FOSC = HSHP	    ;HS oscillator (high power &gt; 16 MHz)
    ;    CONFIG FOSC = XT	    ;XT oscillator
    ;    CONFIG FOSC = LP	    ;LP oscillator
    ;
    ;*------------------------------------------------------------------------------------*|
    ;*                                                                                    *|
    ;*---------------------------------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
        
    ;*--------------------------------------------------------------------------------------------------------|
    ;*                                  | -------------------------- |                                        |
    ;*  -----------------------------   |  [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
    
    LED var PORTC.3
    
    
    main:
    high LED
    pause 10
    low LED
    pause 1000
    goto main
    Last edited by astanapane; - 1st July 2018 at 12:56.

  5. #5
    Join Date
    Nov 2003
    Location
    Greece
    Posts
    2,747

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    pause 10 is too little time.

    Maybe you need to make this 1000.

    Then check with a timer that it actually pauses every 1 sec confirming that osc is setup correctly.

    Recently I had similar matter setting up system oscillator again with 4xPLL and was running slow. Richard got it and we are OK now.

    Ioannis

  6. #6

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    Quote Originally Posted by Ioannis View Post
    pause 10 is too little time.

    Maybe you need to make this 1000.

    Then check with a timer that it actually pauses every 1 sec confirming that osc is setup correctly.

    Recently I had similar matter setting up system oscillator again with 4xPLL and was running slow. Richard got it and we are OK now.

    Ioannis
    Ioanni,

    thanks a lot for the help. I'll do it tonight and try to increase the time.

    To be honest i made many changing to the pause commands like : 10ms , 100ms, 1000ms, 2000ms. All seem to work fine.

    It would be a good practice to see how could we identify that the PIC clock now is running at 64Mhz?

    Is there any way to measure this with an Oscilloscope? I believe that this is a question have been asked many times.

    If someone could help me to identify the cpu clock speed of the PIC with the new setting of external 16Mhz crystal and 4xPLL, i can do the testing, and share the information step by step in here. If there is already posted an example like this i would like to have a look at it.

    thanks a lot.

  7. #7
    Join Date
    May 2013
    Location
    australia
    Posts
    1,479

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    Is there any way to measure this with an Oscilloscope?
    measure the led on/off time with the Oscilloscope if the osc is correct then the on/off times will be as per your code


    I would leave CONFIG PWRTEN = ON


    AND ADD THIS
    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 , if timing is critical
    This is more entertaining than Free to Air TV

  8. #8

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    Quote Originally Posted by richard View Post
    measure the led on/off time with the Oscilloscope if the osc is correct then the on/off times will be as per your code


    I would leave CONFIG PWRTEN = ON


    AND ADD THIS
    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 , if timing is critical
    Hi Richard,

    Thanks, i will do that. So that means that the 8th Bit of the OSCCON2 which is the .7 must be presented?
    Attached Images Attached Images

  9. #9
    Join Date
    May 2013
    Location
    australia
    Posts
    1,479

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    I seldom use crystals [you lose two pins for marginal increase in accuracy ] but I believe you can set pll mode in the config section and is all you need

    CONFIG PLLCFG = ON
    ;CONFIG PLLCFG = OFF // pll can only be engaged with software selection for int osc


    and then all this is not valid , it applies to internal osc only

    OSCCON = %01110000 ; 64Mhz
    OSCTUNE.6 = 1 ; Enable 4x PLL


    this may or may not be necessary with xtal osc , I have found bootloaders won't sync up unless this is done using int osc with pll.
    the PLLRDY bit is asserted when pll is stable [although I can find no mention in data sheet]
    while ! osccon2.7 :WEND
    This is more entertaining than Free to Air TV

  10. #10

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    Hi Richard,

    i got confused. Really im reading the datasheet and there is nowhere clear setting for using external crystal.

    I came up with the following

    Code:
    OSCCON = %01110000 ; 64Mhz
    OSCTUNE.6 = 1 ; Enable 4x PLL
    Because i was thinking that in order to specify the OSCCON, and the multiplier PLL we need to add those lines even if it is for internal or external source. I didnt think that those where valid only for internal OSC.

    So what should i add as OSCCON value, as i use and external crystal 16Mhz? How do i specify the OSCCON value for 64Mhz?

    thanks once again. Apologize for all my questions.

  11. #11
    Join Date
    May 2013
    Location
    australia
    Posts
    1,479

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    So what should i add as OSCCON value, as i use and external crystal 16Mhz? How do i specify the OSCCON value for 64Mhz?
    nothing , leave it alone

    OSCTUNE.6 = 1 ; Enable 4x PLL becomes non functional if CONFIG PLLCFG = ON
    This is more entertaining than Free to Air TV

  12. #12

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    Quote Originally Posted by richard View Post
    nothing , leave it alone

    OSCTUNE.6 = 1 ; Enable 4x PLL becomes non functional if CONFIG PLLCFG = ON
    Thanks i'll do so. Tonight i will post result in addition to some pictures from Oscilloscope. Lets see.

  13. #13

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    I did the following code test in order to check communication with an uLCD 144 and the LED as before at the same port.

    I would love to use the .inc files for the Nokia 3310 or 5110 LCD but really i dont know which files are the ones match.

    Anyway i think the code works as it is and the configuration settings are ok.

    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 &gt; 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, &lt;500 kHz)
    ;    CONFIG FOSC = ECLP	    ;EC oscillator, CLKOUT function on OSC2 (low power, &lt;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, &gt;16 MHz)
    ;    CONFIG FOSC = ECHP	    ;EC oscillator, CLKOUT function on OSC2 (high power, &gt;16 MHz)
    ;    CONFIG FOSC = HSMP	    ;HS oscillator (medium power 4-16 MHz)
    ;    CONFIG FOSC = HSHP	    ;HS oscillator (high power &gt; 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
    
    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     |
    '------------------------------------------------------------------------|
    
    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 
    
           
    '*-----------------------------------------------------------------------------|
    '*                        |  --------------------- |                           |
    '*----------------------- | 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
            
    '*-----------------------------------------------------------------------------|
    '*                        |  --------------------- |                           |
    '*----------------------- | 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
            
    '*-----------------------------------------------------------------------------|
    '*-----------------------------------------------------------------------------|
    
    Timeout         CON 1000
    Counter         var byte
    ser_in_data     var byte
    LED             var PORTC.3
    
    
    ' -------------------------------------------------------------------------/  
    '                          [ LCD Initialization ]                         /
    '------------------------------------------------------------------------/
              ' FIRST TIME BOOTUP: We give plenty of time for tbe LCD '
    pause 2000  
    HSEROUT2[$55]      ' uOLED Initialize this is the 'U' character of autoband rate to LCD
    Hserin2  timeout,main,[wait(6)]
    hserout2[$56,$01]  ' this is the Version info --> '01 10 17 28 28   -->> "(("
    Hserin2  timeout,main,[wait(1),wait(16),wait(23),wait(40),wait(40)]
    HSEROUT2 [$45]    ' clear the LCD
    Hserin2  timeout,main,[wait(6)]
    pause 500
    
    hserout2[$73,$00,$03,$11,$ff,$ff," Leonardo Bilalis",$00] 
    Hserin2  timeout,main,[wait(6)]           
    hserout2[$73,$02,$06,$10,$ff,"     Copyright 2018",$00]
    Hserin2  timeout,main,[wait(6)]
    pause 500
    
    Hserout2[$4F,01]
    Hserin2  timeout,main,[wait(6)]
    
    HSEROUT2 [$45]    ' clear the LCD
    Hserin2  timeout,main,[wait(6)]
    
    Start:
    for counter = 1 to 100
    HSEROUT2 [$73,$03,$02,$11,$ff,$ff,"Counter:", #counter,$00]
    pause 10
    next counter
    ;gosub main ---> i did commented this as from Ioannis's advice. 
    
    main:
    high LED
    pause 1000
    low LED
    pause 1000
    goto main
    Last edited by astanapane; - 2nd July 2018 at 21:00.

  14. #14
    Join Date
    Nov 2003
    Location
    Greece
    Posts
    2,747

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    This is a bad programing.

    You use a gosub to main but there is no return from the main.

    Delete the line gosub main as there is no point.

    Be very careful with such commands, as it is common to novice programmers this error. Your program will crash with no obvious reason.

    Ioannis

  15. #15

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    Quote Originally Posted by Ioannis View Post
    This is a bad programing.

    You use a gosub to main but there is no return from the main.

    Delete the line gosub main as there is no point.

    Be very careful with such commands, as it is common to novice programmers this error. Your program will crash with no obvious reason.

    Ioannis
    Oppps , i didnt notice.

    Thanks Ioanni. As you see i have also configured the First EUART. There will be placed either the GPS module or the SD card.

    P.S. didnt have a time tonight to do the test and post pictures from the oscilloscope. Will do that tomorrow.
    Last edited by astanapane; - 2nd July 2018 at 21:04.

  16. #16
    Join Date
    May 2013
    Location
    australia
    Posts
    1,479

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    Code:
    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.
    setting the tris incorrectly will stop the eusarts from working


    from data sheet

    Setting the TXEN bit of the TXSTAx register enables the
    transmitter circuitry of the EUSART. Clearing the SYNC
    bit of the TXSTAx register configures the EUSART for
    asynchronous operation. Setting the SPEN bit of the
    RCSTAx register enables the EUSART and
    automatically configures the TXx/CKx I/O pin as an
    output. If the TXx/CKx pin is shared with an analog
    peripheral the analog I/O function must be disabled by
    clearing the corresponding ANSEL bit.
    This is more entertaining than Free to Air TV

  17. #17

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    Quote Originally Posted by richard View Post
    Code:
    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.
    setting the tris incorrectly will stop the eusarts from working


    from data sheet

    Setting the TXEN bit of the TXSTAx register enables thetransmitter circuitry of the EUSART. Clearing the SYNC
    bit of the TXSTAx register configures the EUSART for
    asynchronous operation. Setting the SPEN bit of the
    RCSTAx register enables the EUSART and
    automatically configures the TXx/CKx I/O pin as an
    output. If the TXx/CKx pin is shared with an analog
    peripheral the analog I/O function must be disabled by
    clearing the corresponding ANSEL bit.
    To be honest i didnt really understand the statement. I understand that it is not necessary to set a TRIS register at TX bit as automatically the TX configured as an output.....

    Code:
    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.
    as we have already stated and configured the EUSART with the following:

    Code:
    '*-----------------------------------------------------------------------------|
    '*                        |  --------------------- |                           |
    '*----------------------- | 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
            
    '*-----------------------------------------------------------------------------|
    '*                        |  --------------------- |                           |
    '*----------------------- | 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
            
    '*-----------------------------------------------------------------------------|
    '*-----------------------------------------------------------------------------|
    How Do we configure the rest of the TRIS bits?

    Code:
    TRISB = %1X000000   '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 = %1X000000   '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.
    Last edited by astanapane; - 3rd July 2018 at 07:03.

  18. #18
    Join Date
    May 2013
    Location
    australia
    Posts
    1,479

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    How Do we configure the rest of the TRIS bits?
    when you read
    Setting the SPEN bit of the
    RCSTAx register enables the EUSART and
    automatically configures the TXx/CKx I/O pin as an
    output.
    in the eusart section it means its unnecessary to clear the tris bit for the tx pin, keep in mind that on some chips clearing the tx pin tris bit
    will stop the eusart from working . I prefer to form good habits ,although the 18f26k22 does not seem to object and functions either way .
    This is more entertaining than Free to Air TV

  19. #19

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    Richard, bardon me. Still im confused from your answer.

    I understand the part of setting up the EUSART, automatically we make the TX port as an output.

    My question is, what do we do with the rest of the TRISB and TRISC bits apart from the RX/TX.

    Code:
    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     |
    '------------------------------------------------------------------------|
    I feel like i'm missing something. Sorry for my questions, but i would like to be sure i understand every part of the code. And when i configure the ports as an input or outputs, or Digital/Analogue, i need to know exactly what am i doing.

    In our case as we want to configure the EUSART, as you stated from the manual -datasheet, we have automatically the TX pin as an output. But dont we continue to specify the other pins with the TRIS command?

  20. #20
    Join Date
    May 2013
    Location
    australia
    Posts
    1,479

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    My question is, what do we do with the rest of the TRISB and TRISC bits apart from the RX/TX
    .
    that would depend entirely on what you want do with each pin , if and only if you need it to be an output clear the corresponding tris bit
    This is more entertaining than Free to Air TV

  21. #21

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    Quote Originally Posted by richard View Post
    .
    that would depend entirely on what you want do with each pin , if and only if you need it to be an output clear the corresponding tris bit
    Thanks a lot for your answer. I guess we cant leave unassigned the bits. Normally as far as i have learned from what i have read in this forum, it is better to configure the bits of each port and give an Input or Output direction in addition to high or low stage.

  22. #22
    Join Date
    May 2013
    Location
    australia
    Posts
    1,479

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    I guess we cant leave unassigned the bits
    there is no such state , pins are either inputs or outputs or analog inputs , outputs can only be high or low
    if you have no reason to use a pin as an output then leave as an input , if you have no reason to use a pin as a digital input you can leave it analog
    the pic chip won't care. the pic chip does not care if outputs are high or low its only what they connect to that cares , it up to you to initialise the pins
    in use to the correct type/state and direction to match the requirement of what they connect to and then make sure they stay that way.
    This is more entertaining than Free to Air TV

  23. #23

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    Quote Originally Posted by richard View Post
    there is no such state , pins are either inputs or outputs or analog inputs , outputs can only be high or low
    if you have no reason to use a pin as an output then leave as an input , if you have no reason to use a pin as a digital input you can leave it analog
    the pic chip won't care. the pic chip does not care if outputs are high or low its only what they connect to that cares , it up to you to initialise the pins
    in use to the correct type/state and direction to match the requirement of what they connect to and then make sure they stay that way.
    now it is clear. Really appreciate your help.

    Thanks a lot Richard.

  24. #24
    Join Date
    Nov 2003
    Location
    Greece
    Posts
    2,747

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    I have my doubts on leaving inputs floating.

    Usually if I have any unused ports, I turn them as outputs and clear them.

    If they are inputs, maybe enable the pull ups if any or tie them to ground.

    A floating pin can cause troubles in certain cases.

    Ioannis

  25. #25
    Join Date
    May 2013
    Location
    australia
    Posts
    1,479

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    if your program is adversely affected by an unused pin then your code is incomplete and needs more debugging
    This is more entertaining than Free to Air TV

  26. #26
    Join Date
    Nov 2003
    Location
    Greece
    Posts
    2,747

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    No the program itself but on the total current consumption as the CMOS do not like to be float.

    Ioannis

  27. #27
    Join Date
    Mar 2003
    Location
    Commerce Michigan USA
    Posts
    1,108

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    Especially when in the presence of stray RF. They make rather nice antenna's.
    Dave Purola,
    N8NTA
    EN82fn

  28. #28

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    Quote Originally Posted by Dave View Post
    Especially when in the presence of stray RF. They make rather nice antenna's.
    Ok then what is the most professional way in most of the cases to configure the pins?

    Should we make all the non used pins as an outputs - low stage?

  29. #29
    Join Date
    May 2013
    Location
    australia
    Posts
    1,479

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    its my understanding that pins left as inputs and tied or pulled down to vss will minimise current consumption.
    when i'm breadboarding a design I let them float and have never had an issue , if you accidently plug something
    into a input pin at least smoke is not released.
    This is more entertaining than Free to Air TV

  30. #30
    Join Date
    Nov 2003
    Location
    Greece
    Posts
    2,747

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    Depends. If you care about minimum current as is the case in battery operated devices, then yes. Do set them as inputs with proper pull up enabled inside the PIC or a large size output.

    I found that makes no difference, at least for the chips I used, to set them as outputs logic low, and use no pull up or down. Pull up/down can also contribute to current consumption.

    I attach the page 2-4 of the Tips and Tricks, file DS01146B regarding I/O that has more info on this.

    Ioannis

    Capture.PNG

  31. #31

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    I believe that any input pin must be pulled either up or down depends on the use. If there is a switch normally most of the people, pull up a resistor at the input pin, and the switch goes to ground.

    Now for the rest of the pins personally if the pins are output and digital, i leave them floating, but i use the command:

    Code:
    PORTx = low
    Just read Ioannis previous post. It is really useful info. Thanks a lot.
    Last edited by astanapane; - 4th July 2018 at 07:33.

  32. #32
    Join Date
    Nov 2003
    Location
    Greece
    Posts
    2,747

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    PortX=0
    TrisX=xxxx

    Thats all.
    Ioannis

  33. #33

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    Ok lets move forward to the project.

    I have received the PIC18F26K22, and connected the ulcd and the Gps module at the EUSARTs.

    I tried to configure each EUSART with a different baudrate but didnt work. Anyway i did the baudrate the same for both of the ports and uLCd and GPS worked fine.

    Code:
    '*-----------------------------------------------------------------------------|
    '*                        |  --------------------- |                           |
    '*----------------------- | 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
    
    
    
            
    '*-----------------------------------------------------------------------------|
    '*                        |  --------------------- |                           |
    '*----------------------- | 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
    
            
    '*-----------------------------------------------------------------------------|
    '*-----------------------------------------------------------------------------|

    Then on the main program, i have placed the code to get the information from the GPS and display them to uLcd.

    Some coding is still not good, but at the moment i need to solve the problem that is mentioned at the end of this message. So please ignore any minor issues at them moment.

    Code:
    '--------------------------------------------------------------------------------|
    '                                                                                |
    ' ----------------------------    [ 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("$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]                          
    
    '------------------------------------------------------------------------------/
    '                                                                             /
    '                     [ 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("$GPGGA"),_            ;we wait for GPGGA
    wait(","),skip 35,_
    wait(","),modefix,_                                             ;we wait for modefix 1,2 or 3 check gps manual for NMEA
    wait(","),dec2 satno,_
    wait(","),skip 19]
    
    
    '------------------------------------------------------------------------------/
    '                                                                             /
    '                     [ 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]
    
    '------------------------------------------------------------------------------/
    '                                                                             /
    '                     [ Example NMEA Sentense of GPVTG ]                     /
    '                  [$GPVTG,215.60,T,,M,0.44,N,0.82,K,A*37]                  /           
    '                                                                          /
    '-------------------------------------------------------------------------/
    
    'serin2 gps_tx,84,timeout,lostcable,[wait("GNVTG"),_
    HSERIN timeout,lostcable,[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:
    
    '---------------------------------------------------------------------------------/
    ' Here if the GPS module havent been fixed to any satellite will jump to notfix  /
    '-------------------------------------------------------------------------------/
    
    if fix = "V" then notfix                               
    ;pause 100
    
    '-----------------------------------------------------------------------------/
    '                           [ Return from notfix ]                           /
    '                   [ We clear any character on the display ]               /
    '--------------------------------------------------------------------------/
    
    'serout2 lcd,6,[$45]     'Clear the ulcd 1'44
    'pause 100
    
    '-----------------------------------------------------------------------------/
    '                   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 [$73,$03,$00,$00,$FF,$FF," Protocol:","NMEA",$00]
    Hserin2  timeout,lostcable,[wait(6)]
    HSEROUT2 [$73,$01,$02,$01,$07,$E0," Date:",dec2 day,"/",dec2 month,"/",dec2 year,$00]
    Hserin2  timeout,lostcable,[wait(6)]
    HSEROUT2 [$73,$00,$04,$00,$FF,$E0,"   TIME: ",dec2 hh," :",dec2 mm," :",dec2 ss,$00]
    Hserin2  timeout,lostcable,[wait(6)]
    HSEROUT2 [$73,$00,$07,$00,$FF,$FF," Sats",$00] 
    Hserin2  timeout,lostcable,[wait(6)]
    HSEROUT2 [$73,$01,$09,$11,$6D,$BF,dec2 satno,$00]
    Hserin2  timeout,lostcable,[wait(6)]
    HSEROUT2 [$73,$0E,$07,$00,$FF,$FF,"  Fixed",$00]
    Hserin2  timeout,lostcable,[wait(6)]
    HSEROUT2 [$73,$0B,$09,$11,$6D,$BF,"   ",fix,"  ",mode2d3d,"D",$00]
    Hserin2  timeout,lostcable,[wait(6)]
    HSEROUT2 [$73,$05,$06,$11,$FF,$E0," SPEED",$00]
    Hserin2  timeout,lostcable,[wait(6)]
    HSEROUT2 [$73,$06,$05,$12,$6D,$BF,TS[0],TS[1],TS[2],TS[3],$00]
    Hserin2  timeout,lostcable,[wait(6)]
    HSEROUT2 [$73,$06,$06,$12,$FF,$E0,"Km/h",$00]
    Hserin2  timeout,lostcable,[wait(6)]
    HSEROUT2 [$73,$00,$0C,$00,$ff,$ff," Lat : ",dec2 degrees,"*",dec2 minutes,"'",dec4 minutesd,"@"," ",$00]
    Hserin2  timeout,lostcable,[wait(6)]
    HSEROUT2 [$73,$BE,$0C,$10,$f8,$00,dir,$00]
    Hserin2  timeout,lostcable,[wait(6)]                
    HSEROUT2 [$73,$00,$0E,$00,$ff,$ff," Lon :",dec3 degrees2,"*",dec2 minutes2,"'",dec4 minutesd2,"@"," ",$00]
    Hserin2  timeout,lostcable,[wait(6)]                
    HSEROUT2 [$73,$BE,$0E,$10,$f8,$00,dir2,$00]
    Hserin2  timeout,lostcable,[wait(6)]
    
            goto main
    As you see in the main code there is a line that checking if there is no FIX, so will jump to a label notfix:

    Code:
    '---------------------------------------------------------------------------------/
    ' Here if the GPS module havent been fixed to any satellite will jump to notfix  /
    '-------------------------------------------------------------------------------/
    
    if fix = "V" then notfix
    See next the notfix label:

    As i do not use any interrupt at the moment, any instruction is waiting to be completed until the next one will continue.

    So at this code, when i POWERUP the circuit, until the GPS gets the signal, jumps at the notfix.

    Code:
    notfix:     ' Still looking for fixed signal
    
    hh = hh + 3
    hh = hh//24 
    HSEROUT2 [$73,$00,$03,$11,$6D,$BF,"   Waiting for GPS",$00]
    Hserin2  timeout,lostcable,[wait(6)]
    HSEROUT2 [$73,$00,$07,$00,$07,$ff,rep "." \dots,$00]
    Hserin2  timeout,lostcable,[wait(6)]
    HSEROUT2 [$73,$07,$09,$10,$6D,$BF,"SATs :",dec2 satno,$00]
    Hserin2  timeout,lostcable,[wait(6)]
    HSEROUT2 [$73,$04,$07,$12,$F8,$00,"NOT FIXED",$00]
    Hserin2  timeout,lostcable,[wait(6)]
    HSEROUT2 [$73,$06,$0D,$11,$6D,$BF,fix,"   ",mode2d3d,"D",$00]
    Hserin2  timeout,lostcable,[wait(6)]
    HSEROUT2 [$73,$03,$06,$10,$ff,$E0," Time:",dec2 hh," :",dec2 mm," :",dec2 ss,$00]
    Hserin2  timeout,lostcable,[wait(6)]
    pause 3000
    
    HSEROUT2 [$45]  ' clears the LCD 
    Hserin2  timeout,lostcable,[wait(6)]
    
    
    goto main       'returns to main
    QUESTION:
    Now, i need to clear at the end of the notfix the display, because if there is a FIX from the GPS, will go back to main, and i need to see the new data and not a mixed from notfix and main. Is there any way to clear the LCD before i go back to main without place the clear lcd command inside the main or the notfix label? ? Could you please help me and give me some advice?



    Still i havent design any circuit as i develop the test board some things are changing.

    I post pictures of the test board, and i would try to explain what i have done.
    Attached Images Attached Images
    Last edited by astanapane; - 4th July 2018 at 10:49.

  34. #34

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    A Test with an not very good ATTEN oscilloscope.

    main:
    high LED
    pause 10
    low LED
    pause 100
    goto main

    With an Auto-trigger i get 9.11 Hz

    If i make the following change

    main:
    high LED
    pause 10
    low LED
    pause 50
    goto main

    i get a frequency of: 16.72 Hz.

    As far as i have discussed with Ioannis, it should be ok, and the setting for 64Mhz is activated up and running.
    Attached Images Attached Images

  35. #35
    Join Date
    Nov 2003
    Location
    Greece
    Posts
    2,747

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    Obviously your picture shows the first piece of code. You Oscilloscope is set for 50ms/div, so your period seems to measure about 110ms.

    Your program is making high for 10ms and another 100ms low which makes for a 110ms plus any PIC delays and inaccuracies, very much close to 120ms.

    Good to go!

    Ioannis

  36. #36

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    Dear all,

    i have a question it maybe answered in lots of different threads.
    http://www.picbasic.co.uk/forum/showthread.php?t=10389

    http://www.picbasic.co.uk/forum/showthread.php?t=10265

    QUESTION: Can i have different baudrates on the 2 EUARTs? How could i change baudrate during start up in one of the EUART port?

    Have in mind that i use both of the EUARTs. One for the Display and one for the GPS.

    The GPS has a firmware with the following configuration:

    Baudrate: 9600 default
    Refresh rate: 1hz

    On the code i have configured the EUART for 38400, because i set the GPS externally with serial terminal at 38400. But GPS keeps the configs only if a backup battery is presented.

    So i came up with this problem.

    I need to send the following command first to SET the BAURATE at 38400, but with the EUART at 9600, because at that stage the GPS communicate only at 9600.

    Code:
    HSEROUT2 ["$PMTK251,38400*27",13,10]      ' 38400 boundrate, check MTK manual configuration.
    Then GPS as i tested i connected successfully, at 38400, but the following command cannot be sent before i change on the fly the EUART at 38400.

    Code:
    HSEROUT2 ["$PMTK220,100*2F",13,10]        ' 100(millisecond)=0.1(sec)-->1/0.1= 10Hz
    From the links above, i checked the way you are setting the new baudrate, and tried to do it as well but didnt really worked.

  37. #37
    Join Date
    Oct 2005
    Location
    Sweden
    Posts
    3,197

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    Yes, you can have different baudrate(s) on different UARTs and yes you can change it at any time you want. But, as the posts in the other thread says, to change it you can't use PBPs DEFINE HSER_BAUD because that's a compile time directive and not a runtime command.

    If you want to set or change the baudrate at runtime you need to set or change the registers manually. BAUDCON, SPBRG, SPBRGH most of the time. And remember that the register names are different for the second UART - BAUDCON2, SPBRG2 etc.

    Without seeing your code we can't say why what you did didn't work.

  38. #38

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    Quote Originally Posted by HenrikOlsson View Post
    Yes, you can have different baudrate(s) on different UARTs and yes you can change it at any time you want. But, as the posts in the other thread says, to change it you can't use PBPs DEFINE HSER_BAUD because that's a compile time directive and not a runtime command.

    If you want to set or change the baudrate at runtime you need to set or change the registers manually. BAUDCON, SPBRG, SPBRGH most of the time. And remember that the register names are different for the second UART - BAUDCON2, SPBRG2 etc.

    Without seeing your code we can't say why what you did didn't work.
    Hi Henrik,

    i did have the DEFINEs on the code like this.

    Code:
    '*-----------------------------------------------------------------------------|
    '*                        |  --------------------- |                           |
    '*----------------------- | 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
    
            
    
    
    
            
    '*-----------------------------------------------------------------------------|
    '*                        |  --------------------- |                           |
    '*----------------------- | 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
    
            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
            
    
    '------------------------------------------------------------------------------|
    '-----------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 500
    RCSTA2 = $90 ' Enable serial port & continuous receive
    TXSTA2 = $24 ' Enable transmit, BRGH = 1
    SPBRG2 = 160 ' 38400 Baud @ 64MHz, -0,08%
    HSEROUT2 ["$PMTK220,100*2F",13,10]        ' 100(millisecond)=0.1(sec)-->1/0.1= 10Hz
    On the first stage that i send the following command, to change the baudrate for the GPS, it works because both PIC and GPS are at the same rate.

    Code:
    B]HSEROUT2[/B] ["$PMTK251,38400*27",13,10]      ' 38400 boundrate, check MTK manual configuration
    then i guess with the following code that i change the rate on the PIC's port.

    Code:
    RCSTA2 = $90 ' Enable serial port & continuous receive
    TXSTA2 = $24 ' Enable transmit, BRGH = 1
    SPBRG2 = 160 ' 38400 Baud @ 64MHz, -0,08%
    then send the command which seems that it doesnt work.

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

  39. #39
    Join Date
    May 2013
    Location
    australia
    Posts
    1,479

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    if you are using the 16 bit baudrate generator
    BAUDCON2.3 = 1 ' Enable 16 bit baudrate generator


    then the baud rate is set using SPBRGHx and SPBRGx



    setting
    Code:
    SPBRG2 = 160 ' 38400 Baud @ 64MHz, -0,08%
    is only half the job
    This is more entertaining than Free to Air TV

  40. #40

    Default Re: GPS Project: PIC18F26K22 or PIC18F46K22

    Quote Originally Posted by richard View Post
    if you are using the 16 bit baudrate generator
    BAUDCON2.3 = 1 ' Enable 16 bit baudrate generator


    then the baud rate is set using SPBRGHx and SPBRGx



    setting
    Code:
    SPBRG2 = 160 ' 38400 Baud @ 64MHz, -0,08%
    is only half the job
    I will check the code later today based on your given directions. thanks a lot.

    I might need to check and wait for the GPS responds and PIC port response. I will try to set a code, and if i need again your help i will keep you posted.

Similar Threads

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

Members who have read this thread : 26

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