1. เชชเชฐเชฟเชเชฏ
เชเชเชจเซเชกเชพเชฎเชพเช เชฌเซ เช เชฐเซเชง-เชฌเซเชฐเชฟเช เชเชพเชเชจเซเช เชธเซเชเซเชฐเซเชเชจ เชเซเช เชธเชพเชฅเซ nrf52832 เชฎเชพเชเชเซเชฐเซเชเชจเซเชเซเชฐเซเชฒเชฐ เชฎเชพเชเซ เชธเชเชเชพเชฐ เชชเซเชฐเซเชเซเชเซเชฒ เชตเชฟเชเชธเชพเชตเชตเชพเชจเซเช เชเชพเชฐเซเชฏ เชนเชคเซเช.
เชเชพเชฐเซเชฏ เชธเชฐเชณ เชจ เชนเชคเซเช, เชเชพเชฐเชฃ เชเซ เชฎเชจเซ เชเซเช เชชเชฃ เชฌเซเชฆเซเชงเชฟเชเชฎเซเชฏ เชฎเชพเชนเชฟเชคเซเชจเชพ เช เชญเชพเชตเชจเซ เชธเชพเชฎเชจเซ เชเชฐเชตเซ เชชเชกเซเชฏเซ เชนเชคเซ. เชคเซ เชตเชงเซ เชธเชเชญเชต เชเซ เชเซ "เชฆเซเชทเซเชเชคเชพเชจเซเช เชฎเซเชณ" เชจเซเชฐเซเชกเชฟเช เชธเซเชฎเชฟเชเชจเซเชกเชเซเชเชฐเชฅเซ เช SDK เชฎเชพเช เชเซ - เชธเชคเชค เชธเชเชธเซเชเชฐเชฃ เช เชชเชกเซเชเซเชธ, เชเซเชเชฒเซเช เชจเชฟเชฐเชฐเซเชฅเชเชคเชพ เช เชจเซ เชเซเชเชเชตเชฃเชญเชฐเซ เชเชพเชฐเซเชฏเชเซเชทเชฎเชคเชพ. เชฎเชพเชฐเซ เชถเชฐเซเชเชคเชฅเซ เชฌเชงเซเช เชฒเชเชตเซเช เชนเชคเซเช.
เชฎเชจเซ เชฒเชพเชเซ เชเซ เชเซ เช เชตเชฟเชทเชฏ เช เชนเชเซเชเชค เชชเชฐ เชเชงเชพเชฐเชฟเชค เชเซ เชเซ เช เชเชฟเชชเชฎเชพเช BLE เชธเซเชเซเช เชเซ เช เชจเซ เชเชฐเซเชเชพ เชฌเชเชค เชฎเซเชก เชฎเชพเชเซ "เชเซเชกเซเช" เชจเซ เชธเชเชชเซเชฐเซเชฃ เชธเซเช เชเซ. เชชเชฐเชเชคเซ เชนเซเช เชเซเชเชจเชฟเชเชฒ เชญเชพเชเชฎเชพเช เชตเชงเซ เชเชเชกเชพเชฃเชฎเชพเช เชเชเชถ เชจเชนเซเช, เชเชพเชฐเชฃ เชเซ เช เชตเชฟเชทเชฏ เชชเชฐ เชเชฃเชพ เชฒเซเชเซ เชฒเชเชตเชพเชฎเชพเช เชเชตเซเชฏเชพ เชเซ.
2. เชชเซเชฐเซเชเซเชเซเชเชจเซเช เชตเชฐเซเชฃเชจ
เชฒเซเชเชเชก:
- เชเชกเชซเซเชฐเซเช เชซเซเชงเชฐ nRF52 เชฌเซเชฒเซเชซเซเชฐเซเช LE (เชนเชพเชฅเชฎเชพเช เชถเซเช เชฅเชฏเซเช)
- HX711 ADC
- เชเชพเชเชจเซเช เชธเซเชเซเชฐเซเชจ เชเซเช 2 เชชเซเชธเซ. (50x2 เชเชฟเชเซเชฐเชพ)
- เชชเซเชฐเซเชเซเชฐเชพเชฎเชฐ ST-LINK V2
เชธ Softwareเชซเซเชเชตเซเชฐ:
- IDE VSCODE
- NRF SDK 16
- เชเชชเชจเชเชธเซเชกเซ
- เชชเซเชฐเซเชเซเชฐเชพเชฎเชฐ ST-LINK V2
เชฌเชงเซเช เชเช เชชเซเชฐเซเชเซเชเซเชเชฎเชพเช เชเซ, เชคเชฎเชพเชฐเซ เชซเชเซเชค เชฎเซเชเชซเชพเชเชฒเชจเซ เชเซเชตเชฟเช เชเชฐเชตเซเช เชชเชกเชถเซ (เชคเชฎเชพเชฐเชพ 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);//ะฝะฐัััะฐะตะฒะฐะตะผ ะฝะฐ ะฒัั
ะพะด
เช เชฎเซ 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 เชกเซเชเชพ เชฒเชพเชเชจเชจเซ เชเซเช เชตเซเช เชเซเช; เชเซ เชคเซเชฏเชพเช เชจเซเชเซเช เชธเซเชคเชฐ เชนเซเชฏ, เชคเซ เชเช เชนเซเชจเซเชกเชฒเชฐ เชเซเชฐเชฟเชเชฐ เชฅเชพเชฏ เชเซ เชเซเชฎเชพเช เช เชฎเซ เชตเชฟเชเซเชทเซเชชเชจเซ เช เชเซเชทเชฎ เชเชฐเซเช เชเซเช เช เชจเซ 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 เชจเชพ เชธเชฎเชฏเชเชพเชณเชพ เชธเชพเชฅเซ เชชเชฒเซเชธ เชเชจเชฐเซเช เชเชฐเชตเชพ เชฎเชพเชเซ เช เชฎเชพเชฐเชพ เชเชพเชเชฎเชฐเชจเซ PD_SCL เชเชเชเชชเซเช เชธเชพเชฅเซ เชเซเชกเซเช เชเซเช เช เชจเซ 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 เชเช เซเชณเชจเซ เชเชชเชฏเซเช เชเชฐเซเชฏเซ เชนเชคเซ), เช 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 เชฆเซเชตเชพเชฐเชพ เชเชเชเชชเซเช เชเซ (เชฌเซเชก เชฐเซเช 115200, TX - 6 เชชเชฟเชจ, RX - 8 เชชเชฟเชจ) เชคเชฎเชพเชฎ เชธเซเชเชฟเชเชเซเชธ sdk_config.h เชฎเชพเช เชเซ
เชคเชพเชฐเชฃเซ
เชคเชฎเชพเชฐเชพ เชงเซเชฏเชพเชจ เชฎเชพเชเซ เชเชช เชธเซเชจเซ เชเชญเชพเชฐ, เชฎเชจเซ เชเชถเชพ เชเซ เชเซ เช เชฒเซเช เชเชชเชฏเซเชเซ เชฅเชถเซ เช เชจเซ เชตเชฟเชเชพเชธเชเชฐเซเชคเชพเช เชฎเชพเชเซ เชเชเซเชฒ เชถเซเชงเชตเชพ เชฎเชพเชเซ เชฎเซเชฒเซเชฏเชตเชพเชจ เชธเชฎเชฏ เชเชเชพเชกเชถเซ. เชนเซเช เชเชนเซเชตเชพ เชฎเชพเชเชเซ เชเซเช เชเซ เชจเซเชฐเซเชกเชฟเช เชคเซเชจเชพ เชชเซเชฒเซเชเชซเซเชฐเซเชฎเชฎเชพเช เชเซ เชคเชเชจเซเชเซ เช เชญเชฟเชเชฎเชจเซ เชเชชเชฏเซเช เชเชฐเซ เชเซ เชคเซ เชเชฐเซเชเชพ เชเชพเชฐเซเชฏเชเซเชทเชฎเชคเชพเชจเชพ เชฆเซเชทเซเชเชฟเชเซเชฃเชฅเซ เชเซเชฌ เช เชฐเชธเชชเซเชฐเชฆ เชเซ.
PS
เชชเซเชฐเซเชเซเชเซเช เชนเชเซ เชชเชฃ เชตเชฟเชเชพเชธ เชนเซเช เชณ เชเซ, เชคเซเชฅเซ เชเซ เช เชตเชฟเชทเชฏ เชฐเชธ เชงเชฐเชพเชตเชคเซ เชนเซเชฏ, เชคเซ เชชเชเซเชจเชพ เชฒเซเชเชฎเชพเช เชนเซเช เชตเชเชจ เชธเซเชจเซเชธเชฐเชจเซ เชฎเชพเชชเชพเชเชเชฟเชค เชเชฐเชตเชพ, เชคเซเชฎเช BLE เชธเซเชเซเชเชจเซ เชเชจเซเชเซเช เชเชฐเชตเชพ เชฎเชพเชเซเชจเชพ เช เชฒเซเชเซเชฐเชฟเชงเชฎเชจเซเช เชตเชฐเซเชฃเชจ เชเชฐเชตเชพเชจเซ เชชเซเชฐเชฏเชพเชธ เชเชฐเซเชถ.
เชธเชพเชฎเชเซเชฐเซ
เชชเซเชฐเซเชเซเชเซเช เชเซเชก -
เช เชเชเซเชฐเซเชเซเชฎเชพเช HX711 เชฎเชพเชเซ เชกเซเชเชพเชถเซเช -
เชคเชพเชฃ เชเซเชเชจเซ เชเชพเชฎเชเซเชฐเซเชจเซเช เชตเชฐเซเชฃเชจ
เชธเซเชฐเซเชธ: www.habr.com