Sa agenda ay ang gawain ng pagbuo ng isang protocol ng komunikasyon para sa nrf52832 microcontroller na may dalawang half-bridge Chinese strain gauge.
Ang gawain ay naging hindi madali, dahil ako ay nahaharap sa kakulangan ng anumang naiintindihan na impormasyon. Mas malamang na ang "ugat ng kasamaan" ay nasa SDK mula mismo sa Nordic Semiconductor - patuloy na pag-update ng bersyon, ilang redundancy at nakakalito na functionality. Kinailangan kong isulat ang lahat mula sa simula.
Sa tingin ko ang paksang ito ay medyo may kaugnayan batay sa katotohanan na ang chip na ito ay may BLE stack at isang buong hanay ng mga "goodies" para sa energy saving mode. Ngunit hindi ako magpapalalim sa teknikal na bahagi, dahil maraming mga artikulo ang naisulat sa paksang ito.
2. Paglalarawan ng proyekto
bakal:
Adafruit Feather nRF52 Bluefruit LE (kung ano ang nangyari sa kamay)
HX711 ADC
Chinese strain gauge 2 pcs. (50x2 kg)
Programmer ST-LINK V2
Software:
IDE VSCODE
NRF SDK 16
OpenOCD
Programmer ST-LINK V2
Ang lahat ay nasa isang proyekto, kailangan mo lang i-tweak ang Makefile (tukuyin ang lokasyon ng iyong SDK).
3. Paglalarawan ng code
Gagamitin namin ang module ng GPIOTE upang gumana sa mga peripheral batay sa pagkakatali ng mga gawain at kaganapan, pati na rin ang module ng PPI upang maglipat ng data mula sa isang peripheral patungo sa isa pa nang walang partisipasyon ng isang processor.
Kino-configure namin ang linya ng data ng DOUT para basahin ang estado ng pagiging handa ng HX711; kung mayroong mababang antas, ma-trigger ang isang handler kung saan hindi namin pinapagana ang interrupt at magsisimula ng timer upang makabuo ng mga pulso ng orasan sa output ng PD_SCL.
Pagkatapos nito, sinisimulan namin ang module ng PPI at ikinonekta ang aming timer sa output ng PD_SCL upang makabuo ng mga pulso na may tagal na 10 ΞΌs kapag may nangyaring paghahambing, at i-on din ang module ng GPIOTE.
Ang pinaka-kagiliw-giliw na bagay ay nangyayari sa timer handler. Ang panahon ng pulso ay 20 ΞΌs. Interesado kami sa mga kakaibang pulso (sa kahabaan ng tumataas na gilid) at sa kondisyon na ang kanilang bilang ay hindi hihigit sa 24, at mayroong 48 na kaganapan. Para sa bawat kakaibang kaganapan, binabasa ang DOUT
Mula sa datasheet ito ay sumusunod na ang bilang ng mga pulso ay dapat na hindi bababa sa 25, na tumutugma sa isang pakinabang ng 128 (sa code na ginamit ko 25 pulses), ito ay katumbas ng 50 mga kaganapan sa timer, na nagpapahiwatig ng pagtatapos ng frame ng data.
Inaasahan namin ang mga kaganapan mula sa timer ng RTC na may pagitan na 10 s (nasa iyong pagpapasya) at ilulunsad ang HX711 sa handler, na magdulot ng pagkaantala sa linya ng DOUT.
May isa pang punto, ang mga log ay output sa pamamagitan ng UART (baud rate 115200, TX - 6 pins, RX - 8 pins) lahat ng mga setting ay nasa sdk_config.h
Natuklasan
Salamat sa iyong lahat para sa iyong pansin, umaasa ako na ang artikulong ito ay magiging kapaki-pakinabang at magbabawas ng mahalagang oras para sa mga developer na makahanap ng solusyon. Gusto kong sabihin na ang teknikal na diskarte na ginagamit ng Nordic sa mga platform nito ay medyo kawili-wili mula sa punto ng view ng kahusayan ng enerhiya.
PS
Ang proyekto ay nasa ilalim pa rin ng pag-unlad, kaya kung ang paksang ito ay interesado, sa susunod na artikulo ay susubukan kong ilarawan ang algorithm para sa pag-calibrate ng mga sensor ng timbang, pati na rin ang pagkonekta sa BLE stack.