Pehea e hoʻopili ai i ka HX711 ADC i NRF52832

1. Hoʻomau

ʻO ka papa kuhikuhi ka hana o ka hoʻomohala ʻana i kahi protocol kamaʻilio no ka microcontroller nrf52832 me ʻelua hapa-alahaka ʻāpana kānana Kina.

ʻAʻole maʻalahi ka hana, no ka mea, ua loaʻa iaʻu ka nele o ka ʻike maopopo. ʻOi aku paha ka "aʻa o ka hewa" i loko o ka SDK mai Nordic Semiconductor ponoʻī - hoʻomau mau ʻia nā mana hou, kekahi mau hana hou a huikau. Pono wau e kākau i nā mea a pau mai ka wā kahiko.

Manaʻo wau e pili pono ana kēia kumuhana ma muli o ka loaʻa ʻana o kēia puʻupuʻu BLE a me kahi pūʻulu o nā "maikaʻi" no ke ʻano mālama ola. Akā ʻaʻole wau e hele hohonu i ka ʻāpana ʻenehana, no ka mea, ua kākau ʻia nā ʻatikala he nui ma kēia kumuhana.

2. wehewehe papahana

Pehea e hoʻopili ai i ka HX711 ADC i NRF52832

hao:

  • Adafruit Feather nRF52 Bluefruit LE (he aha ka mea i loaʻa ma ka lima)
  • HX711 ADC
  • 2 pcs. (50x2 kg)
  • Mea papahana ST-LINK V2

palupalu:

  • IDE VSCODE
  • NRF SDK 16
  • OpenOCD
  • Mea papahana ST-LINK V2

Aia nā mea āpau i hoʻokahi papahana, pono ʻoe e hoʻololi i ka Makefile (e wehewehe i kahi o kāu SDK).

3. Ka wehewehe o ke code

E hoʻohana mākou i ka module GPIOTE e hana me nā peripheral e pili ana i ka hoʻopaʻa ʻana i nā hana a me nā hanana, a me ka module PPI e hoʻoili i ka ʻikepili mai kahi peripheral i kekahi me ke komo ʻole o kahi kaʻina hana.

ret_code_t err_code;
   err_code = nrf_drv_gpiote_out_init(PD_SCK, &config);//настраеваем на выход
   nrf_drv_gpiote_out_config_t config = GPIOTE_CONFIG_OUT_TASK_TOGGLE(false);//будем передергивать пин для импульса
   err_code = nrf_drv_gpiote_out_init(PD_SCK, &config);//настраеваем на выход

Hoʻonohonoho mākou i ka laina hoʻonohonoho PD_SCL i ka hoʻopuka e hana i nā pulses me ka lōʻihi o 10 μs.

   nrf_drv_gpiote_in_config_t  gpiote_config = GPIOTE_CONFIG_IN_SENSE_HITOLO(false);// переход уровня с высокого на низкий
   nrf_gpio_cfg_input(DOUT, NRF_GPIO_PIN_NOPULL);// на вход без подтяжки
   err_code = nrf_drv_gpiote_in_init(DOUT, &gpiote_config, gpiote_evt_handler); 

static void gpiote_evt_handler(nrf_drv_gpiote_pin_t pin, nrf_gpiote_polarity_t action)
{
    nrf_drv_gpiote_in_event_disable(DOUT);//отключаем прерывание
    nrf_drv_timer_enable(&m_timer0);//включаем таймер
}
 

Hoʻonohonoho mākou i ka laina ʻikepili DOUT e heluhelu i ke kūlana mākaukau o ka HX711; inā he haʻahaʻa haʻahaʻa, hoʻāla ʻia kahi mea hoʻokele a mākou e hoʻopau ai i ka interrupt a hoʻomaka i kahi manawa e hoʻohua i nā pulses uaki ma ka puka PD_SCL.

 err_code = nrf_drv_ppi_channel_alloc(&m_ppi_channel1);
   APP_ERROR_CHECK(err_code);
   err_code = nrf_drv_ppi_channel_assign(m_ppi_channel1,                                         nrf_drv_timer_event_address_get(&m_timer0, NRF_TIMER_EVENT_COMPARE0),                                           nrf_drv_gpiote_out_task_addr_get(PD_SCK));// подключаем таймер к выходу
   APP_ERROR_CHECK(err_code);
   err_code = nrf_drv_ppi_channel_enable(m_ppi_channel1);// включаем канал
   APP_ERROR_CHECK(err_code);
   nrf_drv_gpiote_out_task_enable(PD_SCK); 

// hiki iā gpiote

Ma hope o kēlā, hoʻomaka mākou i ka module PPI a hoʻohui i kā mākou manawa i ka PD_SCL output e hana i nā pulses me ka lōʻihi o 10 μs i ka wā e kū ai kahi hanana hoʻohālikelike, a hoʻohuli pū i ka module GPIOTE.


nrf_drv_timer_config_t timer_cfg = NRF_DRV_TIMER_DEFAULT_CONFIG;// по умолчанию
   timer_cfg.frequency = NRF_TIMER_FREQ_1MHz;// тактируем на частоте 1Мгц
   ret_code_t err_code = nrf_drv_timer_init(&m_timer0, &timer_cfg, timer0_event_handler);
   APP_ERROR_CHECK(err_code);
   nrf_drv_timer_extended_compare(&m_timer0,
                                  NRF_TIMER_CC_CHANNEL0,
                                  nrf_drv_timer_us_to_ticks(&m_timer0,
                                                            10),
                                  NRF_TIMER_SHORT_COMPARE0_CLEAR_MASK,
                                  true);// срабатывает по сравнению

Hoʻomaka mākou i ka zero timer a me kāna mea lawelawe.

  if(m_counter%2 != 0 && m_counter<=48){
       buffer <<= 1;// переменная считанных даных
        c_counter++;// счетчик положительных  импульсов
           if(nrf_gpio_pin_read(DOUT))buffer++;//считываем состояние входа
   }

ʻO ka mea hoihoi loa e hana ʻia ma ka mea hoʻohana manawa. ʻO ka manawa pulse he 20 μs. Makemake mākou i nā puʻupuʻu ʻē aʻe (ma ka ʻaoʻao piʻi) a inā ʻaʻole i ʻoi aku ko lākou helu ma mua o 24, a he 48 mau hanana.

Mai ka ʻikepili e pili ana i ka helu o nā pulses ma kahi o 25, e pili ana i ka loaʻa ʻana o 128 (ma ke code aʻu i hoʻohana ai i 25 pulses), ua like kēia me 50 mau hanana manawa, e hōʻike ana i ka hopena o ka ʻikepili.

 ++m_counter;// счетчик событий
if(m_counter==50){
      nrf_drv_timer_disable(&m_timer0);// отключаем таймер
       m_simple_timer_state = SIMPLE_TIMER_STATE_STOPPED;//
       buffer = buffer ^ 0x800000;
       hx711_stop();//jотключаем hx711
       }
   

Ma hope o kēia, hoʻopau mākou i ka manawa a hana i ka ʻikepili (e like me ka datasheet) a hoʻololi i ka HX711 i ke ʻano haʻahaʻa haʻahaʻa.


static void repeated_timer_handler(void * p_context)
{
   nrf_drv_gpiote_out_toggle(LED_2);
   if(m_simple_timer_state == SIMPLE_TIMER_STATE_STOPPED){
      	hx711_start();// включаем hx711
       nrf_drv_gpiote_out_toggle(LED_1);
       m_simple_timer_state = SIMPLE_TIMER_STATE_STARTED;
   }
  
}
/**@brief Create timers.
*/
static void create_timers()
{
   ret_code_t err_code;
 
   // Create timers
   err_code = app_timer_create(&m_repeated_timer_id,
                               APP_TIMER_MODE_REPEATED,
                               repeated_timer_handler);
   APP_ERROR_CHECK(err_code);
}

Manaʻo mākou i nā hanana mai ka manawa RTC me kahi manawa o 10 s (ʻo ia ma kou manaʻo) a hoʻomaka i ka HX711 i ka mea hoʻohana, e hoʻopau i ka laina DOUT.

Aia hoʻokahi wahi, hoʻopuka ʻia nā lāʻau ma o UART (baud rate 115200, TX - 6 pins, RX - 8 pins) aia nā hoʻonohonoho āpau ma sdk_config.h

Pehea e hoʻopili ai i ka HX711 ADC i NRF52832

haʻina

Mahalo iā ʻoukou a pau no ko ʻoukou nānā ʻana, manaʻolana wau e pono kēia ʻatikala a e hōʻemi ana i ka manawa waiwai no nā mea hoʻomohala e ʻimi i kahi hopena. Makemake wau e ʻōlelo ʻo ke ala ʻenehana a Nordic e hoʻohana ai i kāna mau paepae he mea hoihoi loa ia mai ka manaʻo o ka pono o ka ikehu.

PS

Ke hoʻomohala nei ka papahana, no laila, inā makemake kēia kumuhana, ma ka ʻatikala aʻe e hoʻāʻo wau e wehewehe i ka algorithm no ka calibrating weight sensors, a me ka hoʻopili ʻana i ka waihona BLE.

Nā Pono

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka