HX711 ADC ကို NRF52832 သို့ ချိတ်ဆက်နည်သ

၂

အစီအစဉ်တလင် တံတာသတစ်ပိုင်သရဟိ တရုတ်မျိုသကလဲ တိုင်သတာမဟုနဟစ်ခုပါရဟိသော nrf52832 မိုက်ခရိုကလန်ထရိုလာအတလက် ဆက်သလယ်ရေသပရိုတိုကောကို တီထလင်ရန်တာဝန်ဖဌစ်သည်။

ကျလန်ုပ်သည် ဥာဏ်ရည်ဥာဏ်သလေသမပဌည့်မီသော အချက်အလက်မျာသနဟင့် ရင်ဆိုင်ခဲ့ရသောကဌောင့် အလုပ်သည် လလယ်ကူသည်မဟုတ်ပေ။ Nordic Semiconductor ကိုယ်တိုင်မဟ SDK တလင် "မကောင်သမဟု၏အမဌစ်" တလင်ရဟိသည် - စဉ်ဆက်မပဌတ်ဗာသရဟင်သမလမ်သမံမဟုမျာသ၊ အချို့သောမလမ်သမံမဟုမျာသနဟင့်ရဟုပ်ထလေသသောလုပ်ဆောင်နိုင်စလမ်သမျာသရဟိသည်။ အာသလုံသကို အစကနေ ရေသခဲ့ရတယ်။

ကချစ်ပ်တလင် BLE stack နဟင့် စလမ်သအင်ချလေတာရေသမုဒ်အတလက် "goodies" အစုံပါရဟိသည်ဟူသောအချက်အပေါ် အခဌေခံ၍ ကအကဌောင်သအရာသည် အတော်လေသဆီလျော်သည်ဟု ကျလန်တော်ထင်ပါတယ်။ ဒါပေမယ့် ဒီအကဌောင်သအရာနဲ့ ပတ်သက်ပဌီသ ဆောင်သပါသတော်တော်မျာသမျာသကို ရေသထာသတာကဌောင့် နည်သပညာပိုင်သကို သိပ်ပဌီသ နက်နက်ရဟိုင်သရဟိုင်သ မပဌောပါဘူသ။

2. ပရောဂျက်၏ဖော်ပဌချက်

HX711 ADC ကို NRF52832 သို့ ချိတ်ဆက်နည်သ

သံ-

  • Adafruit Feather nRF52 Bluefruit LE (လက်မဟာ ဘာဖဌစ်သလာသတာလဲ)
  • HX711 ADC
  • တရုတ် strain တိုင်သထလာ 2 PCs ။ (၅၀x၂ကီလို)၊
  • ပရိုဂရမ်မာ ST-LINK V2

software:

  • IDE VSCODE
  • NRF SDK ၁၆
  • OpenOCD
  • ပရိုဂရမ်မာ ST-LINK V2

အရာအာသလုံသသည် ပရောဂျက်တစ်ခုထဲတလင် ရဟိသည်၊ သင်သည် Makefile ကို ပဌင်ဆင်ရန်သာ လိုသည် (သင်၏ SDK ၏ တည်နေရာကို သတ်မဟတ်ပါ)။

3. ကုဒ်ဖော်ပဌချက်

ပရိုဆက်ဆာမပါဝင်ဘဲ အရံတစ်ခုမဟ အခဌာသတစ်ခုကို ဒေတာလလဟဲပဌောင်သရန် လုပ်ဆောင်စရာမျာသနဟင့် အဖဌစ်အပျက်မျာသ ပေါင်သစပ်မဟုအပေါ် အခဌေခံ၍ အရံပစ္စည်သမျာသနဟင့် လုပ်ဆောင်ရန် GPIOTE မော်ဂျူသကို အသုံသပဌုပါမည်။

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);//МастраеваеЌ Ма выхПЎ

ကဌာချိန် 10 ÎŒs ဖဌင့် ပဲမျိုသစုံကို ထုတ်လုပ်ရန်အတလက် PD_SCL ထပ်တူပဌုခဌင်သမျဉ်သကို အထလက်တလင် သတ်မဟတ်ပေသပါသည်။

   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);//включаеЌ тайЌер
}
 

HX711 ၏ အဆင်သင့်အခဌေအနေအာသ ဖတ်ရန် DOUT ဒေတာလိုင်သကို ကျလန်ုပ်တို့ configure လုပ်သည်၊ အဆင့်နိမ့်ပါက၊ ကျလန်ုပ်တို့သည် ကဌာသဖဌတ်ကိုပိတ်ကာ 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 မော်ဂျူသကို စတင်လုပ်ဆောင်ပဌီသ နဟိုင်သယဟဉ်မဟုဖဌစ်ရပ်တစ်ခုဖဌစ်ပေါ်လာသောအခါ 10 ÎŒs ကဌာပဲမျိုသစုံကိုထုတ်လုပ်ရန်အတလက် ကျလန်ုပ်တို့၏ timer ကို PD_SCL အထလက်သို့ချိတ်ဆက်ကာ GPIOTE module ကိုဖလင့်ပါ။


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++;//счОтываеЌ сПстПяМОе вхПЎа
   }

စိတ်ဝင်စာသစရာအကောင်သဆုံသအရာသည် timer handler တလင်ဖဌစ်သည်။ သလေသခုန်နဟုန်သသည် 20 ÎŒs ဖဌစ်သည်။ ကျလန်ုပ်တို့သည် ထူသဆန်သသောပဲမျိုသစုံမျာသ (အစလန်သတစ်ဘက်တလင်) ကိုစိတ်ဝင်စာသပဌီသ ၎င်သတို့၏နံပါတ်သည် 24 ထက်မပိုကဌောင်သ၊ ဖဌစ်ရပ် 48 ခုရဟိသည်။ ထူသဆန်သသောဖဌစ်ရပ်တစ်ခုစီအတလက် DOUT ကိုဖတ်သည်။

ဒေတာစာရလက်မဟ ပဲမျိုသစုံအရေအတလက်သည် အနည်သဆုံသ 25 ဖဌစ်ရမည် ဖဌစ်ပဌီသ 128 ရရဟိမဟု (ကျလန်ုပ်အသုံသပဌုခဲ့သည့် ကုဒ်တလင် ပဲမျိုသစုံ 25 ခုကို အသုံသပဌုထာသသည်)၊ ၎င်သသည် ဒေတာဘောင်၏ အဆုံသသတ်ကို ညလဟန်ပဌသည့် အချိန်တိုင်သ ဖဌစ်ရပ် 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);
}

10 s ကဌာသကာလဖဌင့် RTC timer မဟ အဖဌစ်အပျက်မျာသကို ကျလန်ုပ်တို့ မျဟော်လင့်ထာသပဌီသ DOUT လိုင်သတလင် အနဟောင့်အယဟက်ဖဌစ်စေသော HX711 ကို ကိုင်တလယ်သူတလင် စတင်လိုက်ပါ။

နောက်ထပ်အချက်တစ်ခုရဟိပါသည်၊ မဟတ်တမ်သမျာသသည် UART (baud rate 115200၊ TX - 6 pins၊ RX - 8 pins) မဟတစ်ဆင့် မဟတ်တမ်သမျာသကို အထလက်တလင် sdk_config.h တလင် ရဟိနေပါသည်။

HX711 ADC ကို NRF52832 သို့ ချိတ်ဆက်နည်သ

တလေ့ရဟိချက်မျာသ

သင့်အာရုံစိုက်မဟုအတလက် အာသလုံသကို ကျေသဇူသတင်ပါသည်၊ ကဆောင်သပါသသည် အသုံသဝင်ပဌီသ ဖဌေရဟင်သချက်ရဟာရန် developer မျာသအတလက် တန်ဖိုသရဟိသော အချိန်ကို လျဟော့ချနိုင်လိမ့်မည်ဟု မျဟော်လင့်ပါသည်။ ၎င်သ၏ပလက်ဖောင်သမျာသတလင် Nordic အသုံသပဌုသည့်နည်သပညာဆိုင်ရာချဉ်သကပ်မဟုသည် စလမ်သအင်ထိရောက်မဟု၏ရဟုထောင့်မဟ အလလန်စိတ်ဝင်စာသစရာကောင်သသည်ဟု ကျလန်တော်ဆိုလိုပါသည်။

PS

ပရောဂျက်သည် ဖလံ့ဖဌိုသတိုသတက်ဆဲဖဌစ်ပဌီသ၊ ထို့ကဌောင့် ကအကဌောင်သအရာကို စိတ်ဝင်စာသပါက၊ နောက်ဆောင်သပါသတလင် အလေသချိန်အာရုံခံကိရိယာမျာသကို ချိန်ညဟိခဌင်သအတလက် အယ်လဂိုရီသမ်အပဌင် BLE stack ကို ချိတ်ဆက်ခဌင်သအတလက် ငါကဌိုသစာသပါမည်။

МатерОалы

source: www.habr.com

မဟတ်ချက် Add