nRF52840 with GPS help

Hello, I want to get GPS location information with nRF52840, I use UART protocol at 9600 baud rate, but I cannot read the data regularly, how should I do?

Parents
  • Hi there,

    Which GPS device are you using and are you able to get some data at all? 

    How are you currently trying to read out the data?

    regards

    Jared

  • Hi, I am using ublox NEO-6M-0-001. data is meaningless, comes in different characters, does not come in $GPGGA standard

  • Hi,

    Can you share a trace from a logic analyzer that shows the data on RX and TX when you request GPS location?

    Berkay Dudu said:

    yes i am using existing driver made necessary adjustments according to datasheet

    Can you show me this in your code?

    regards
    Jared 

  • Hi

    Sorry I havent logic analyzer device, therefor I will send the code

    #include <stdbool.h>
    #include <stdint.h>
    #include <stdio.h>
    #include "app_uart.h"
    #include "app_error.h"
    #include "nrf_delay.h"
    #include "nrf.h"
    #include "bsp.h"
    #if defined (UART_PRESENT)
    #include "nrf_uart.h"
    #endif
    #if defined (UARTE_PRESENT)
    #include "nrf_uarte.h"
    #endif


    //#define ENABLE_LOOPBACK_TEST /**< if defined, then this example will be a loopback test, which means that TX should be connected to RX to get data loopback. */

    #define MAX_TEST_DATA_BYTES (15U) /**< max number of test bytes to be used for tx and rx. */
    #define UART_TX_BUF_SIZE 256 /**< UART TX buffer size. */
    #define UART_RX_BUF_SIZE 256 /**< UART RX buffer size. */

    void uart_error_handle(app_uart_evt_t * p_event)
    {
    if (p_event->evt_type == APP_UART_COMMUNICATION_ERROR)
    {
    APP_ERROR_HANDLER(p_event->data.error_communication);
    }
    else if (p_event->evt_type == APP_UART_FIFO_ERROR)
    {
    APP_ERROR_HANDLER(p_event->data.error_code);

    }
    }


    #ifdef ENABLE_LOOPBACK_TEST
    /* Use flow control in loopback test. */
    #define UART_HWFC APP_UART_FLOW_CONTROL_ENABLED

    /** @brief Function for setting the @ref ERROR_PIN high, and then enter an infinite loop.
    */
    static void show_error(void)

    {

    bsp_board_leds_on();
    while (true)
    {
    // Do nothing.

    }
    }


    /** @brief Function for testing UART loop back.
    * @details Transmitts one character at a time to check if the data received from the loopback is same as the transmitted data.
    * @note @ref TX_PIN_NUMBER must be connected to @ref RX_PIN_NUMBER)
    */
    static void uart_loopback_test()
    {
    uint8_t * tx_data = (uint8_t *)("\r\nLOOPBACK_TEST\r\n");
    uint8_t rx_data;

    // Start sending one byte and see if you get the same
    for (uint32_t i = 0; i < MAX_TEST_DATA_BYTES; i++)
    {
    uint32_t err_code;
    while (app_uart_put(tx_data[i]) != NRF_SUCCESS);

    nrf_delay_ms(10);
    err_code = app_uart_get(&rx_data);

    if ((rx_data != tx_data[i]) || (err_code != NRF_SUCCESS))
    {
    show_error();
    }
    }
    return;
    }
    #else
    /* When UART is used for communication with the host do not use flow control.*/
    #define UART_HWFC APP_UART_FLOW_CONTROL_DISABLED
    #endif


    /**
    * @brief Function for main application entry.
    */
    int main(void)
    {
    uint32_t err_code;

    bsp_board_init(BSP_INIT_LEDS);

    const app_uart_comm_params_t comm_params =
    {
    RX_PIN_NUMBER,
    TX_PIN_NUMBER,
    RTS_PIN_NUMBER,
    CTS_PIN_NUMBER,
    UART_HWFC,
    false,
    #if defined (UART_PRESENT)
    NRF_UART_BAUDRATE_9600
    #else
    NRF_UARTE_BAUDRATE_9600
    #endif

    };

    APP_UART_FIFO_INIT(&comm_params,
    UART_RX_BUF_SIZE,
    UART_TX_BUF_SIZE,
    uart_error_handle,
    APP_IRQ_PRIORITY_LOWEST,
    err_code);

    APP_ERROR_CHECK(err_code);

    #ifndef ENABLE_LOOPBACK_TEST
    printf("\r\nUART example started.\r\n");

    while (true)
    {
    //char a[100];

    uint8_t cr;

    //uint8_t i;
    //double cr;
    //while (app_uart_get(&cr) != NRF_SUCCESS);
    //while (app_uart_put(cr) != NRF_SUCCESS);

    //if (cr == 't' || cr == 'Q')
    //{
    // printf(" \r\nExit!\r\n");

    // while (true)
    // {
    // bsp_board_leds_on();

    // }
    //}

    if(app_uart_get(&cr) != NRF_SUCCESS)
    {

    printf(cr,'\r\n');
    nrf_delay_ms(500);

    }
    //else
    //{
    // //printf("i degeri : %d", i);
    // printf(cr);
    // nrf_delay_ms(500);
    //}
    }
    #else

    // This part of the example is just for testing the loopback .
    while (true)
    {
    uart_loopback_test();
    }
    #endif

    }

  • Hi,

    Where in the code that you've shared do you use the driver to configure the GPS?

    regards

    Jared

  • When the code added the line "flow_control = APP_UART_FLOW_CONTROL_DISABLED" and changed the location of the pins on the board, the data came in this way, but upload different codes and the same data is coming. How can I control the future and how can I filter it?

  • Hi,

    Berkay Dudu said:
    When the code added the line "flow_control = APP_UART_FLOW_CONTROL_DISABLED" and changed the location of the pins on the board, the data came in this way, but upload different codes and the same data is coming

    If flow control is enabled then you have to connect RTS and CTS pins in addition to TX and RX, if not then the UART transmission will not start. 

    What pins were you using and which pins did you switch to, are you using a development kit? 

    Berkay Dudu said:
    but upload different codes and the same data is coming. How can I control the future and how can I filter it?

    I'm not sure I understood this question, can you elaborate?

    regards

    Jared 

Reply
  • Hi,

    Berkay Dudu said:
    When the code added the line "flow_control = APP_UART_FLOW_CONTROL_DISABLED" and changed the location of the pins on the board, the data came in this way, but upload different codes and the same data is coming

    If flow control is enabled then you have to connect RTS and CTS pins in addition to TX and RX, if not then the UART transmission will not start. 

    What pins were you using and which pins did you switch to, are you using a development kit? 

    Berkay Dudu said:
    but upload different codes and the same data is coming. How can I control the future and how can I filter it?

    I'm not sure I understood this question, can you elaborate?

    regards

    Jared 

Children
Related