1. เบเบปเบเปเบเบฐ เบเบณ
เปเบเบเบญเบเบเบฐเบเบธเบกเปเบกเปเบเบงเบฝเบเบเบฒเบเบเบญเบเบเบฒเบเบเบฑเบเบเบฐเบเบฒเบญเบฐเบเบธเบชเบฑเบเบเบฒเบเบฒเบเบชเบทเปเบชเบฒเบเบชเปเบฒเบฅเบฑเบ microcontroller nrf52832 เบเบตเปเบกเบตเบชเบญเบเปเบเบดเปเบเบเบปเบงเบเบญเบเบชเบฒเบเบเบฑเบเบเบตเบ.
เบงเบฝเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบงเปเบเปเบซเบฑเบเบญเบญเบเบเปเปเปเบกเปเบเปเบฅเบทเปเบญเบเบเปเบฒเบ, เบเปเบญเบเบงเปเบฒเบเปเบญเบเบเบฐเปเบเบตเบเบเบฑเบเบเบฒเบเบเบฒเบเบเปเปเบกเบนเบเบเบตเปเบเปเปเบกเบตเบชเบฐเบเบดเบเบฑเบเบเบฒ. เบกเบฑเบเปเบเบฑเบเปเบเปเบเปเบซเบผเบฒเบเบเบงเปเบฒเบงเปเบฒ "เบฎเบฒเบเบเบญเบเบเบงเบฒเบกเบเบปเปเบงเบฎเปเบฒเบ" เปเบกเปเบเบขเบนเปเปเบ SDK เบเบฒเบ Nordic Semiconductor เบเบปเบงเบเบญเบเบกเบฑเบเปเบญเบ - เบเบฒเบเบเบฑเบเบเบธเบเบชเบฐเบเบฑเบเบเบปเบเบเบตเป, เบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเปเปเบฒเบเปเบญเบเปเบฅเบฐเบชเบฑเบเบชเบปเบ. เบเปเบญเบเบเปเบญเบเบเบฝเบเบเบธเบเบขเปเบฒเบเบเบฑเปเบเปเบเปเปเบฅเบตเปเบกเบเบปเปเบ.
เบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบดเบเบงเปเบฒเบซเบปเบงเบเปเปเบเบตเปเปเบกเปเบเบเปเบญเบเบเปเบฒเบเบเปเบฝเบงเบเปเบญเบเปเบเบเบญเบตเบเปเบชเปเบเบงเบฒเบกเบเบดเบเบเบตเปเบงเปเบฒเบเบดเบเบเบตเปเบกเบต stack BLE เปเบฅเบฐเบเบธเบเบเบฑเบเบซเบกเบปเบเบเบญเบ "goodies" เบชเปเบฒเบฅเบฑเบเบฎเบนเบเปเบเบเบเบฒเบเบเบฐเบซเบเบฑเบเบเบฐเบฅเบฑเบเบเบฒเบ. เปเบเปเบเปเบญเบเบเบฐเบเปเปเบฅเบปเบเปเบฅเบดเบเปเบเบชเปเบงเบเบเปเบฒเบเบงเบดเบเบฒเบเบฒเบ, เปเบเบฒเบฐเบงเปเบฒเบซเบฅเบฒเบเบเบปเบเปเบเปเบเบทเบเบเบฝเบเปเบงเปเปเบเบซเบปเบงเบเปเปเบเบตเป.
2. เบฅเบฒเบเบฅเบฐเบญเบฝเบเปเบเบเบเบฒเบ
เบเบฒเบเปเบซเบผเบฑเบ:
- Adafruit Feather nRF52 Bluefruit LE (เบกเบตเบซเบเบฑเบเปเบเบตเบเบเบถเปเบเบเบฑเบเบกเบท)
- ADC HX711
- เปเบเบทเปเบญเบเบงเบฑเบเปเบเบเบชเบฒเบเบเบฑเบเบเบตเบ 2 เปเปเบงเบ. (50x2 เบเบดโเปเบฅโ)
- เปเบเบฃเปเบเบฃเบกเปเบกเบต ST-LINK V2
เบเบญเบเปเบง:
- IDE VSCODE
- NRF SDK 16
- 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);//ะฝะฐัััะฐะตะฒะฐะตะผ ะฝะฐ ะฒัั
ะพะด
เบเบงเบเปเบฎเบปเบฒเบเปเบฒเบซเบเบปเบเบเปเบฒเปเบชเบฑเปเบ synchronization PD_SCL เบเบฑเบเบเบปเบเบเบฐเบฅเบดเบเปเบเบทเปเบญเบชเปเบฒเบ pulses เบเบตเปเบกเบตเปเบฅเบเบฐเปเบงเบฅเบฒ 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 เปเบเบทเปเบญเบชเปเบฒเบ pulses เบเบตเปเบกเบตเปเบฅเบเบฐเปเบงเบฅเบฒ 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. เบเบงเบเปเบฎเบปเบฒเบกเบตเบเบงเบฒเบกเบชเบปเบเปเบเปเบ pulses เบเบตเบ (เบเบฒเบกเบเบญเบเบเบตเปเปเบเบตเปเบกเบเบถเปเบ) เปเบฅเบฐเบชเบฐเบซเบเบญเบเปเบซเปเบงเปเบฒเบเปเบฒเบเบงเบเบเบญเบเบเบงเบเปเบเบปเบฒเบเปเปเปเบเบตเบ 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 s (เบเบตเปเปเบกเปเบเบเบฒเบเบเบฑเบเบชเบดเบเปเบเบเบญเบเบเปเบฒเบ) เปเบฅเบฐเปเบเบตเบเบเบปเบง HX711 เปเบเบเบปเบงเบเบฑเบเบเบฒเบ, เปเบเบดเปเบเบเปเปเปเบซเปเปเบเบตเบเบเบฒเบเบเบฑเบเบเบงเบฒเบเบขเบนเปเปเบเปเบชเบฑเปเบ DOUT.
เบกเบตเบญเบตเบเบเบธเบเบซเบเบถเปเบ, เบเบฑเบเบเบถเบเปเบกเปเบเบเบปเบเบเบฐเบฅเบดเบเบเปเบฒเบ UART (baud rate 115200, TX - 6 pins, RX - 8 pins) เบเบฒเบเบเบฑเปเบเบเปเบฒเบเบฑเบเบซเบกเบปเบเปเบกเปเบเบขเบนเปเปเบ sdk_config.h
เบเบฒเบเบเบปเปเบเบเบปเบ
เบเปเบเบญเบเปเบเบเปเบฒเบเบเบฑเบเบซเบกเบปเบเบชเปเบฒเบฅเบฑเบเบเบงเบฒเบกเบชเบปเบเปเบเบเบญเบเบเปเบฒเบ, เบเปเบฒเบเบฐเปเบเบปเปเบฒเบซเบงเบฑเบเบงเปเบฒเบเบปเบเบเบงเบฒเบกเบเบตเปเบเบฐเปเบเบฑเบเบเบฐเปเบซเบเบเปเบฅเบฐเบเบฐเบซเบผเบธเบเบเปเบญเบเปเบงเบฅเบฒเบเบตเปเบกเบตเบเบธเบเบเปเบฒเบชเปเบฒเบฅเบฑเบเบเบฑเบเบเบฑเบเบเบฐเบเบฒเปเบเบทเปเบญเบเบญเบเบซเบฒเบงเบดเบเบตเปเบเปเปเบ. เบเปเบฒเบเบฐเปเบเบปเปเบฒเบเปเบญเบเบเบฒเบเบเบตเปเบเบฐเปเบงเบปเปเบฒเบงเปเบฒเบงเบดเบเบตเบเบฒเบเบเปเบฒเบเบงเบดเบเบฒเบเบฒเบเบเบตเป Nordic เปเบเปเปเบเปเบงเบเบตเบเบญเบเบเบปเบเปเบกเปเบเบเปเบญเบเบเปเบฒเบเบซเบเปเบฒเบชเบปเบเปเบเบเบฒเบเบเบฑเบเบชเบฐเบเบฐเบเบญเบเบเบฐเบชเบดเบเบเบดเบเบฒเบเบเบฐเบฅเบฑเบเบเบฒเบ.
PS
เปเบเบเบเบฒเบเบเบฑเบเบขเบนเปเปเบเบเบฒเบเบเบฑเบเบเบฐเบเบฒ, เบเบฑเปเบเบเบฑเปเบเบเปเบฒเบซเบฒเบเบงเปเบฒเบซเบปเบงเบเปเปเบเบตเปเบกเบตเบเบงเบฒเบกเบชเบปเบเปเบ, เปเบเบเบปเบเบเบงเบฒเบกเบเปเปเปเบเบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบฐเบเบฐเบเบฒเบเบฒเบกเบญเบฐเบเบดเบเบฒเบ algorithm เบชเปเบฒเบฅเบฑเบ calibrating sensors เบเปเปเบฒเบซเบเบฑเบ, เปเบเบฑเปเบเบเบฝเบงเบเบฑเบเบเบฑเบเบเบฒเบเปเบเบทเปเบญเบกเบเปเป stack BLE.
เปเบเบทเปเบญเบเปเบเปเบเบเบฒเบ
เบฅเบฐเบซเบฑเบเปเบเบเบเบฒเบ -
เปเบญเบเบฐเบชเบฒเบเบเปเปเบกเบนเบเบชเปเบฒเบฅเบฑเบ HX711 เปเบเบเบฒเบชเบฒเบญเบฑเบเบเบดเบ -
เบฅเบฒเบโเบฅเบฐโเบญเบฝเบโเบเบญเบโเบเบฒเบโเบเปเบฒโเปเบเบตเบโเบเบฒเบโเบเบญเบโเปเบเบทเปเบญเบโเบงเบฑเบโเบเบงเบฒเบกโเปเบกเบทเปเบญเบโ
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com