αžšαž”αŸ€αž”αž—αŸ’αž‡αžΆαž”αŸ‹ HX711 ADC αž‘αŸ… NRF52832

1. αžŸαŸαž…αž€αŸ’αžαžΈαž•αŸ’αžαžΎαž˜

αž“αŸ…αž›αžΎαžšαž”αŸ€αž”αžœαžΆαžšαŸˆαž‚αžΊαž‡αžΆαž—αžΆαžšαž€αž·αž…αŸ’αž…αž“αŸƒαž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž–αž·αž’αžΈαž€αžΆαžšαž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ microcontroller nrf52832 αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžšαž„αŸ’αžœαžΆαžŸαŸ‹αž–αžΆαž€αŸ‹αž€αžŽαŸ’αžαžΆαž›αžŸαŸ’αž–αžΆαž“αž–αžΈαžšαžšαž”αžŸαŸ‹αž…αž·αž“αŸ”

αž€αž·αž…αŸ’αž…αž€αžΆαžšβ€‹αž”αžΆαž“β€‹αž”αŸ’αžšαŸ‚β€‹αž€αŸ’αž›αžΆαž™β€‹αž‘αŸ…β€‹αž‡αžΆβ€‹αž˜αž·αž“β€‹αž„αžΆαž™β€‹αžŸαŸ’αžšαž½αž›β€‹αž‘αŸ αž–αŸ’αžšαŸ„αŸ‡β€‹αžαŸ’αž‰αž»αŸ†β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αŸ’αžšαžˆαž˜β€‹αž˜αž»αžβ€‹αž“αžΉαž„β€‹αž€αžΆαžšβ€‹αžαŸ’αžœαŸ‡β€‹αž–αŸαžαŸŒαž˜αžΆαž“β€‹αžŠαŸ‚αž›β€‹αž’αžΆαž…β€‹αž™αž›αŸ‹β€‹αž”αžΆαž“αŸ” αžœαžΆαž‘αŸ†αž“αž„αž‡αžΆαžαžΆ "αž«αžŸαž‚αž›αŸ‹αž“αŸƒαž’αŸ†αž–αžΎαž’αžΆαž€αŸ’αžšαž€αŸ‹" αžŸαŸ’αžαž·αžαž“αŸ…αž€αŸ’αž“αž»αž„ SDK αž–αžΈ Nordic Semiconductor αžαŸ’αž›αž½αž“αžœαžΆαž•αŸ’αž‘αžΆαž›αŸ‹ - αž€αžΆαžšαž’αžΆαž”αŸ‹αžŠαŸαžαž€αŸ†αžŽαŸ‚αž₯αžαžˆαž”αŸ‹αžˆαžš αž€αžΆαžšαž›αŸ‚αž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαžαž‘αŸ…αž‘αŸ€αž αž“αž·αž„αž˜αž»αžαž„αžΆαžšαž…αŸ’αžšαž›αŸ†αž˜αž½αž™αž…αŸ†αž“αž½αž“αŸ” αžαŸ’αž‰αž»αŸ†β€‹αžαŸ’αžšαžΌαžœβ€‹αžŸαžšαžŸαŸαžšβ€‹αž‚αŸ’αžšαž”αŸ‹β€‹αž™αŸ‰αžΆαž„β€‹αž–αžΈβ€‹αžŠαžΎαž˜αŸ”

αžαŸ’αž‰αž»αŸ†αž‚αž·αžαžαžΆαž”αŸ’αžšαž’αžΆαž“αž”αž‘αž“αŸαŸ‡αž‚αžΊαž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’αžŽαžΆαžŸαŸ‹αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαž€αžΆαžšαž–αž·αžαžŠαŸ‚αž›αžαžΆαž”αž“αŸ’αž‘αŸ‡αžˆαžΈαž”αž“αŸαŸ‡αž˜αžΆαž“αž‡αž„αŸ‹ BLE αž“αž·αž„αžŸαŸ†αžŽαž»αŸ†αž‘αžΆαŸ†αž„αž˜αžΌαž›αž“αŸƒ "αž‘αŸ†αž“αž·αž‰" αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžšαž”αŸ€αž”αžŸαž“αŸ’αžŸαŸ†αžαžΆαž˜αž–αž›αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚β€‹αžαŸ’αž‰αž»αŸ†β€‹αž“αžΉαž„β€‹αž˜αž·αž“β€‹αž…αžΌαž›β€‹αž‡αŸ’αžšαŸ…β€‹αž‘αŸ…β€‹αž€αŸ’αž“αž»αž„β€‹αž•αŸ’αž“αŸ‚αž€β€‹αž”αž…αŸ’αž…αŸαž€αž‘αŸαžŸβ€‹αž‘αŸ αž–αŸ’αžšαŸ„αŸ‡β€‹αž’αžαŸ’αžαž”αž‘β€‹αž‡αžΆβ€‹αž…αŸ’αžšαžΎαž“β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αžŸαžšαžŸαŸαžšβ€‹αž›αžΎβ€‹αž”αŸ’αžšαž’αžΆαž“αž”αž‘β€‹αž“αŸαŸ‡αŸ”

2. αž€αžΆαžšαž–αž·αž–αžŽαŸŒαž“αžΆαž‚αž˜αŸ’αžšαŸ„αž„

αžšαž”αŸ€αž”αž—αŸ’αž‡αžΆαž”αŸ‹ HX711 ADC αž‘αŸ… NRF52832

αž‡αžΆαžαž·αžŠαŸ‚αž€αŸ–

  • Adafruit Feather nRF52 Bluefruit LE (αž˜αžΆαž“αž’αŸ’αžœαžΈαž€αžΎαžαž‘αžΎαž„αž“αŸ…αžŠαŸƒ)
  • HX711 ADC
  • αžšαž„αŸ’αžœαžΆαžŸαŸ‹αžŸαŸ†αž–αžΆαž’αž…αž·αž“ 2 αž—αžΈαŸ” (50x2 αž‚αžΈαž‘αžΌαž€αŸ’αžšαžΆαž˜)
  • αž’αŸ’αž“αž€αžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ ST-LINK V2

αž•αŸ’αž“αŸ‚αž€αž‘αž“αŸ‹:

  • IDE VSCODE
  • NRF SDK ៑៦
  • OpenOCD
  • αž’αŸ’αž“αž€αžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ ST-LINK V2

αž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αž‚αžΊαž“αŸ…αž€αŸ’αž“αž»αž„αž‚αž˜αŸ’αžšαŸ„αž„αž˜αž½αž™ αž’αŸ’αž“αž€αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αžαŸ’αžšαžΌαžœαž€αŸ‚αž”αŸ’αžšαŸ‚ Makefile (αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž‘αžΈαžαžΆαŸ†αž„ SDK αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€)αŸ”

3. αž€αžΆαžšαž–αž·αž–αžŽαŸŒαž“αžΆαž’αŸ†αž–αžΈαž›αŸαžαž€αžΌαžŠ

αž™αžΎαž„αž“αžΉαž„αž”αŸ’αžšαžΎαž˜αŸ‰αžΌαžŒαž»αž› GPIOTE αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž‚αŸ’αžšαžΏαž„αž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαž€αžΆαžšαž…αž„αž“αŸƒαž—αžΆαžšαž€αž·αž…αŸ’αž… αž“αž·αž„αž–αŸ’αžšαžΉαžαŸ’αžαž·αž€αžΆαžšαžŽαŸ αž€αŸαžŠαžΌαž…αž‡αžΆαž˜αŸ‰αžΌαžŒαž»αž› PPI αžŠαžΎαž˜αŸ’αž”αžΈαž•αŸ’αž‘αŸαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αž–αžΈαž‚αŸ’αžšαžΏαž„αž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαž˜αž½αž™αž‘αŸ…αž§αž”αž€αžšαžŽαŸαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž€αžΆαžšαž…αžΌαž›αžšαž½αž˜αž–αžΈαžαž½αžšαž€αŸ’αž”αžΆαž›αŸ”

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);//настраСваСм Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄

αž™αžΎαž„αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž”αž“αŸ’αž‘αžΆαžαŸ‹αž’αŸ’αžœαžΎαžŸαž˜αž€αžΆαž›αž€αž˜αŸ’αž˜ PD_SCL αž‘αŸ…αž“αžΉαž„αž‘αž·αž“αŸ’αž“αž•αž›αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαž‡αžΈαž–αž…αžšαžŠαŸ‚αž›αž˜αžΆαž“αžšαž™αŸˆαž–αŸαž› 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);//Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ Ρ‚Π°ΠΉΠΌΠ΅Ρ€
}
 

αž™αžΎαž„αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž”αž“αŸ’αž‘αžΆαžαŸ‹αž‘αž·αž“αŸ’αž“αž“αŸαž™ DOUT αžŠαžΎαž˜αŸ’αž”αžΈαž’αžΆαž“αžŸαŸ’αžαžΆαž“αž—αžΆαž–αžαŸ’αžšαŸ€αž˜αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹ HX711 αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž˜αžΆαž“αž€αž˜αŸ’αžšαž·αžαž‘αžΆαž” αž§αž”αž€αžšαžŽαŸαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αž‘αžΎαž„ αžŠαŸ‚αž›αž™αžΎαž„αž”αž·αž‘αž€αžΆαžšαžšαŸ†αžαžΆαž“ αž“αž·αž„αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž€αŸ†αžŽαžαŸ‹αž˜αŸ‰αŸ„αž„αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαž‡αžΈαž–αž…αžšαž“αŸ…αž›αž‘αŸ’αž’αž•αž› 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); 

// αž”αžΎαž€ gpiote

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž“αŸ„αŸ‡ αž™αžΎαž„αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž˜αŸ‰αžΌαžŒαž»αž› PPI αž αžΎαž™αž—αŸ’αž‡αžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž€αŸ†αžŽαžαŸ‹αž˜αŸ‰αŸ„αž„αžšαž”αžŸαŸ‹αž™αžΎαž„αž‘αŸ…αž“αžΉαž„αž›αž‘αŸ’αž’αž•αž› PD_SCL αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαž‡αžΈαž–αž…αžšαžŠαŸ‚αž›αž˜αžΆαž“αžšαž™αŸˆαž–αŸαž› 10 ΞΌs αž“αŸ…αž–αŸαž›αž–αŸ’αžšαžΉαžαŸ’αžαž·αž€αžΆαžšαžŽαŸαž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αž€αžΎαžαž‘αžΎαž„ αž αžΎαž™αž€αŸαž”αžΎαž€αž˜αŸ‰αžΌαžŒαž»αž› 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);// срабатываСт ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ

αž™αžΎαž„αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž€αŸ†αžŽαžαŸ‹αž˜αŸ‰αŸ„αž„αžŸαžΌαž“αŸ’αž™ αž“αž·αž„αž§αž”αž€αžšαžŽαŸαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžšαž”αžŸαŸ‹αžœαžΆαŸ”

  if(m_counter%2 != 0 && m_counter<=48){
       buffer <<= 1;// пСрСмСнная считанных Π΄Π°Π½Ρ‹Ρ…
        c_counter++;// счСтчик ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ…  ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠΎΠ²
           if(nrf_gpio_pin_read(DOUT))buffer++;//считываСм состояниС Π²Ρ…ΠΎΠ΄Π°
   }

αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž”αŸ†αž•αž»αžαž€αžΎαžαž‘αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„αž§αž”αž€αžšαžŽαŸαž€αŸ†αžŽαžαŸ‹αž–αŸαž›αžœαŸαž›αžΆαŸ” αžšαž™αŸˆαž–αŸαž›αž‡αžΈαž–αž…αžšαž‚αžΊ 20 ΞΌsαŸ” αž™αžΎαž„αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž›αžΎαž‡αžΈαž–αž…αžšαžŸαŸαžŸ (αžαžΆαž˜αž‚αŸ‚αž˜αž€αžΎαž“αž‘αžΎαž„) αž αžΎαž™αž•αŸ’αžαž›αŸ‹αžαžΆαž…αŸ†αž“αž½αž“αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαž˜αž·αž“αž›αžΎαžŸαž–αžΈ 24 αž αžΎαž™αž˜αžΆαž“αž–αŸ’αžšαžΉαžαŸ’αžαž·αž€αžΆαžšαžŽαŸαž…αŸ†αž“αž½αž“ 48 αŸ” αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸ’αžšαžΉαžαŸ’αžαž·αž€αžΆαžšαžŽαŸαžŸαŸαžŸαž“αžΈαž˜αž½αž™αŸ— DOUT αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αžΆαž“

αž–αžΈαžŸαž“αŸ’αž›αžΉαž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αžœαžΆαžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αžαžΆαž…αŸ†αž“αž½αž“αž“αŸƒαž‡αžΈαž–αž…αžšαžαŸ’αžšαžΌαžœαžαŸ‚αž˜αžΆαž“αž™αŸ‰αžΆαž„αž αŸ„αž…αžŽαžΆαžŸαŸ‹ 25 αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαž“αžΉαž„αž€αžΆαžšαž€αžΎαž“αž‘αžΎαž„αž“αŸƒ 128 (αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΌαžŠαžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž”αŸ’αžšαžΎ 25 pulses) αž“αŸαŸ‡αž‚αžΊαžŸαŸ’αž˜αžΎαž“αžΉαž„αž–αŸ’αžšαžΉαžαŸ’αžαž·αž€αžΆαžšαžŽαŸαž€αŸ†αžŽαžαŸ‹αž˜αŸ‰αŸ„αž„αž…αŸ†αž“αž½αž“ 50 αžŠαŸ‚αž›αž”αž„αŸ’αž αžΆαž‰αž–αžΈαž€αžΆαžšαž”αž‰αŸ’αž…αž”αŸ‹αž“αŸƒαžŸαŸŠαž»αž˜αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ”

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

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž“αŸαŸ‡ αž™αžΎαž„αž”αž·αž‘αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž€αŸ†αžŽαžαŸ‹αž˜αŸ‰αŸ„αž„ αž“αž·αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™ (αž™αŸ„αž„αžαžΆαž˜αžαžΆαžšαžΆαž„αž‘αž·αž“αŸ’αž“αž“αŸαž™) αž αžΎαž™αž”αŸ’αžαžΌαžš HX711 αž‘αŸ…αžšαž”αŸ€αž”αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžαžΆαž˜αž–αž›αž‘αžΆαž”αŸ”


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

αž™αžΎαž„αžšαŸ†αž–αžΉαž„αžαžΆαž–αŸ’αžšαžΉαžαŸ’αžαž·αž€αžΆαžšαžŽαŸαž–αžΈαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž€αŸ†αžŽαžαŸ‹αž˜αŸ‰αŸ„αž„ RTC αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž…αž“αŸ’αž›αŸ„αŸ‡αž–αŸαž› 10 αžœαž·αž“αžΆαž‘αžΈ (αž“αŸαŸ‡αž‡αžΆαž€αžΆαžšαžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€) αž αžΎαž™αž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš HX711 αž“αŸ…αž€αŸ’αž“αž»αž„αž§αž”αž€αžšαžŽαŸαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™ αžŠαŸ‚αž›αž”αžŽαŸ’αžαžΆαž›αž±αŸ’αž™αž˜αžΆαž“αž€αžΆαžšαžšαŸ†αžαžΆαž“αž“αŸ…αž›αžΎαž”αž“αŸ’αž‘αžΆαžαŸ‹ DOUT αŸ”

αž˜αžΆαž“αž…αŸ†αžŽαž»αž…αž˜αž½αž™αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αž αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž…αŸαž‰αžαžΆαž˜αžšαž™αŸˆ UART (αž’αžαŸ’αžšαžΆ baud 115200, TX - 6 pins, RX - 8 pins) αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‚αžΊαž“αŸ…αž€αŸ’αž“αž»αž„ sdk_config.h

αžšαž”αŸ€αž”αž—αŸ’αž‡αžΆαž”αŸ‹ HX711 ADC αž‘αŸ… NRF52832

αž€αžΆαžšαžšαž€αžƒαžΎαž‰

αžŸαžΌαž˜αž’αžšαž‚αž»αžŽαž’αŸ’αž“αž€αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž™αž€αž…αž·αžαŸ’αžαž‘αž»αž€αžŠαžΆαž€αŸ‹αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αžαŸ’αž‰αž»αŸ†αžŸαž„αŸ’αžƒαžΉαž˜αžαžΆαž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αž“αžΉαž„αž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸ αž αžΎαž™αž“αžΉαž„αž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™αž–αŸαž›αžœαŸαž›αžΆαžŠαŸαž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαžŠαžΎαž˜αŸ’αž”αžΈαžŸαŸ’αžœαŸ‚αž„αžšαž€αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αŸ” αžαŸ’αž‰αž»αŸ†αž…αž„αŸ‹αž“αž·αž™αžΆαž™αžαžΆαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž”αž…αŸ’αž…αŸαž€αž‘αŸαžŸαžŠαŸ‚αž› Nordic αž”αŸ’αžšαžΎαž“αŸ…αž€αŸ’αž“αž»αž„αžœαŸαž‘αž·αž€αžΆαžšαž”αžŸαŸ‹αžœαžΆαž‚αžΊαž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαžŽαžΆαžŸαŸ‹αž–αžΈαž‘αžŸαŸ’αžŸαž“αŸˆαž“αŸƒαž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αžαžΆαž˜αž–αž›αŸ”

PS

αž‚αž˜αŸ’αžšαŸ„αž„αž“αŸαŸ‡αž€αŸ†αž–αž»αž„αžŸαŸ’αžαž·αžαž€αŸ’αžšαŸ„αž˜αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž“αŸ…αž‘αžΎαž™ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž”αŸ’αžšαž’αžΆαž“αž”αž‘αž“αŸαŸ‡αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸ αž’αžαŸ’αžαž”αž‘αž”αž“αŸ’αž‘αžΆαž”αŸ‹αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž–αŸ’αž™αžΆαž™αžΆαž˜αž–αžŽαŸŒαž“αžΆαž’αŸ†αž–αžΈαž€αŸ’αž”αž½αž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž€αŸ’αžšαž·αžαž§αž”αž€αžšαžŽαŸαž…αžΆαž”αŸ‹αžŸαž‰αŸ’αž‰αžΆαž‘αž˜αŸ’αž„αž“αŸ‹ αž€αŸαžŠαžΌαž…αž‡αžΆαž€αžΆαžšαž—αŸ’αž‡αžΆαž”αŸ‹αž‡αž„αŸ‹ BLE αž•αž„αžŠαŸ‚αžšαŸ”

αžŸαž˜αŸ’αž—αžΆαžšαŸˆ

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹