This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Interfacing nRF52832 with ds18b20

Hello guys,

                 I'm trying to interface nrf52832 with ds18b20 temperature sensor and I'm using this code https://github.com/sigurdnev/Nordic-DS18B20 and I'm getting the output value but sometimes I'm getting temperature value as -0.063 and sometimes some random values I'm completely new to nRF so I don't know what I'm doing wrong

Parents Reply Children
  • How does your main.c file look like? is it 100% the same as the example main.c ?

    The example is very basic, and in a normal application, you likely want to trigger the reading in a app_timer callback so that the GPIO reading happens at a higher priority level, so that it's not preempted by other interrupts.

  • Hi,

    After your suggestion I added app_timer in the main.c  but I'm getting an error, I have added the images of the main code and the error I got, Can you tell why I'm  doing wrong

  • From the screenshots, it looks like you used the example from github(without modification) when you experienced this issue. In that case, there should not be any interrupts happening, that could cause the GPIO reading/writing timing to fail. You could try to start the HFCLK from the crystal oscillator, and see if that makes any difference. Also check the wiring to the sensor, and make sure they are all properly connected.

      // Start HFCLK from crystal oscillator
      NRF_CLOCK->TASKS_HFCLKSTART = 1;
      while (NRF_CLOCK->EVENTS_HFCLKSTARTED == 0);

  • Ok this is what I have tried, and this is my main.c

    /**
     * Copyright (c) 2015 - 2018, Nordic Semiconductor ASA
     * 
     * All rights reserved.
     * 
     * Redistribution and use in source and binary forms, with or without modification,
     * are permitted provided that the following conditions are met:
     * 
     * 1. Redistributions of source code must retain the above copyright notice, this
     *    list of conditions and the following disclaimer.
     * 
     * 2. Redistributions in binary form, except as embedded into a Nordic
     *    Semiconductor ASA integrated circuit in a product or a software update for
     *    such product, must reproduce the above copyright notice, this list of
     *    conditions and the following disclaimer in the documentation and/or other
     *    materials provided with the distribution.
     * 
     * 3. Neither the name of Nordic Semiconductor ASA nor the names of its
     *    contributors may be used to endorse or promote products derived from this
     *    software without specific prior written permission.
     * 
     * 4. This software, with or without modification, must only be used with a
     *    Nordic Semiconductor ASA integrated circuit.
     * 
     * 5. Any software provided in binary form under this license must not be reverse
     *    engineered, decompiled, modified and/or disassembled.
     * 
     * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
     * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
     * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
     * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
     * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     * 
     */
    
    #include "nrf_gpio.h"
    #include "nrf_delay.h"
    #include "app_timer.h"
    #include "nrf_drv_clock.h"
    
    #include <stdio.h>
    
    #include "ds18b20.h"
    
    //Datasheet: https://datasheets.maximintegrated.com/en/ds/DS18B20.pdf
    
    static float temp = 0;
    
    static void lfclk_request(void)
    {
        ret_code_t err_code = nrf_drv_clock_init();
        APP_ERROR_CHECK(err_code);
        nrf_drv_clock_lfclk_request(NULL);
    }
    
    APP_TIMER_DEF(m_repeated_timer_id);//ADDED
    
    /*static void repeated_timer_handler(void * p_context)
    {
        nrf_drv_gpiote_out_toggle(LED_1);
    }*/
    
    static void timers_init(void)
    {
        ret_code_t err_code = app_timer_init();
        APP_ERROR_CHECK(err_code);
    }
    
    /*static void app_create_timers()
    {
        ret_code_t err_code;
    
        // Create timers
        err_code = app_timer_create(&m_repeated_timer_id,
                                    APP_TIMER_MODE_REPEATED,
                                    ds18b20_get_temp_method_2);
        APP_ERROR_CHECK(err_code);
        return;
    }*/
    
    void main()
    {
        NRF_CLOCK->TASKS_HFCLKSTART = 1;
        while (NRF_CLOCK->EVENTS_HFCLKSTARTED == 0);
        lfclk_request();
        timers_init();
        ds18b20_setResolution(12);
    
       //temp = ds18b20_get_temp_method_2();
       //printf("Temperature: %.3f \r\n", temp);
    
        while(1)
        {   
            NRF_CLOCK->TASKS_HFCLKSTART = 1;
            while (NRF_CLOCK->EVENTS_HFCLKSTARTED == 0);
            nrf_delay_ms(2000);
            timers_init();
            temp =app_timer_start(&m_repeated_timer_id, APP_TIMER_MODE_REPEATED,ds18b20_get_temp_method_2);
            //ret_code_t err_code =app_timer_start(&m_repeated_timer_id, APP_TIMER_MODE_REPEATED,ds18b20_get_temp_method_2); 
            APP_ERROR_CHECK(temp);
            //temp = app_timer_stop(&m_repeated_timer_id, APP_TIMER_MODE_REPEATED,ds18b20_get_temp_method_2);
            APP_ERROR_CHECK(temp);
            //temp = app_timer_start(m_repeated_timer_id,APP_TIMER_TICKS(0),NULL); // timer for 3secs
            //APP_ERROR_CHECK(temp);
            //temp = ds18b20_get_temp_method_2();
            //temp = ds18b20_get_temp();
            printf("Temperature: %.3f \r\n", temp);
           
        }
    }
    
    
    /** @} */

Related