nobodyguy / HX711_zephyr_driver

Out of tree HX711 weight sensor driver for Zephyr RTOS
Apache License 2.0
23 stars 13 forks source link

nRF connect version 2.3.0 with an nrf21540dk_nrf52840 board #5

Closed soundsreal closed 1 year ago

soundsreal commented 1 year ago

Same as this post getting errors. https://devzone.nordicsemi.com/f/nordic-q-a/101179/trouble-with-avia_hx711_calibrate-function-of-nobodyguy-hx711_zephyr_driver

os: ***** BUS FAULT *****
[00:00:13.475,433] os: Precise data bus error
[00:00:13.475,433] os: BFAR Address: 0xf0cead3
[00:00:13.475,463] os: r0/a1: 0x00000834 r1/a2: 0x0000003a r2/a3: 0x0000000a
[00:00:13.475,463] os: r3/a4: 0x20000258 r12/ip: 0x00000313 r14/lr: 0x00000deb
[00:00:13.475,494] os: xpsr: 0x21000000
[00:00:13.475,494] os: Faulting instruction address (r15/pc): 0x00004540
[00:00:13.475,555] os: >>> ZEPHYR FATAL ERROR 0: CPU exception on CPU 0
[00:00:13.475,585] os: Current thread: 0x200007b8 (unknown)
[00:00:13.590,545] fatal_error: Resetting system
soundsreal commented 1 year ago

@PierreNeumann - Can you by any chance have a look at this.

PierreNeumann commented 1 year ago

Hi @soundsreal Yes I can take a look at your issue.

Can you post the prj.conf and devicetree overlay you are using ?

PierreNeumann commented 1 year ago

@soundsreal I have no issue using the original driver code with nrf Connect on a board with nrf52840.

I you want to use the modified code from the nordic devzone you originally referenced, just see my answer from this issue : https://github.com/nobodyguy/HX711_zephyr_driver/issues/4#issuecomment-1632541333

soundsreal commented 1 year ago

Hi @PierreNeumann

There still seems to be an issue but I noticed my error differs.

*** Booting Zephyr OS build v3.2.99-ncs2 ***
ASSERTION FAIL [hx711_dev == ((void *)0)] @ ../src/main.c:106
  Failed to get device binding
[00:00:00.000,976] <err> os: r0/a1:  0x00000004  r1/a2:  0x0000006a  r2/a3:  0x00000006
[00:00:00.001,007] <err> os: r3/a4:  0x00000000 r12/ip:  0x0000006a r14/lr:  0x00011c71
[00:00:00.001,007] <err> os:  xpsr:  0x61000000
[00:00:00.001,037] <err> os: Faulting instruction address (r15/pc): 0x00031ae4
[00:00:00.001,068] <err> os: >>> ZEPHYR FATAL ERROR 4: Kernel panic on CPU 0
[00:00:00.001,098] <err> os: Current thread: 0x200035f8 (unknown)
[00:00:00.413,299] <err> fatal_error: Resetting system
[00:00:00.000,183] <dbg> bt_hci_core: bt_hci_driver_register: Registered SoftDevice Controller
[00:00:00.000,305] <dbg> bt_sdc_hci_driver: configure_memory_usage: BT mempool size: 3464, required: 2704
[00:00:00.000,610] <err> qspi_nor: JEDEC id [00 00 00] expect [c2 28 17]
# RTOS configuration.
CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=3000
CONFIG_HEAP_MEM_POOL_SIZE=1024

# Configure buttons and LEDs.
CONFIG_GPIO=y
CONFIG_DK_LIBRARY=y

# Peripheral configuration.
CONFIG_I2C=y
CONFIG_ADC=y
CONFIG_SPI=y

# Sensor configuration.
CONFIG_SENSOR=y
CONFIG_HX711=y

# Loggging configuration. 
CONFIG_ASSERT=y
CONFIG_RESET_ON_FATAL_ERROR=y
#CONFIG_DISPLAY=y

# SEGGER RTT logging instead of UART
CONFIG_LOG_PRINTK=y
CONFIG_LOG=y
CONFIG_LOG_BACKEND_RTT_MODE_BLOCK=y
#CONFIG_DEBUG_OPTIMIZATIONS=y
CONFIG_USE_SEGGER_RTT=y
CONFIG_LOG_BACKEND_RTT=y
# End of SEGGER RTT

CONFIG_LOG_DEFAULT_LEVEL=4
CONFIG_CBPRINTF_FP_SUPPORT=y

# Enable settings to store data in non-volatile memory
CONFIG_FLASH=y
CONFIG_FLASH_MAP=y
CONFIG_NVS=y
CONFIG_SETTINGS_NVS=y
CONFIG_SETTINGS=y
CONFIG_BT_SETTINGS=y
CONFIG_FLASH_PAGE_LAYOUT=y

# Bluetooth configuration.
CONFIG_BT=y
CONFIG_BT_PERIPHERAL=y
CONFIG_BT_DEVICE_NAME="Test App"
CONFIG_BT_MAX_CONN=2
CONFIG_BT_SMP=y
CONFIG_BT_MAX_PAIRED=2
manifest:
  remotes:
    - name: ncs
      url-base: https://github.com/nrfconnect
  projects:
    - name: sdk-nrf
      remote: ncs
      path: nrf
      revision: v2.3.0
      import: true
      clone-depth: 1
    - name: HX711
      path: modules/HX711
      revision: refs/tags/zephyr-v3.2.0
      url: https://github.com/nobodyguy/HX711_zephyr_driver
  self:
    path: app
{
    hx711 {
        compatible = "avia,hx711";
        status = "okay";
        dout-gpios = <&gpio0 26 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP) >;
        sck-gpios = <&gpio0 27 GPIO_ACTIVE_HIGH>;
        // rate-gpios = <&gpio0 31 GPIO_ACTIVE_HIGH>;
    };
};
#include <zephyr/kernel.h>
#include <zephyr/device.h>
#include <zephyr/devicetree.h>
#include <zephyr/drivers/sensor.h>
#include <zephyr/logging/log.h>
#include <zephyr/sys/util.h>
#include <zephyr/types.h>

#include <dk_buttons_and_leds.h>

#include <sensor/hx711/hx711.h>
#include <stddef.h>
#include <app_ble.h>

LOG_MODULE_REGISTER(main, LOG_LEVEL_DBG);

#define SLEEP_TIME_MS 1000

#define LED_STATUS_1 DK_LED1
#define LED_STATUS_2 DK_LED2
#define LED_STATUS_3 DK_LED3
#define LED_STATUS_4 DK_LED4

#define BTN_1 DK_BTN1_MSK
#define BTN_2 DK_BTN2_MSK
#define BTN_3 DK_BTN3_MSK
#define BTN_4 DK_BTN4_MSK

extern uint32_t peripheral_gatt_write(uint32_t count);

const struct device *hx711_dev;

void set_rate(enum hx711_rate rate)
{
    static struct sensor_value rate_val;

    rate_val.val1 = rate;
    sensor_attr_set(hx711_dev,
            HX711_SENSOR_CHAN_WEIGHT,
            SENSOR_ATTR_SAMPLING_FREQUENCY,
            &rate_val);
}

void measure(void)
{
    static struct sensor_value weight;
    int ret;

    ret = sensor_sample_fetch(hx711_dev);
    if (ret != 0) {
        LOG_ERR("Cannot take measurement: %d", ret);
    } else {
        sensor_channel_get(hx711_dev, HX711_SENSOR_CHAN_WEIGHT, &weight);
        LOG_INF("Weight: %d.%06d grams", weight.val1, weight.val2);
    }
}

void button_changed(uint32_t button_state, uint32_t has_changed)
{
    uint32_t buttons = button_state & has_changed;

    if (buttons & BTN_1) {
        dk_set_led(LED_STATUS_2, 1);
        return;
    }

    if (buttons & BTN_2) {
        dk_set_led(LED_STATUS_3, 1);
        return;
    }
}

void configure_dk_buttons_and_leds(void)
{
    int err = dk_buttons_init(button_changed);

    if (err) {
        LOG_ERR("Cannot init buttons (err: %d)", err);
    }

    err = dk_leds_init();
    if (err) {
        LOG_ERR("Cannot init LEDs (err: %d)", err);
    }
}

void app_ble_adv_start(void)
{
    /* Start advertising */     
    int err = app_ble_init();
    if (err) {
        LOG_INF("Advertising failed to start (err %d)\n", err);
        return;
    }
    LOG_INF("Bluetooth initialization complete!");
    return 0;
}

void main(void)
{   
    static bool led_on;

    configure_dk_buttons_and_leds();

    hx711_dev = DEVICE_DT_GET_ANY(avia_hx711);
    __ASSERT(hx711_dev == NULL, "Failed to get device binding");

    app_ble_adv_start();

    LOG_INF("Running app...");
    while (1) {             
        led_on = !led_on;
        dk_set_led(LED_STATUS_1, led_on);
        k_msleep(SLEEP_TIME_MS);
    }
}
PierreNeumann commented 1 year ago

It's like the hx711 is not found in the devicetree. Is the avia,hx711 node present in the file build/zephyr/zephyr.dts ?

PierreNeumann commented 1 year ago

And @soundsreal I think you missed a / at the beginning of your overlay :

/{
    hx711 {
        compatible = "avia,hx711";
        status = "okay";
        dout-gpios = <&gpio0 26 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP) >;
        sck-gpios = <&gpio0 27 GPIO_ACTIVE_HIGH>;
        // rate-gpios = <&gpio0 31 GPIO_ACTIVE_HIGH>;
    };
};
soundsreal commented 1 year ago

It's there. build/zephyr/zephyr.dts

/dts-v1/;

/ {
    #address-cells = < 0x1 >;
    #size-cells = < 0x1 >;
    model = "Nordic nRF52840 DK NRF52840";
    compatible = "nordic,nrf52840-dk-nrf52840";
    chosen {
        zephyr,entropy = &cryptocell;
        zephyr,flash-controller = &flash_controller;
        zephyr,console = &uart0;
        zephyr,shell-uart = &uart0;
        zephyr,uart-mcumgr = &uart0;
        zephyr,bt-mon-uart = &uart0;
        zephyr,bt-c2h-uart = &uart0;
        zephyr,sram = &sram0;
        zephyr,flash = &flash0;
        zephyr,code-partition = &slot0_partition;
        zephyr,ieee802154 = &ieee802154;
    };
    aliases {
        led0 = &led0;
        led1 = &led1;
        led2 = &led2;
        led3 = &led3;
        pwm-led0 = &pwm_led0;
        sw0 = &button0;
        sw1 = &button1;
        sw2 = &button2;
        sw3 = &button3;
        bootloader-led0 = &led0;
        mcuboot-button0 = &button0;
        mcuboot-led0 = &led0;
        watchdog0 = &wdt0;
        spi-flash0 = &mx25r64;
    };
    soc {
        #address-cells = < 0x1 >;
        #size-cells = < 0x1 >;
        compatible = "nordic,nRF52840-QIAA", "nordic,nRF52840", "nordic,nRF52", "simple-bus";
        interrupt-parent = < &nvic >;
        ranges;
        nvic: interrupt-controller@e000e100 {
            #address-cells = < 0x1 >;
            compatible = "arm,v7m-nvic";
            reg = < 0xe000e100 0xc00 >;
            interrupt-controller;
            #interrupt-cells = < 0x2 >;
            arm,num-irq-priority-bits = < 0x3 >;
            phandle = < 0x1 >;
        };
        systick: timer@e000e010 {
            compatible = "arm,armv7m-systick";
            reg = < 0xe000e010 0x10 >;
            status = "disabled";
        };
        ficr: ficr@10000000 {
            compatible = "nordic,nrf-ficr";
            reg = < 0x10000000 0x1000 >;
            status = "okay";
        };
        uicr: uicr@10001000 {
            compatible = "nordic,nrf-uicr";
            reg = < 0x10001000 0x1000 >;
            status = "okay";
        };
        sram0: memory@20000000 {
            compatible = "mmio-sram";
            reg = < 0x20000000 0x40000 >;
        };
        clock: clock@40000000 {
            compatible = "nordic,nrf-clock";
            reg = < 0x40000000 0x1000 >;
            interrupts = < 0x0 0x1 >;
            status = "okay";
        };
        power: power@40000000 {
            compatible = "nordic,nrf-power";
            reg = < 0x40000000 0x1000 >;
            interrupts = < 0x0 0x1 >;
            status = "okay";
        };
        radio: radio@40001000 {
            compatible = "nordic,nrf-radio";
            reg = < 0x40001000 0x1000 >;
            interrupts = < 0x1 0x1 >;
            status = "okay";
            ieee802154-supported;
            ble-2mbps-supported;
            ble-coded-phy-supported;
            tx-high-power-supported;
            ieee802154: ieee802154 {
                compatible = "nordic,nrf-ieee802154";
                status = "okay";
            };
        };
        uart0: uart@40002000 {
            compatible = "nordic,nrf-uarte";
            reg = < 0x40002000 0x1000 >;
            interrupts = < 0x2 0x1 >;
            status = "okay";
            current-speed = < 0x1c200 >;
            pinctrl-0 = < &uart0_default >;
            pinctrl-1 = < &uart0_sleep >;
            pinctrl-names = "default", "sleep";
        };
        i2c0: arduino_i2c: i2c@40003000 {
            compatible = "nordic,nrf-twi";
            #address-cells = < 0x1 >;
            #size-cells = < 0x0 >;
            reg = < 0x40003000 0x1000 >;
            clock-frequency = < 0x186a0 >;
            interrupts = < 0x3 0x1 >;
            status = "okay";
            pinctrl-0 = < &i2c0_default >;
            pinctrl-1 = < &i2c0_sleep >;
            pinctrl-names = "default", "sleep";
        };
        spi0: spi@40003000 {
            compatible = "nordic,nrf-spi";
            #address-cells = < 0x1 >;
            #size-cells = < 0x0 >;
            reg = < 0x40003000 0x1000 >;
            interrupts = < 0x3 0x1 >;
            max-frequency = < 0x7a1200 >;
            status = "disabled";
            pinctrl-0 = < &spi0_default >;
            pinctrl-1 = < &spi0_sleep >;
            pinctrl-names = "default", "sleep";
        };
        i2c1: i2c@40004000 {
            compatible = "nordic,nrf-twi";
            #address-cells = < 0x1 >;
            #size-cells = < 0x0 >;
            reg = < 0x40004000 0x1000 >;
            clock-frequency = < 0x186a0 >;
            interrupts = < 0x4 0x1 >;
            status = "disabled";
            pinctrl-0 = < &i2c1_default >;
            pinctrl-1 = < &i2c1_sleep >;
            pinctrl-names = "default", "sleep";
        };
        spi1: spi@40004000 {
            compatible = "nordic,nrf-spi";
            #address-cells = < 0x1 >;
            #size-cells = < 0x0 >;
            reg = < 0x40004000 0x1000 >;
            interrupts = < 0x4 0x1 >;
            max-frequency = < 0x7a1200 >;
            status = "okay";
            pinctrl-0 = < &spi1_default >;
            pinctrl-1 = < &spi1_sleep >;
            pinctrl-names = "default", "sleep";
        };
        nfct: nfct@40005000 {
            compatible = "nordic,nrf-nfct";
            reg = < 0x40005000 0x1000 >;
            interrupts = < 0x5 0x1 >;
            status = "disabled";
        };
        gpiote: gpiote@40006000 {
            compatible = "nordic,nrf-gpiote";
            reg = < 0x40006000 0x1000 >;
            interrupts = < 0x6 0x5 >;
            status = "okay";
        };
        adc: adc@40007000 {
            compatible = "nordic,nrf-saadc";
            reg = < 0x40007000 0x1000 >;
            interrupts = < 0x7 0x1 >;
            status = "okay";
            #io-channel-cells = < 0x1 >;
            phandle = < 0x1b >;
        };
        timer0: timer@40008000 {
            compatible = "nordic,nrf-timer";
            status = "okay";
            reg = < 0x40008000 0x1000 >;
            cc-num = < 0x4 >;
            interrupts = < 0x8 0x1 >;
            prescaler = < 0x0 >;
        };
        timer1: timer@40009000 {
            compatible = "nordic,nrf-timer";
            status = "okay";
            reg = < 0x40009000 0x1000 >;
            cc-num = < 0x4 >;
            interrupts = < 0x9 0x1 >;
            prescaler = < 0x0 >;
        };
        timer2: timer@4000a000 {
            compatible = "nordic,nrf-timer";
            status = "okay";
            reg = < 0x4000a000 0x1000 >;
            cc-num = < 0x4 >;
            interrupts = < 0xa 0x1 >;
            prescaler = < 0x0 >;
            phandle = < 0x17 >;
        };
        rtc0: rtc@4000b000 {
            compatible = "nordic,nrf-rtc";
            reg = < 0x4000b000 0x1000 >;
            cc-num = < 0x3 >;
            interrupts = < 0xb 0x1 >;
            status = "okay";
            clock-frequency = < 0x8000 >;
            prescaler = < 0x1 >;
        };
        temp: temp@4000c000 {
            compatible = "nordic,nrf-temp";
            reg = < 0x4000c000 0x1000 >;
            interrupts = < 0xc 0x1 >;
            status = "okay";
        };
        rng: random@4000d000 {
            compatible = "nordic,nrf-rng";
            reg = < 0x4000d000 0x1000 >;
            interrupts = < 0xd 0x1 >;
            status = "okay";
        };
        ecb: ecb@4000e000 {
            compatible = "nordic,nrf-ecb";
            reg = < 0x4000e000 0x1000 >;
            interrupts = < 0xe 0x1 >;
            status = "okay";
        };
        ccm: ccm@4000f000 {
            compatible = "nordic,nrf-ccm";
            reg = < 0x4000f000 0x1000 >;
            interrupts = < 0xf 0x1 >;
            length-field-length-8-bits;
            status = "okay";
        };
        wdt: wdt0: watchdog@40010000 {
            compatible = "nordic,nrf-wdt";
            reg = < 0x40010000 0x1000 >;
            interrupts = < 0x10 0x1 >;
            status = "okay";
        };
        rtc1: rtc@40011000 {
            compatible = "nordic,nrf-rtc";
            reg = < 0x40011000 0x1000 >;
            cc-num = < 0x4 >;
            interrupts = < 0x11 0x1 >;
            status = "okay";
            clock-frequency = < 0x8000 >;
            prescaler = < 0x1 >;
        };
        qdec: qdec0: qdec@40012000 {
            compatible = "nordic,nrf-qdec";
            reg = < 0x40012000 0x1000 >;
            interrupts = < 0x12 0x1 >;
            status = "disabled";
        };
        comp: comparator@40013000 {
            compatible = "nordic,nrf-comp";
            reg = < 0x40013000 0x1000 >;
            interrupts = < 0x13 0x1 >;
            status = "disabled";
            #io-channel-cells = < 0x1 >;
        };
        egu0: swi0: egu@40014000 {
            compatible = "nordic,nrf-egu", "nordic,nrf-swi";
            reg = < 0x40014000 0x1000 >;
            interrupts = < 0x14 0x1 >;
            status = "okay";
        };
        egu1: swi1: egu@40015000 {
            compatible = "nordic,nrf-egu", "nordic,nrf-swi";
            reg = < 0x40015000 0x1000 >;
            interrupts = < 0x15 0x1 >;
            status = "okay";
        };
        egu2: swi2: egu@40016000 {
            compatible = "nordic,nrf-egu", "nordic,nrf-swi";
            reg = < 0x40016000 0x1000 >;
            interrupts = < 0x16 0x1 >;
            status = "okay";
        };
        egu3: swi3: egu@40017000 {
            compatible = "nordic,nrf-egu", "nordic,nrf-swi";
            reg = < 0x40017000 0x1000 >;
            interrupts = < 0x17 0x1 >;
            status = "okay";
        };
        egu4: swi4: egu@40018000 {
            compatible = "nordic,nrf-egu", "nordic,nrf-swi";
            reg = < 0x40018000 0x1000 >;
            interrupts = < 0x18 0x1 >;
            status = "okay";
        };
        egu5: swi5: egu@40019000 {
            compatible = "nordic,nrf-egu", "nordic,nrf-swi";
            reg = < 0x40019000 0x1000 >;
            interrupts = < 0x19 0x1 >;
            status = "okay";
        };
        timer3: timer@4001a000 {
            compatible = "nordic,nrf-timer";
            status = "okay";
            reg = < 0x4001a000 0x1000 >;
            cc-num = < 0x6 >;
            interrupts = < 0x1a 0x1 >;
            prescaler = < 0x0 >;
        };
        timer4: timer@4001b000 {
            compatible = "nordic,nrf-timer";
            status = "okay";
            reg = < 0x4001b000 0x1000 >;
            cc-num = < 0x6 >;
            interrupts = < 0x1b 0x1 >;
            prescaler = < 0x0 >;
        };
        pwm0: pwm@4001c000 {
            compatible = "nordic,nrf-pwm";
            reg = < 0x4001c000 0x1000 >;
            interrupts = < 0x1c 0x1 >;
            status = "okay";
            #pwm-cells = < 0x3 >;
            pinctrl-0 = < &pwm0_default >;
            pinctrl-1 = < &pwm0_sleep >;
            pinctrl-names = "default", "sleep";
            phandle = < 0x19 >;
        };
        pdm0: pdm@4001d000 {
            compatible = "nordic,nrf-pdm";
            reg = < 0x4001d000 0x1000 >;
            interrupts = < 0x1d 0x1 >;
            status = "disabled";
        };
        acl: acl@4001e000 {
            compatible = "nordic,nrf-acl";
            reg = < 0x4001e000 0x1000 >;
            status = "okay";
        };
        flash_controller: flash-controller@4001e000 {
            compatible = "nordic,nrf52-flash-controller";
            reg = < 0x4001e000 0x1000 >;
            partial-erase;
            #address-cells = < 0x1 >;
            #size-cells = < 0x1 >;
            flash0: flash@0 {
                compatible = "soc-nv-flash";
                erase-block-size = < 0x1000 >;
                write-block-size = < 0x4 >;
                reg = < 0x0 0x100000 >;
                partitions {
                    compatible = "fixed-partitions";
                    #address-cells = < 0x1 >;
                    #size-cells = < 0x1 >;
                    boot_partition: partition@0 {
                        label = "mcuboot";
                        reg = < 0x0 0xc000 >;
                    };
                    slot0_partition: partition@c000 {
                        label = "image-0";
                        reg = < 0xc000 0x67000 >;
                    };
                    slot1_partition: partition@73000 {
                        label = "image-1";
                        reg = < 0x73000 0x67000 >;
                    };
                    scratch_partition: partition@da000 {
                        label = "image-scratch";
                        reg = < 0xda000 0x1e000 >;
                    };
                    storage_partition: partition@f8000 {
                        label = "storage";
                        reg = < 0xf8000 0x8000 >;
                    };
                };
            };
        };
        ppi: ppi@4001f000 {
            compatible = "nordic,nrf-ppi";
            reg = < 0x4001f000 0x1000 >;
            status = "okay";
        };
        mwu: mwu@40020000 {
            compatible = "nordic,nrf-mwu";
            reg = < 0x40020000 0x1000 >;
            status = "okay";
        };
        pwm1: pwm@40021000 {
            compatible = "nordic,nrf-pwm";
            reg = < 0x40021000 0x1000 >;
            interrupts = < 0x21 0x1 >;
            status = "disabled";
            #pwm-cells = < 0x3 >;
        };
        pwm2: pwm@40022000 {
            compatible = "nordic,nrf-pwm";
            reg = < 0x40022000 0x1000 >;
            interrupts = < 0x22 0x1 >;
            status = "disabled";
            #pwm-cells = < 0x3 >;
        };
        spi2: spi@40023000 {
            compatible = "nordic,nrf-spi";
            #address-cells = < 0x1 >;
            #size-cells = < 0x0 >;
            reg = < 0x40023000 0x1000 >;
            interrupts = < 0x23 0x1 >;
            max-frequency = < 0x7a1200 >;
            status = "disabled";
            pinctrl-0 = < &spi2_default >;
            pinctrl-1 = < &spi2_sleep >;
            pinctrl-names = "default", "sleep";
        };
        rtc2: rtc@40024000 {
            compatible = "nordic,nrf-rtc";
            reg = < 0x40024000 0x1000 >;
            cc-num = < 0x4 >;
            interrupts = < 0x24 0x1 >;
            status = "okay";
            clock-frequency = < 0x8000 >;
            prescaler = < 0x1 >;
        };
        i2s0: i2s@40025000 {
            compatible = "nordic,nrf-i2s";
            #address-cells = < 0x1 >;
            #size-cells = < 0x0 >;
            reg = < 0x40025000 0x1000 >;
            interrupts = < 0x25 0x1 >;
            status = "disabled";
        };
        usbd: zephyr_udc0: usbd@40027000 {
            compatible = "nordic,nrf-usbd";
            reg = < 0x40027000 0x1000 >;
            interrupts = < 0x27 0x1 >;
            num-bidir-endpoints = < 0x1 >;
            num-in-endpoints = < 0x7 >;
            num-out-endpoints = < 0x7 >;
            num-isoin-endpoints = < 0x1 >;
            num-isoout-endpoints = < 0x1 >;
            status = "okay";
        };
        uart1: arduino_serial: uart@40028000 {
            compatible = "nordic,nrf-uarte";
            reg = < 0x40028000 0x1000 >;
            interrupts = < 0x28 0x1 >;
            status = "okay";
            current-speed = < 0x1c200 >;
            pinctrl-0 = < &uart1_default >;
            pinctrl-1 = < &uart1_sleep >;
            pinctrl-names = "default", "sleep";
        };
        qspi: qspi@40029000 {
            compatible = "nordic,nrf-qspi";
            #address-cells = < 0x1 >;
            #size-cells = < 0x0 >;
            reg = < 0x40029000 0x1000 >, < 0x12000000 0x8000000 >;
            reg-names = "qspi", "qspi_mm";
            interrupts = < 0x29 0x1 >;
            status = "okay";
            pinctrl-0 = < &qspi_default >;
            pinctrl-1 = < &qspi_sleep >;
            pinctrl-names = "default", "sleep";
            mx25r64: mx25r6435f@0 {
                compatible = "nordic,qspi-nor";
                reg = < 0x0 >;
                writeoc = "pp4io";
                readoc = "read4io";
                sck-frequency = < 0x7a1200 >;
                jedec-id = [ C2 28 17 ];
                sfdp-bfp = [ E5 20 F1 FF FF FF FF 03 44 EB 08 6B 08 3B 04 BB EE FF FF FF FF FF 00 FF FF FF 00 FF 0C 20 0F 52 10 D8 00 FF 23 72 F5 00 82 ED 04 CC 44 83 68 44 30 B0 30 B0 F7 C4 D5 5C 00 BE 29 FF F0 D0 FF FF ];
                size = < 0x4000000 >;
                has-dpd;
                t-enter-dpd = < 0x2710 >;
                t-exit-dpd = < 0x88b8 >;
            };
        };
        pwm3: pwm@4002d000 {
            compatible = "nordic,nrf-pwm";
            reg = < 0x4002d000 0x1000 >;
            interrupts = < 0x2d 0x1 >;
            status = "disabled";
            #pwm-cells = < 0x3 >;
        };
        spi3: arduino_spi: spi@4002f000 {
            compatible = "nordic,nrf-spim";
            #address-cells = < 0x1 >;
            #size-cells = < 0x0 >;
            reg = < 0x4002f000 0x1000 >;
            interrupts = < 0x2f 0x1 >;
            max-frequency = < 0x1e84800 >;
            rx-delay-supported;
            rx-delay = < 0x2 >;
            status = "okay";
            cs-gpios = < &arduino_header 0x10 0x1 >;
            pinctrl-0 = < &spi3_default >;
            pinctrl-1 = < &spi3_sleep >;
            pinctrl-names = "default", "sleep";
        };
        gpio0: gpio@50000000 {
            compatible = "nordic,nrf-gpio";
            gpio-controller;
            reg = < 0x50000000 0x200 0x50000500 0x300 >;
            #gpio-cells = < 0x2 >;
            status = "okay";
            port = < 0x0 >;
            phandle = < 0x18 >;
        };
        gpio1: gpio@50000300 {
            compatible = "nordic,nrf-gpio";
            gpio-controller;
            reg = < 0x50000300 0x200 0x50000800 0x300 >;
            #gpio-cells = < 0x2 >;
            ngpios = < 0x10 >;
            status = "okay";
            port = < 0x1 >;
            phandle = < 0x1a >;
        };
        cryptocell: crypto@5002a000 {
            compatible = "nordic,nrf-cc310";
            reg = < 0x5002a000 0x1000 >;
            status = "okay";
            #address-cells = < 0x1 >;
            #size-cells = < 0x1 >;
            cryptocell310: crypto@5002b000 {
                compatible = "arm,cryptocell-310";
                reg = < 0x5002b000 0x1000 >;
                interrupts = < 0x2a 0x1 >;
            };
        };
    };
    pinctrl: pin-controller {
        compatible = "nordic,nrf-pinctrl";
        uart0_default: uart0_default {
            phandle = < 0x2 >;
            group1 {
                psels = < 0x6 >, < 0x20005 >;
            };
            group2 {
                psels = < 0x10008 >, < 0x30007 >;
                bias-pull-up;
            };
        };
        uart0_sleep: uart0_sleep {
            phandle = < 0x3 >;
            group1 {
                psels = < 0x6 >, < 0x10008 >, < 0x20005 >, < 0x30007 >;
                low-power-enable;
            };
        };
        uart1_default: uart1_default {
            phandle = < 0x10 >;
            group1 {
                psels = < 0x10021 >;
                bias-pull-up;
            };
            group2 {
                psels = < 0x22 >;
            };
        };
        uart1_sleep: uart1_sleep {
            phandle = < 0x11 >;
            group1 {
                psels = < 0x10021 >, < 0x22 >;
                low-power-enable;
            };
        };
        i2c0_default: i2c0_default {
            phandle = < 0x4 >;
            group1 {
                psels = < 0xc001a >, < 0xb001b >;
            };
        };
        i2c0_sleep: i2c0_sleep {
            phandle = < 0x5 >;
            group1 {
                psels = < 0xc001a >, < 0xb001b >;
                low-power-enable;
            };
        };
        i2c1_default: i2c1_default {
            phandle = < 0x8 >;
            group1 {
                psels = < 0xc001e >, < 0xb001f >;
            };
        };
        i2c1_sleep: i2c1_sleep {
            phandle = < 0x9 >;
            group1 {
                psels = < 0xc001e >, < 0xb001f >;
                low-power-enable;
            };
        };
        pwm0_default: pwm0_default {
            phandle = < 0xc >;
            group1 {
                psels = < 0x16000d >;
                nordic,invert;
            };
        };
        pwm0_sleep: pwm0_sleep {
            phandle = < 0xd >;
            group1 {
                psels = < 0x16000d >;
                low-power-enable;
            };
        };
        spi0_default: spi0_default {
            phandle = < 0x6 >;
            group1 {
                psels = < 0x4001b >, < 0x5001a >, < 0x6001d >;
            };
        };
        spi0_sleep: spi0_sleep {
            phandle = < 0x7 >;
            group1 {
                psels = < 0x4001b >, < 0x5001a >, < 0x6001d >;
                low-power-enable;
            };
        };
        spi1_default: spi1_default {
            phandle = < 0xa >;
            group1 {
                psels = < 0x4001f >, < 0x5001e >, < 0x60028 >;
            };
        };
        spi1_sleep: spi1_sleep {
            phandle = < 0xb >;
            group1 {
                psels = < 0x4001f >, < 0x5001e >, < 0x60028 >;
                low-power-enable;
            };
        };
        spi2_default: spi2_default {
            phandle = < 0xe >;
            group1 {
                psels = < 0x40013 >, < 0x50014 >, < 0x60015 >;
            };
        };
        spi2_sleep: spi2_sleep {
            phandle = < 0xf >;
            group1 {
                psels = < 0x40013 >, < 0x50014 >, < 0x60015 >;
                low-power-enable;
            };
        };
        qspi_default: qspi_default {
            phandle = < 0x12 >;
            group1 {
                psels = < 0x1d0013 >, < 0x1f0014 >, < 0x200015 >, < 0x210016 >, < 0x220017 >, < 0x1e0011 >;
            };
        };
        qspi_sleep: qspi_sleep {
            phandle = < 0x13 >;
            group1 {
                psels = < 0x1d0013 >, < 0x1f0014 >, < 0x200015 >, < 0x210016 >, < 0x220017 >;
                low-power-enable;
            };
            group2 {
                psels = < 0x1e0011 >;
                low-power-enable;
                bias-pull-up;
            };
        };
        spi3_default: spi3_default {
            phandle = < 0x15 >;
            group1 {
                psels = < 0x4002f >, < 0x6002e >, < 0x5002d >;
            };
        };
        spi3_sleep: spi3_sleep {
            phandle = < 0x16 >;
            group1 {
                psels = < 0x4002f >, < 0x6002e >, < 0x5002d >;
                low-power-enable;
            };
        };
    };
    rng_hci: entropy_bt_hci {
        compatible = "zephyr,bt-hci-entropy";
        status = "okay";
    };
    cpus {
        #address-cells = < 0x1 >;
        #size-cells = < 0x0 >;
        cpu@0 {
            device_type = "cpu";
            compatible = "arm,cortex-m4f";
            reg = < 0x0 >;
            #address-cells = < 0x1 >;
            #size-cells = < 0x1 >;
            itm: itm@e0000000 {
                compatible = "arm,armv7m-itm";
                reg = < 0xe0000000 0x1000 >;
                swo-ref-frequency = < 0x1e84800 >;
            };
        };
    };
    sw_pwm: sw-pwm {
        compatible = "nordic,nrf-sw-pwm";
        status = "disabled";
        generator = < &timer2 >;
        clock-prescaler = < 0x0 >;
        #pwm-cells = < 0x3 >;
    };
    leds {
        compatible = "gpio-leds";
        led0: led_0 {
            gpios = < &gpio0 0xd 0x1 >;
            label = "Green LED 0";
        };
        led1: led_1 {
            gpios = < &gpio0 0xe 0x1 >;
            label = "Green LED 1";
        };
        led2: led_2 {
            gpios = < &gpio0 0xf 0x1 >;
            label = "Green LED 2";
        };
        led3: led_3 {
            gpios = < &gpio0 0x10 0x1 >;
            label = "Green LED 3";
        };
    };
    pwmleds {
        compatible = "pwm-leds";
        pwm_led0: pwm_led_0 {
            pwms = < &pwm0 0x0 0x1312d00 0x1 >;
        };
    };
    buttons {
        compatible = "gpio-keys";
        button0: button_0 {
            gpios = < &gpio0 0xb 0x11 >;
            label = "Push button switch 0";
        };
        button1: button_1 {
            gpios = < &gpio0 0xc 0x11 >;
            label = "Push button switch 1";
        };
        button2: button_2 {
            gpios = < &gpio0 0x18 0x11 >;
            label = "Push button switch 2";
        };
        button3: button_3 {
            gpios = < &gpio0 0x19 0x11 >;
            label = "Push button switch 3";
        };
    };
    arduino_header: connector {
        compatible = "arduino-header-r3";
        #gpio-cells = < 0x2 >;
        gpio-map-mask = < 0xffffffff 0xffffffc0 >;
        gpio-map-pass-thru = < 0x0 0x3f >;
        gpio-map = < 0x0 0x0 &gpio0 0x3 0x0 >, < 0x1 0x0 &gpio0 0x4 0x0 >, < 0x2 0x0 &gpio0 0x1c 0x0 >, < 0x3 0x0 &gpio0 0x1d 0x0 >, < 0x4 0x0 &gpio0 0x1e 0x0 >, < 0x5 0x0 &gpio0 0x1f 0x0 >, < 0x6 0x0 &gpio1 0x1 0x0 >, < 0x7 0x0 &gpio1 0x2 0x0 >, < 0x8 0x0 &gpio1 0x3 0x0 >, < 0x9 0x0 &gpio1 0x4 0x0 >, < 0xa 0x0 &gpio1 0x5 0x0 >, < 0xb 0x0 &gpio1 0x6 0x0 >, < 0xc 0x0 &gpio1 0x7 0x0 >, < 0xd 0x0 &gpio1 0x8 0x0 >, < 0xe 0x0 &gpio1 0xa 0x0 >, < 0xf 0x0 &gpio1 0xb 0x0 >, < 0x10 0x0 &gpio1 0xc 0x0 >, < 0x11 0x0 &gpio1 0xd 0x0 >, < 0x12 0x0 &gpio1 0xe 0x0 >, < 0x13 0x0 &gpio1 0xf 0x0 >, < 0x14 0x0 &gpio0 0x1a 0x0 >, < 0x15 0x0 &gpio0 0x1b 0x0 >;
        phandle = < 0x14 >;
    };
    arduino_adc: analog-connector {
        compatible = "arduino,uno-adc";
        #io-channel-cells = < 0x1 >;
        io-channel-map = < 0x0 &adc 0x1 >, < 0x1 &adc 0x2 >, < 0x2 &adc 0x4 >, < 0x3 &adc 0x5 >, < 0x4 &adc 0x6 >, < 0x5 &adc 0x7 >;
    };
    hx711 {
        compatible = "avia,hx711";
        status = "okay";
        dout-gpios = < &gpio0 0x1a 0x10 >;
        sck-gpios = < &gpio0 0x1b 0x0 >;
    };
};
soundsreal commented 1 year ago

Does it help to mention this is a workspace application.

soundsreal commented 1 year ago

And @soundsreal I think you missed a / at the beginning of your overlay :

/{
  hx711 {
      compatible = "avia,hx711";
      status = "okay";
      dout-gpios = <&gpio0 26 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP) >;
      sck-gpios = <&gpio0 27 GPIO_ACTIVE_HIGH>;
      // rate-gpios = <&gpio0 31 GPIO_ACTIVE_HIGH>;
  };
};

Sorry I did that to force formatting, it's there on my side.

PierreNeumann commented 1 year ago

No @soundsreal, I use it too in a workspace.

There is a problem with the assertion. I never run the main example with CONFIG_ASSERT=y.

I think we should use this line instead : __ASSERT(hx711_dev, "Failed to get device binding");

or __ASSERT(hx711_dev != NULL, "Failed to get device binding");

soundsreal commented 1 year ago

Hi thank you so much it works!

# Loggging configuration. 
#CONFIG_ASSERT=y
CONFIG_RESET_ON_FATAL_ERROR=y

What's the difference should the sample code get an update then?


// works.
__ASSERT(hx711_dev, "Failed to get device binding"); 

// fails.
__ASSERT(hx711_dev == NULL, "Failed to get device binding");
soundsreal commented 1 year ago

okay so I tested everything again and it seems that CONFIG_ASSERT=y was the issue.

    This enables the __ASSERT() macro in the kernel code. If an assertion
      fails, the policy for what to do is controlled by the implementation
      of the assert_post_action() function, which by default will trigger
      a fatal error.

      Disabling this option will cause assertions to compile to nothing,
      improving performance and system footprint.

https://developer.nordicsemi.com/nRF_Connect_SDK/doc/1.9.2-dev1/kconfig/CONFIG_ASSERT.html

// works.
__ASSERT(hx711_dev == NULL, "Failed to get device binding");

Thank you again.

00> [00:00:00.000,152] <dbg> bt_hci_core: bt_hci_driver_register: Registered SoftDevice Controller
00> [00:00:00.000,274] <dbg> bt_sdc_hci_driver: configure_memory_usage: BT mempool size: 3464, required: 2704
00> [00:00:00.000,518] <err> qspi_nor: JEDEC id [00 00 00] expect [c2 28 17]
00> *** Booting Zephyr OS build v3.2.99-ncs2 ***
00> [00:00:00.000,823] <inf> main: Device is 0x326bc, name is hx711
00> [00:00:00.000,823] <inf> main: Calculating offset...
00> [00:00:00.306,457] <inf> main: Waiting for known weight of 100 grams...
00> [00:00:00.306,488] <inf> main:  5..
00> [00:00:01.306,610] <inf> main:  4..
00> [00:00:02.306,671] <inf> main:  3..
00> [00:00:03.306,793] <inf> main:  2..
00> [00:00:04.306,915] <inf> main:  1..
00> [00:00:05.307,037] <inf> main:  0..
00> [00:00:06.632,720] <dbg> bt_sdc_hci_driver: event_packet_process: Command Complete (0x200a) status: 0x00, ncmd: 1, len 4
00> --- 446 messages dropped ---
00> [00:00:06.632,965] <inf> app_ble: Bluetooth initialization complete!
00> [00:00:06.632,995] <inf> main: Bluetooth initialization complete!
00> [00:00:06.632,995] <inf> main: Running app...
00> [00:00:06.633,361] <dbg> bt_gatt: bt_gatt_attr_read: handle 0x0000 offset 0 length 2
00> [00:00:06.633,422] <dbg> bt_gatt: bt_gatt_attr_read: handle 0x0000 offset 0 length 5
00> [00:00:06.633,666] <dbg> bt_gatt: bt_gatt_attr_read: handle 0x0000 offset 0 length 5
00> [00:00:06.633,911] <dbg> bt_gatt: bt_gatt_attr_read: handle 0x0000 offset 0 length 5
00> [00:00:06.633,941] <dbg> bt_gatt: bt_gatt_attr_read: handle 0x0000 offset 0 length 2
00> [00:00:06.633,972] <dbg> bt_gatt: bt_gatt_attr_read: handle 0x0000 offset 0 length 5
00> [00:00:06.634,216] <dbg> bt_gatt: bt_gatt_attr_read: handle 0x0000 offset 0 length 5
00> [00:00:06.634,460] <dbg> bt_gatt: bt_gatt_attr_read: handle 0x0000 offset 0 length 5
00> [00:00:06.634,490] <dbg> bt_gatt: bt_gatt_attr_read: handle 0x0000 offset 0 length 16
00> [00:00:06.634,735] <dbg> bt_gatt: bt_gatt_attr_read: handle 0x0000 offset 0 length 19
00> [00:00:06.635,192] <dbg> bt_gatt: bt_gatt_attr_read: handle 0x0000 offset 0 length 19
00> [00:00:06.635,711] <dbg> bt_gatt: bt_gatt_attr_read: handle 0x0000 offset 0 length 19
00> [00:00:06.635,986] <dbg> bt_gatt: bt_gatt_attr_read: handle 0x0000 offset 0 length 19
00> [00:00:06.636,749] <dbg> bt_gatt: db_hash_gen: Hash: 
00>                                   04 76 5e ca 62 04 5f 4e  17 3d 24 7c 63 e9 b8 1f |.v^.b._N .=$|c...
00> [00:00:06.636,779] <dbg> bt_gatt: db_hash_process: Database Hash matches
00> [00:00:06.663,085] <dbg> bt_hci_core: bt_recv: buf 0x20009a9c len 68
00> [00:00:06.663,116] <dbg> bt_hci_core: rx_work_handler: Getting net_buf from queue
00> [00:00:06.663,146] <dbg> bt_hci_core: rx_work_handler: buf 0x20009a9c type 1 len 68
00> [00:00:06.663,146] <dbg> bt_hci_core: hci_event: event 0x3e
00> [00:00:06.663,177] <dbg> bt_hci_core: hci_le_meta_event: subevent 0x08
00> [00:00:06.663,177] <dbg> bt_ecc: bt_hci_evt_le_pkey_complete: status: 0x00
00> [00:00:06.663,208] <dbg> bt_smp: bt_smp_pkey_ready: 
00> [00:00:08.633,148] <inf> main: == Test measure ==
00> [00:00:08.633,178] <inf> main: = Setting sampling rate to 10Hz.
00> [00:00:08.633,331] <inf> main: Weight: 440.000000 grams
00> [00:00:09.633,422] <inf> main: = Setting sampling rate to 80Hz.
00> [00:00:09.633,575] <inf> main: Weight: -5059.000000 grams
00> [00:00:11.633,728] <inf> main: == Test measure ==
00> [00:00:11.633,758] <inf> main: = Setting sampling rate to 10Hz.
00> [00:00:11.633,911] <inf> main: Weight: 340.000000 grams
00> [00:00:12.634,002] <inf> main: = Setting sampling rate to 80Hz.
00> [00:00:12.634,155] <inf> main: Weight: -259.000000 grams
00> [00:00:14.634,307] <inf> main: == Test measure ==
00> [00:00:14.634,338] <inf> main: = Setting sampling rate to 10Hz.
00> [00:00:14.634,490] <inf> main: Weight: 540.000000 grams
00> [00:00:15.634,582] <inf> main: = Setting sampling rate to 80Hz.
00> [00:00:15.634,735] <inf> main: Weight: -859.000000 grams
00> [00:00:17.634,887] <inf> main: == Test measure ==
00> [00:00:17.634,918] <inf> main: = Setting sampling rate to 10Hz.
00> [00:00:17.635,070] <inf> main: Weight: -159.000000 grams
00> [00:00:18.635,162] <inf> main: = Setting sampling rate to 80Hz.
00> [00:00:18.635,314] <inf> main: Weight: -659.000000 grams
00> [00:00:20.635,467] <inf> main: == Test measure ==
00> [00:00:20.635,498] <inf> main: = Setting sampling rate to 10Hz.
00> [00:00:20.635,650] <inf> main: Weight: -259.000000 grams
00> [00:00:21.635,742] <inf> main: = Setting sampling rate to 80Hz.
00> [00:00:21.635,894] <inf> main: Weight: 440.000000 grams
00> [00:00:23.636,047] <inf> main: == Test measure ==
00> [00:00:23.636,077] <inf> main: = Setting sampling rate to 10Hz.
00> [00:00:23.636,230] <inf> main: Weight: -5159.000000 grams
00> [00:00:24.636,322] <inf> main: = Setting sampling rate to 80Hz.
00> [00:00:24.636,474] <inf> main: Weight: 540.000000 grams
00> [00:00:26.636,627] <inf> main: == Test measure ==
00> [00:00:26.636,657] <inf> main: = Setting sampling rate to 10Hz.
00> [00:00:26.636,810] <inf> main: Weight: -659.000000 grams
00> [00:00:27.636,901] <inf> main: = Setting sampling rate to 80Hz.
00> [00:00:27.637,054] <inf> main: Weight: -409070.000000 grams
00> [00:00:29.637,207] <inf> main: == Test measure ==
00> [00:00:29.637,237] <inf> main: = Setting sampling rate to 10Hz.
00> [00:00:29.637,390] <inf> main: Weight: 540.000000 grams
00> [00:00:30.637,481] <inf> main: = Setting sampling rate to 80Hz.
00> [00:00:30.637,634] <inf> main: Weight: -259.000000 grams
00> [00:00:32.637,786] <inf> main: == Test measure ==
00> [00:00:32.637,817] <inf> main: = Setting sampling rate to 10Hz.
00> [00:00:32.637,969] <inf> main: Weight: 340.000000 grams
00> [00:00:33.638,061] <inf> main: = Setting sampling rate to 80Hz.
00> [00:00:33.638,214] <inf> main: Weight: 340.000000 grams
00> [00:00:35.638,366] <inf> main: == Test measure ==
00> [00:00:35.638,397] <inf> main: = Setting sampling rate to 10Hz.
00> [00:00:35.638,549] <inf> main: Weight: -159.000000 grams
00> [00:00:36.638,641] <inf> main: = Setting sampling rate to 80Hz.
00> [00:00:36.638,793] <inf> main: Weight: 140.000000 grams
00> [00:00:38.638,946] <inf> main: == Test measure ==
00> [00:00:38.638,977] <inf> main: = Setting sampling rate to 10Hz.
00> [00:00:38.639,129] <inf> main: Weight: 540.000000 grams
00> [00:00:39.639,221] <inf> main: = Setting sampling rate to 80Hz.
00> [00:00:39.639,373] <inf> main: Weight: 540.000000 grams
00> [00:00:41.639,526] <inf> main: == Test measure ==
00> [00:00:41.639,556] <inf> main: = Setting sampling rate to 10Hz.
00> [00:00:41.639,709] <inf> main: Weight: 540.000000 grams
00> [00:00:42.639,801] <inf> main: = Setting sampling rate to 80Hz.
00> [00:00:42.639,953] <inf> main: Weight: -259.000000 grams