1. Fampidirana
Ao amin'ny fandaharam-potoana dia ny andraikitry ny famolavolana protocole fifandraisana ho an'ny microcontroller nrf52832 miaraka amin'ny mari-pandrefesana sinoa tapa-tetezana roa.
Tsy mora ilay asa, satria niatrika tsy fahampian'ny fampahalalana azo takarina aho. Azo inoana kokoa fa ny "fakan'ny faharatsiana" dia ao amin'ny SDK avy amin'ny Nordic Semiconductor mihitsy - fanavaozam-baovao tsy tapaka, famerenam-bola ary fampiasa mampisafotofoto. Tsy maintsy nanoratra ny zava-drehetra hatrany am-boalohany aho.
Heveriko fa tena manan-danja ity lohahevitra ity mifototra amin'ny zava-misy fa ity puce ity dia manana stack BLE sy andiana "tsara" ho an'ny fomba fitsitsiana angovo. Saingy tsy hiditra lalina amin'ny ampahany ara-teknika aho, satria lahatsoratra maro no nosoratana momba ity lohahevitra ity.
2. Famariparitana ny tetikasa
vy:
- Adafruit Feather nRF52 Bluefruit LE (inona no teo an-tanana)
- HX711 ADC
- Fandrefesana Sinoa 2 pcs. (50x2 kg)
- Programme ST-LINK V2
Rindrambaiko:
- IDE VSCODE
- NRF SDK 16
- OpenOCD
- Programme ST-LINK V2
Ao anatin'ny tetikasa iray ny zava-drehetra, mila manitsy fotsiny ny Makefile ianao (farito ny toerana misy ny SDK).
3. Famaritana ny kaody
Hampiasa ny maody GPIOTE izahay mba hiasa miaraka amin'ny periferika mifototra amin'ny famatorana ny asa sy ny hetsika, ary koa ny maody PPI mba hamindrana angona avy amin'ny periferika iray mankany amin'ny iray hafa tsy misy fandraisana anjaran'ny processeur.
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);//Π½Π°ΡΡΡΠ°Π΅Π²Π°Π΅ΠΌ Π½Π° Π²ΡΡ
ΠΎΠ΄
Izahay dia manamboatra ny tsipika fampifanarahana PD_SCL mankany amin'ny famoahana hamokatra pulses amin'ny faharetan'ny 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);//Π²ΠΊΠ»ΡΡΠ°Π΅ΠΌ ΡΠ°ΠΉΠΌΠ΅Ρ
}
Ampifanarahintsika ny tsipika data DOUT mba hamakiana ny toetry ny fahavononana HX711; raha misy ny haavony ambany, dia misy mpitantana iray izay manafoana ny interrupt ary manomboka fameram-potoana hamokatra pulses famantaranandro amin'ny famoahana 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);
// avelao ny gpiote
Aorian'izany dia manomboka ny maody PPI izahay ary mampifandray ny fameram-potoana amin'ny famoahana PD_SCL mba hamoronana pulses amin'ny faharetan'ny 10 ΞΌs rehefa misy hetsika fampitahana, ary velomy koa ny maody 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);// ΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ
Manomboka ny fameram-potoana aotra sy ny mpitantana azy.
if(m_counter%2 != 0 && m_counter<=48){
buffer <<= 1;// ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΡΠΈΡΠ°Π½Π½ΡΡ
Π΄Π°Π½ΡΡ
c_counter++;// ΡΡΠ΅ΡΡΠΈΠΊ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΡ
ΠΈΠΌΠΏΡΠ»ΡΡΠΎΠ²
if(nrf_gpio_pin_read(DOUT))buffer++;//ΡΡΠΈΡΡΠ²Π°Π΅ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π²Ρ
ΠΎΠ΄Π°
}
Ny zavatra mahaliana indrindra dia mitranga amin'ny mpandrindra fameram-potoana. Ny fe-potoana pulse dia 20 ΞΌs. Liana amin'ny pulses hafahafa izahay (manaraka ny sisiny miakatra) ary raha tsy mihoatra ny 24 ny isany, ary misy hetsika 48. Ho an'ny hetsika hafahafa tsirairay dia vakiana ny DOUT
Avy amin'ny datasheet dia manaraka fa ny isan'ny pulses dia tsy maintsy 25, fara fahakeliny, izay mifanitsy amin'ny tombony 128 (ao amin'ny fehezan-dalΓ na nampiasa 25 pulses), izany dia mitovy amin'ny 50 timer zava-nitranga, izay manondro ny faran'ny data frame.
++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
}
Aorian'izany dia vonoinay ny fameram-potoana ary asio ny angon-drakitra (araka ny datasheet) ary mamadika ny fomba fanjifana herinaratra ambany ny 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);
}
Manantena ny fisehoan-javatra avy amin'ny fameram-potoana RTC miaraka amin'ny elanelana 10 s (araka ny fanapahan-kevitrao izany) ary atombohy ny HX711 amin'ny mpandrindra, ka miteraka fahatapahana amin'ny tsipika DOUT.
Misy teboka iray hafa, ny logs dia mivoaka amin'ny alΓ lan'ny UART (baud rate 115200, TX - 6 pins, RX - 8 pins) dia ao amin'ny sdk_config.h ny setup rehetra.
hitany
Misaotra anareo rehetra tamin'ny fifantohanao, manantena aho fa hahasoa ity lahatsoratra ity ary hampihena ny fotoana sarobidy ho an'ny mpamorona hahita vahaolana. Te-hilaza aho fa ny fomba fiasa ara-teknika ampiasain'i Nordic amin'ny sehatra misy azy dia mahaliana tokoa raha jerena ny fahombiazan'ny angovo.
Sal
Mbola eo an-dalam-pandrosoana ny tetikasa, ka raha mahaliana ity lohahevitra ity, amin'ny lahatsoratra manaraka dia hiezaka ny hamaritana ny algorithm amin'ny fandrefesana ny sensor sensor aho, ary koa ny fampifandraisana ny stack BLE.
fitaovana
Source: www.habr.com