Как Π΄Π° ΡΠ²ΡŠΡ€ΠΆΠ΅Ρ‚Π΅ HX711 ADC към NRF52832

1. Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅

На Π΄Π½Π΅Π²Π΅Π½ Ρ€Π΅Π΄ бСшС Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π΅Π½ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» Π·Π° ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€Π° nrf52832 с Π΄Π²Π° полумостови китайски Ρ‚Π΅Π½Π·ΠΎΠ΄Π°Ρ‚Ρ‡ΠΈΠΊΠ°.

Π—Π°Π΄Π°Ρ‡Π°Ρ‚Π° сС ΠΎΠΊΠ°Π·Π° Π½Π΅Π»Π΅ΠΊΠ°, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ бях ΠΈΠ·ΠΏΡ€Π°Π²Π΅Π½ ΠΏΡ€Π΅Π΄ липса Π½Π° ΠΊΠ°ΠΊΠ²Π°Ρ‚ΠΎ ΠΈ Π΄Π° Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌΠ° информация. По-вСроятно Π΅ β€žΠΊΠΎΡ€Π΅Π½ΡŠΡ‚ Π½Π° Π·Π»ΠΎΡ‚ΠΎβ€œ Π΄Π° Π΅ Π² SDK ΠΎΡ‚ самия Nordic Semiconductor - постоянни Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° вСрсиитС, някои ΠΈΠ·Π»ΠΈΡˆΡŠΡ†ΠΈ ΠΈ ΠΎΠ±ΡŠΡ€ΠΊΠ²Π°Ρ‰Π° функционалност. Π’Ρ€ΡΠ±Π²Π°ΡˆΠ΅ Π΄Π° напиша всичко ΠΎΡ‚ Π½ΡƒΠ»Π°Ρ‚Π°.

Мисля, Ρ‡Π΅ Ρ‚Π°Π·ΠΈ Ρ‚Π΅ΠΌΠ° Π΅ доста Π°ΠΊΡ‚ΡƒΠ°Π»Π½Π° въз основа Π½Π° Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ Ρ‚ΠΎΠ·ΠΈ Ρ‡ΠΈΠΏ ΠΈΠΌΠ° BLE стСк ΠΈ цял Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ β€žΠ΅ΠΊΡΡ‚Ρ€ΠΈβ€œ Π·Π° СнСргоспСстяващ Ρ€Π΅ΠΆΠΈΠΌ. Но няма Π΄Π° Π½Π°Π²Π»ΠΈΠ·Π°ΠΌ Ρ‚Π²ΡŠΡ€Π΄Π΅ дълбоко Π² тСхничСската част, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΏΠΎ Ρ‚Π°Π·ΠΈ Ρ‚Π΅ΠΌΠ° са написани ΠΌΠ½ΠΎΠ³ΠΎ статии.

2. ОписаниС Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

Как Π΄Π° ΡΠ²ΡŠΡ€ΠΆΠ΅Ρ‚Π΅ HX711 ADC към NRF52832

ЖСлязо:

  • 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 s (Ρ‚ΠΎΠ²Π° Π΅ ΠΏΠΎ ваша ΠΏΡ€Π΅Ρ†Π΅Π½ΠΊΠ°) ΠΈ стартирамС HX711 Π² ΠΌΠ°Π½ΠΈΠΏΡƒΠ»Π°Ρ‚ΠΎΡ€Π°, причинявайки ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½Π΅ Π½Π° линията DOUT.

Има ΠΎΡ‰Π΅ Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ°, рСгистрационнитС Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ сС ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Ρ‚ Ρ‡Ρ€Π΅Π· UART (скорост Π½Π° ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅ 115200, TX - 6 ΠΏΠΈΠ½Π°, RX - 8 ΠΏΠΈΠ½Π°) всички настройки са Π² sdk_config.h

Как Π΄Π° ΡΠ²ΡŠΡ€ΠΆΠ΅Ρ‚Π΅ HX711 ADC към NRF52832

Π”Π°Π½Π½ΠΈ

Благодаря Π½Π° всички Π·Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅Ρ‚ΠΎ, надявам сС Ρ‚Π°Π·ΠΈ статия Π΄Π° бъдС ΠΏΠΎΠ»Π΅Π·Π½Π° ΠΈ Π΄Π° Π½Π°ΠΌΠ°Π»ΠΈ Ρ†Π΅Π½Π½ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π΄Π° намСрят Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. Искам Π΄Π° ΠΊΠ°ΠΆΠ°, Ρ‡Π΅ тСхничСският ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, ΠΊΠΎΠΉΡ‚ΠΎ Nordic ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² своитС ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΈ, Π΅ доста интСрСсСн ΠΎΡ‚ Π³Π»Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° Π΅Π½Π΅Ρ€Π³ΠΈΠΉΠ½Π°Ρ‚Π° СфСктивност.

PS

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ всС ΠΎΡ‰Π΅ Π΅ Π² процСс Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π°ΠΊΠΎ Ρ‚Π°Π·ΠΈ Ρ‚Π΅ΠΌΠ° прСдставлява интСрСс, Π² слСдващата статия Ρ‰Π΅ сС ΠΎΠΏΠΈΡ‚Π°ΠΌ Π΄Π° опиша Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌΠ° Π·Π° ΠΊΠ°Π»ΠΈΠ±Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° сСнзори Π·Π° Ρ‚Π΅Π³Π»ΠΎ, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Π½Π° BLE стСка.

ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈ

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€