Quomodo coniungere HX711 ADC ad NRF52832

1. introduction

In agenda erat munus evolvendi communicationem protocollum nrf52832 microcontrollerum cum duobus dimidiatis pontis cola Sinensium gauges.

Negotium non facile evasit, ut praenotavit defectus cuiuslibet notitiae intelligibilis. Verisimile est "radix mali" in SDK esse ab ipso Semiconductore Nordico - constantis versionis updates, quaedam additae et confusionis functionis. Dederam omnia scribere de integro.

Hunc locum satis pertinere puto ex eo quod hic chippis habet acervum BLE et totum numerum "lacus" pro industria modus salutaris. Sed non nimis profundam in partem technicam, cum multi articuli de hoc argumento scripti sint.

2. Project descriptionem

Quomodo coniungere HX711 ADC ad NRF52832

Ferrum:

  • Adafruit Pluma nRF52 Bluefruit LE (quod factum est ad manum)
  • HX711 ADC
  • Seres cola gauges 2 quam at pede. (50x2 kg)
  • Programmator ST-LINK V2

Mollis:

  • IDE VSCODE
  • NRF SDK 16
  • OpenOCD
  • Programmator ST-LINK V2

Omnia in uno incepto sunt, tu modo fac ut tweak (specificare situm tui SDK).

3. Descriptio ex codice

GPIOTE modulo utemur ad operandum periphericis innixum obligatione officiorum et eventuum, necnon PPI moduli ad datam ab uno peripherico in alium transferendi sine participatione processus.

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 synchronisationi lineam ad output configuramus pulsus generandi cum duratione 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 data linea configuramus ad legendi promptitudinem statum HX711, si humili gradu est, tracto utitur in quo interrumpere et timer incipimus ad pulsus horologii generandi pulsus in PD_SCL output generandi.

 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); 

// enable gpiote

Post hoc moduli initializemus PPI et timentem nostrum ad PD_SCL output coniungimus ad pulsus generandos cum duratione 10 ΞΌs cum comparationis res incidit, et etiam in moduli GPIOTE vertimus.


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);// срабатываСт ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ

Nos nulla timor initialize et tracto eius.

  if(m_counter%2 != 0 && m_counter<=48){
       buffer <<= 1;// пСрСмСнная считанных Π΄Π°Π½Ρ‹Ρ…
        c_counter++;// счСтчик ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ…  ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠΎΠ²
           if(nrf_gpio_pin_read(DOUT))buffer++;//считываСм состояниС Π²Ρ…ΠΎΠ΄Π°
   }

Maxime interesting res fit in timer tracto. Pulsus periodus 20 ΞΌs est. Nos interest pulsuum imparium (per marginem orientis) et dummodo numerus eorum non plus sit quam XXIV, et eventus 24 sunt. Pro unoquoque impari eventu legitur DOUT.

Ex scheda schedae sequitur numerum pulsus minimum esse debere XXV, qui respondet quaestui 25 (in codice quo usus sum 128 pulsuum), hoc aequivalet eventorum 25 timorum, qui in fine tabulae notitiae indicat.

 ++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
       }
   

Post hoc, timer avertimus et notitias processus (secundum notitia sheet) et modum potentiae consummationis HX711 commutandum est.


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);
}

Expectamus eventus a timer RTC cum intervallo 10 s ( hoc arbitrio tuo ) et HX711 in tracto deducimus , interregem in linea DOUTA.

Unum punctum, ligna output sunt per UART (baud rate 115200, TX - 6 fibulae, RX - 8 fibulae) omnes occasus in sdk_config.h.

Quomodo coniungere HX711 ADC ad NRF52832

Inventiones

Tibi gratias omnes pro attentione tua, spero hunc articulum utile fore et tempus pretiosum reducere tincidunt solutionem invenire. Dicere cupimus technicum accessum quem Nordic usus in suis suggestis suggestis esse satis interesting ex parte efficientiae energiae.

PS

Propositum adhuc sub evolutione est, quare si hic locus interest, in proximo articulo conabor algorithmum ponderis sensoriis calibrandi describere, ac ACERVUM BLE connectere.

materials

Source: www.habr.com