1. แจแแกแแแแแ
แแฆแแก แฌแแกแ แแแจแ แแงแ Nrf52832 แแแแ แแแแแขแ แแแแ แแกแแแแก แกแแแแแฃแแแแแชแแ แแ แแขแแแแแแก แจแแแฃแจแแแแแ แแ แ แแแฎแแแแ แฎแแแแก แฉแแแฃแ แ แแแซแแแแแก แแแแแแแแแ.
แแแแชแแแ แแแแแแ แแ แแฆแแแฉแแแ, แ แแแแแ แ แแแแ แแแกแแแแแ แแแคแแ แแแชแแแก แแแแแแแแแแก แฌแแแแจแ แแแแแแฅแ. แฃแคแ แ แกแแแแ แแฃแแแ, แ แแ "แแแ แแขแแแแก แคแแกแแ" แแ แแก SDK-แจแ แแแแแ Nordic Semiconductor - แแฃแแแแแ แแแ แกแแแก แแแแแฎแแแแแแ, แแแ แแแแฃแแ แกแแญแแ แแ แแ แแแแแแแแแแแ แคแฃแแฅแชแแแแแ แแแ. แงแแแแแคแแ แ แแแแแแแ แฃแแแ แแแแแฌแแ แ.
แแ แแคแแฅแ แแ, แ แแ แแก แแแแ แกแแแแแแ แแฅแขแฃแแแฃแ แแ, แแแแแแแแแแ แ แแฅแแแแ, แ แแ แแ แฉแแแก แแฅแแก BLE แกแขแแแ แแ แแแแ แแแแก แแแแแแแแก แ แแแแแแกแแแแก "แกแแแแแแแแแก" แแแแแ แแแแ แแแ. แแแแ แแ แแ แแ แฉแแแฃแฆแ แแแแแแแ แขแแฅแแแแฃแ แแแฌแแแก, แ แแแแแ แแแแ แ แกแขแแขแแ แแแแฌแแ แ แแ แแแแแแ.
2. แแ แแแฅแขแแก แแฆแฌแแ แ
แ แแแแ:
- Adafruit Feather nRF52 Bluefruit LE (แ แแช แแงแ แฎแแแ)
- HX711 ADC
- แฉแแแฃแ แ แจแขแแแแแแแแ 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);//ะฝะฐัััะฐะตะฒะฐะตะผ ะฝะฐ ะฒัั
ะพะด
แฉแแแ แแแแแแคแแแฃแ แแ แแแ 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 แแฃแแกแ), แแก แฃแแ แแก 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
แแแกแแแแแแ
แแแแแแแแ แงแแแแแก แงแฃแ แแแฆแแแแกแแแแก, แแแแแแแแแแ, แ แแ แแก แกแขแแขแแ แกแแกแแ แแแแแ แแฅแแแแ แแ แจแแแแชแแ แแแก แซแแแ แคแแก แแ แแก แแแแแแแแแ แแแก แแแแแกแแแแแก แแแกแแซแแแแแ. แแแแแ แแแฅแแ, แ แแ แขแแฅแแแแฃแ แ แแแแแแแ, แ แแแแแกแแช Nordic แแงแแแแแก แแแแแก แแแแขแคแแ แแแแจแ, แกแแแแแแ แกแแแแขแแ แแกแแ แแแแ แแแแคแแฅแขแฃแ แแแแก แแแแแกแแแ แแกแแ.
PS
แแ แแแฅแขแ แฏแแ แแแแแ แแแแฃแจแแแแแแก แแ แแชแแกแจแแ, แแแแขแแ แแฃ แแก แแแแ แกแแแแขแแ แแกแแ, แจแแแแแ แกแขแแขแแแจแ แจแแแแชแแแแ แแฆแแฌแแ แ แฌแแแแก แกแแแกแแ แแแแก แแแแแแแแ แแแแก แแแแแ แแแแ, แแกแแแ BLE แกแขแแแแก แแแแแแจแแ แแแ.
แแแกแแแแแ
แแ แแแฅแขแแก แแแแ -
แแแแแชแแแแ แชแฎแ แแแ HX711-แแกแแแแก แแแแแแกแฃแ แแ -
แแแซแแแฃแแแแแก แแแแแแแแแแแก แแฃแจแแแแแก แแฆแฌแแ แ
แฌแงแแ แ: www.habr.com