Momwe mungalumikizire HX711 ADC ku NRF52832

1. Kuyamba

Pazokambirana inali ntchito yopanga njira yolumikizirana ya nrf52832 microcontroller yokhala ndi zida ziwiri zaku China.

Ntchitoyo inakhala yovuta, popeza ndinalibe chidziŵitso chomveka. Ndizotheka kuti "muzu wa zoyipa" uli mu SDK kuchokera ku Nordic Semiconductor palokha - zosintha zamitundu yonse, kubwerezabwereza komanso kusokoneza magwiridwe antchito. Ndinayenera kulemba zonse kuyambira pachiyambi.

Ndikuganiza kuti mutuwu ndi wofunikira potengera kuti chip iyi ili ndi stack ya BLE ndi "zabwino" zamachitidwe opulumutsa mphamvu. Koma sindidzalowa mozama mu gawo laukadaulo, popeza zolemba zambiri zalembedwa pamutuwu.

2. Kufotokozera kwa polojekiti

Momwe mungalumikizire HX711 ADC ku NRF52832

Iron:

  • Nthenga za Adafruit nRF52 Bluefruit LE (zomwe zidali pafupi)
  • Mtengo wa HX711 ADC
  • Mitundu yaku China 2 ma PC. (50x2kg)
  • Pulogalamu ya ST-LINK V2

Mapulogalamu:

  • IDE VSCODE
  • Chithunzi cha NRF16
  • OpenOCD
  • Pulogalamu ya ST-LINK V2

Chilichonse chili mu pulojekiti imodzi, muyenera kungosintha Makefile (tchulani malo a SDK yanu).

3. Kufotokozera za code

Tidzagwiritsa ntchito gawo la GPIOTE kuti tigwire ntchito ndi zotumphukira potengera kumangiriza kwa ntchito ndi zochitika, komanso gawo la PPI kusamutsa deta kuchokera kumtundu wina kupita ku wina popanda kutengapo gawo kwa purosesa.

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);//настраеваем на выход

Timakonza mzere wolunzanitsa wa PD_SCL pazotulutsa kuti apange ma pulses ndi nthawi ya 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);//включаем таймер
}
 

Timakonza mzere wa data wa DOUT kuti uwerenge momwe HX711 ikukonzekerera; ngati pali mulingo wochepa, chothandizira chimayambika momwe timaletsa kusokoneza ndikuyamba chowerengera kuti tipange mawotchi pa 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); 

// yambitsani gpiote

Pambuyo pake, timayambitsa gawo la PPI ndikugwirizanitsa nthawi yathu ku PD_SCL kutulutsa kuti tipange mapulaneti ndi nthawi ya 10 μs pamene chochitika chofananitsa chikuchitika, ndikutsegulanso gawo la 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);// срабатывает по сравнению

Timayamba zero timer ndi chogwirira chake.

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

Chosangalatsa kwambiri chimachitika mu chowongolera nthawi. Nthawi ya kugunda ndi 20 μs. Timakonda kugunda kwachilendo (m'mphepete kokwera) ndipo malinga ngati chiwerengero chawo sichiposa 24, ndipo pali zochitika 48. Pazochitika zosamvetseka, DOUT imawerengedwa.

Kuchokera pa datasheet zimatsatira kuti chiwerengero cha pulses chiyenera kukhala osachepera 25, chomwe chikugwirizana ndi phindu la 128 (mu code yomwe ndinagwiritsa ntchito 25 pulses), izi ndizofanana ndi zochitika za 50 timer, zomwe zimasonyeza kutha kwa deta.

 ++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
       }
   

Pambuyo pake, timazimitsa chowerengera ndikusintha deta (malinga ndi database) ndikusintha HX711 kuti ikhale yocheperako.


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);
}

Tikuyembekeza zochitika kuchokera ku nthawi ya RTC ndi nthawi ya 10 s (izi ndi zomwe mukufuna) ndikuyambitsa HX711 mu chogwirizira, ndikuyambitsa kusokoneza pamzere wa DOUT.

Pali mfundo inanso, zipika zimatuluka kudzera ku UART (baud rate 115200, TX - 6 pini, RX - 8 pini) zoikamo zonse zili sdk_config.h

Momwe mungalumikizire HX711 ADC ku NRF52832

anapezazo

Zikomo nonse chifukwa cha chidwi chanu, ndikuyembekeza kuti nkhaniyi idzakhala yothandiza ndipo idzachepetsa nthawi yofunikira kuti opanga apeze yankho. Ndikufuna kunena kuti njira yaukadaulo yomwe Nordic amagwiritsa ntchito pamapulatifomu ake ndi yosangalatsa kwambiri pakuwona mphamvu zamagetsi.

PS

Pulojekitiyi idakalipobe, kotero ngati mutuwu uli wokondweretsa, m'nkhani yotsatira ndiyesera kufotokoza ndondomeko yazitsulo zowonetsera kulemera, komanso kulumikiza stack ya BLE.

Zida

Source: www.habr.com

Kuwonjezera ndemanga