Site Loader

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

ИспользованиС Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ² Π½Π° ESP32 | kotyara12.ru

Π”ΠΎΠ±Ρ€Ρ‹ΠΉ дСнь, ΡƒΠ²Π°ΠΆΠ°Π΅ΠΌΡ‹ΠΉ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŒ! БСгодня ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ прСдоставляСт Π½Π°ΠΌ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° ESP32.

НавСрноС я Π½Π΅ сильно ΠΏΠΎΠ³Ρ€Π΅ΡˆΡƒ ΠΏΡ€ΠΎΡ‚ΠΈΠ² истины, Ссли скаТу Ρ‡Ρ‚ΠΎ Π² практичСски всСх ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠ°Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρ‹ для отсчСта Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠ². Π’ Ρ‚ΠΎΠΌ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅. Π­Ρ‚ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ считываниСм Π΄Π°Π½Π½Ρ‹Ρ… с сСнсоров, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ врСмя ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊΠΈΠ΅ срСдства прСдоставляСт Π½Π°ΠΌ ESP32:

  • Ѐункция ets_delay_us()
  • Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ FreeRTOS – vTaskDelay() ΠΈ vTaskDelayUntil()
  • АппаратныС Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρ‹ 64-bit General Purpose Timer – 4 ΡˆΡ‚.
  • ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρ‹ (ΠΌΠ½ΠΎΠ³ΠΎ)

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, этот список Π½Π΅ ΠΏΠΎΠ»Π½Ρ‹ΠΉ, я ΠΏΠΎΠΊΠ° Π·Π½Π°ΠΊΠΎΠΌ Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ со всСми внутрСнностями ESP-IDF. Если Π²Ρ‹ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с Π΅Ρ‰Ρ‘ ΠΊΠ°ΠΊΠΈΠΌΠΈ-Π»ΠΈΠ±ΠΎ способами – поТалуйста, ΠΏΡ€ΠΎΡˆΡƒ Π² ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ. НачнСм с самого простого способа.

Ѐункция ets_delay_us()

Π•ΡΡ‚ΡŒ простая систСмная функция, которая выполняСт Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ Π½Π° врСмя us Π² микросСкундах с ΠΏΠΎΠ»Π½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Аналог delay() для Arduino, Π½ΠΎ с большим Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ.

void ets_delay_us(uint32_t us)

Π‘Ρ‚Ρ€ΠΎΠ³ΠΎ говоря, это Π½Π΅ совсСм Ρ‚Π°ΠΉΠΌΠ΅Ρ€. Π’ΠΎΡ‡Π½Π΅Π΅ – совсСм Π½Π΅ Ρ‚Π°ΠΉΠΌΠ΅Ρ€. CPU Ρ‚ΡƒΠΏΠΎ выполняСт Ρ†ΠΈΠΊΠ» while Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. МоТно ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ для формирования Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠ² ΠΏΡ€ΠΈ ΠΎΠ±ΠΌΠ΅Π½Π΅ с внСшними сСнсорами ΠΈ устройствами).

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ vTaskDelay() ΠΈ vTaskDelayUntil()

Π•Ρ‰Π΅ Π΄Π²Π° β€œΠ½Π΅ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°β€œ. Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ прСдоставляСт Π½Π°ΠΌ Π΄Π°ΠΆΠ΅ Π½Π΅ ESP32, Π° FreeRTOS ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ ΠΎΠ½ΠΈ для приостановки выполнСния Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ количСство Ρ‚ΠΈΠΊΠΎΠ². Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚

ets_delay_us() Π½Π΅ Π½Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ процСссор, Π° Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚ – ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡŽΡ‚ Π΅Π³ΠΎ ΠΎΡ‚ части Ρ€Π°Π±ΠΎΡ‚Ρ‹, Ρ‡Ρ‚ΠΎ Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Π΅Π΅. А Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΌΠΎΠ³ΡƒΡ‚ с успСхом ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ создании довольно Ρ‚ΠΎΡ‡Π½Ρ‹Ρ… Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ для пСриодичСского выполнСния Ρ‚ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹.

Π—Π°Π΄Π΅Ρ€ΠΆΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ количСство Ρ‚ΠΈΠΊΠΎΠ²:

void vTaskDelay(const TickType_t xTicksToDelay)

Π’ΠΈΠΊ – это ΠΎΠ΄ΠΈΠ½ β€œΡˆΠ°Π³β€ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ привязан ΠΊ β€œΠΊΠ²Π°Ρ€Ρ†ΠΎΠ²Π°Π½Π½ΠΎΠΉβ€ Ρ‚Π°ΠΊΠΎΠ²ΠΎΠΉ частотС процСссора, Π° Π·Π½Π°Ρ‡ΠΈΡ‚ отсчитываСмый ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ достаточно Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌ.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, это Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹ΠΉ Ρ‚Π°ΠΉΠΌΠ΅Ρ€, Π½ΠΎ для отсчСта 30 сСкунд ΠΌΠ΅ΠΆΠ΄Ρƒ измСнСниями с сСнсоров Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ‚. ΠŸΠ΅Ρ€Π΅ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π² миллисСкундах Π² Ρ‚ΠΈΠΊΠΈ достаточно Π»Π΅Π³ΠΊΠΎ. Для этого Ρƒ нас Π΅ΡΡ‚ΡŒ Π΄Π²Π° макроса:

  • врСмя Π² Ρ‚ΠΈΠΊΠ°Ρ… = врСмя Π² мс / portTICK_PERIOD_MS
  • врСмя Π² Ρ‚ΠΈΠΊΠ°Ρ… = pdMS_TO_TICKS ( врСмя Π² мс )

portTICK_PERIOD_MS ΠΈ pdMS_TO_TICKS – это макросы, привязанныС ΠΊ частотС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ любой способ (я ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽ Π²Ρ‚ΠΎΡ€ΠΎΠΉ). Но vTaskDelay() Π½Π΅ обСспСчиваСт идСального контроля частоты пСриодичСской Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ врСмя, Π·Π°Ρ‚Ρ€Π°Ρ‡Π΅Π½Π½ΠΎΠ΅ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ этого самого пСриодичСского ΠΊΠΎΠ΄Π°, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ прСрывания Π±ΡƒΠ΄ΡƒΡ‚ Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° частоту, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ вызываСтся

vTaskDelay(), ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π½Π° врСмя, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ выполняСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ итСрация Π·Π°Π΄Π°Ρ‡ΠΈ. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ влияниС этих эффСктов, сущСствуСт Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ продвинутая функция:

BaseType_t xTaskDelayUntil (TickType_t * const pxPreviousWakeTime, const TickType_t xTimeIncrement)

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, здСсь добавился Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ – ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ pxPreviousWakeTime, Π³Π΄Π΅ Π±ΡƒΠ΄Π΅Ρ‚ хранится врСмя послСднСго Π²Ρ‹Π·ΠΎΠ²Π° этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

И ΠΏΡ€ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ xTaskDelayUntil() Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ количСство Ρ‚ΠΈΠΊΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ скоррСктировано с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ этих Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π»Π΅Π³ΠΊΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» выполнСния ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования vTaskDelay() ΠΌΡ‹ ΡƒΠΆΠ΅ рассматривали Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… статСй, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π½Π° GitHub.Β 

АппаратныС Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρ‹

ΠŸΠΎΠΆΠ°Π»ΡƒΠΉ, это самый Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ² Π½Π° ESP32, хотя ΠΈ Π½Π΅ самый простой Π² использовании. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ…, ΠΊΠΎΠ³Π΄Π° трСбуСтся ΠΎΡ‡Π΅Π½ΡŒ высокая Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ измСряСмых ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠ².

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°ΠΌΠΈ потрСбуСтся использованиС ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ – Ссли Π²Ρ‹ ΠΈΠ·Π±Π΅Π³Π°Π΅Ρ‚Π΅ ΠΈΡ…, Ρ‚ΠΎ Π²Π°ΠΌ слСдуСт ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°ΠΌ. Π₯отя, Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Π΅ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρ‹ Π±Π΅Π· ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ, β€œΠ²Ρ€ΡƒΡ‡Π½ΡƒΡŽβ€ провСряя рСгистр Ρ‚Ρ€Π΅Π²ΠΎΠ³ΠΈ, Π½ΠΎ я Π½Π΅ Π²ΠΈΠΆΡƒ Π² этом Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ смысла.

Π§ΠΈΠΏ ESP32 содСрТит Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния – Π΄Π²Π΅ Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΏΠΎ Π΄Π²Π° Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°. ВсС ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ 64-Π±ΠΈΡ‚Π½Ρ‹ΠΌΠΈ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°ΠΌΠΈ, основанными Π½Π° 16-Π±ΠΈΡ‚Π½Ρ‹Ρ… ΠΌΠ°ΡΡˆΡ‚Π°Π±Π°Ρ‚ΠΎΡ€Π°Ρ… (ΠΈΡ… Π΅Ρ‰Ρ‘ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΏΡ€Π΅Π΄Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΠΈ) ΠΈ 64-Π±ΠΈΡ‚Π½Ρ‹Ρ… счСтчиках увСличСния/ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ автоматичСски.

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ:#include "

driver/timer.h"

ΠžΠ±Ρ‰Π°Ρ схСма Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°ΠΌΠΈ Ρ‚Π°ΠΊΠΎΠ²Π°:

  • Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ timer_init(). Π—Π΄Π΅ΡΡŒ Π²Ρ‹ Π·Π°Π΄Π°Π΅Ρ‚Π΅ коэффициСнт дСлСния входящСй частоты (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°), Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ счСта ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ автоматичСского Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ пСрСзапуска.
  • Π—Π°Π΄Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ timer_set_counter_value() ΠΈ timer_set_alarm_value().
  • Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ – ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ прСрывания ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π΅Π³ΠΎ ΠΊ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρƒ – timer_isr_callback_add() ΠΈ timer_enable_intr().
  • ЗапуститС счСтчик Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ timer_start()

Рассмотрим всС эти этапы ΠΏΠΎΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅.

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° ΠΈ настройка ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

Для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ:

esp_err_t timer_init(timer_group_t group_num, timer_idx_t timer_num, const timer_config_t *config)

Π³Π΄Π΅:

  • timer_group_t group_num – Π½ΠΎΠΌΠ΅Ρ€ Π³Ρ€ΡƒΠΏΠΏΡ‹ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ², ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ всСго Π΄Π²Π° значСния:TIMER_GROUP_0 ΠΈΠ»ΠΈTIMER_GROUP_1 (нумСрация начинаСтся с Π³ΠΎΠ»ΠΎΠ²Ρ‹ ΠΏΠΎΠ΅Π·Π΄Π° нуля)
  • timer_idx_t timer_num – Π½ΠΎΠΌΠ΅Ρ€ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Π² Π³Ρ€ΡƒΠΏΠΏΠ΅, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ всСго Π΄Π²Π° значСния:TIMER_0 ΠΈΠ»ΠΈTIMER_1
  • const timer_config_t *config – ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ выглядят Ρ‚Π°ΠΊ:

Рассмотрим эту структуру ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅:

  • uint32_t divider – Π”Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ Ρ‚Π°ΠΊΡ‚ΠΎΠ²ΠΎΠΉ частоты, ΠΈΠ»ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±Π°Ρ‚ΠΎΡ€. Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ дСлитСля ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ 2 Π΄ΠΎ 65536. Π”Π°, Π΄Π°, Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π²Π½Ρ‹ΠΌ 0 ΠΈΠ»ΠΈ 1, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ максимальная частота Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° 40MHz, Ρ‡Ρ‚ΠΎ соотвСтствуСт ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Ρƒ 0,025 микросСкунды.
  • timer_count_dir_t counter_dir – Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ счСта:
    TIMER_COUNT_DOWN
    – Π²Π½ΠΈΠ· ΠΈΠ»ΠΈ TIMER_COUNT_UP – Π²Π²Π΅Ρ€Ρ…
  • timer_autoreload_t auto_reload – Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ автоматичСский Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΉ рСстарт Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° послС Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ прСрывания; ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ значСния TIMER_AUTORELOAD_DIS ΠΈΠ»ΠΈΒ TIMER_AUTORELOAD_EN. ΠŸΡ€ΠΈ TIMER_AUTORELOAD_EN получится пСриодичСский Ρ‚Π°ΠΉΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ TIMER_AUTORELOAD_DIS – ΠΎΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½Ρ‹ΠΉ.
  • timer_alarm_t alarm_en – Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ Π½Π΅Ρ‚ сигнал β€œΠ±ΡƒΠ΄ΠΈΠ»ΡŒΠ½ΠΈΠΊΠ°β€ для Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°; ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ значСния TIMER_ALARM_DIS ΠΈΠ»ΠΈ TIMER_ALARM_EN
  • timer_start_t counter_en
    – Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ счСт (Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°) ΠΈΠ»ΠΈ Π½Π΅Ρ‚; ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π΄Π²Π° значСния: TIMER_PAUSE ΠΈΠ»ΠΈ TIMER_START. ΠŸΡ€ΠΈ TIMER_PAUSE Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ β€œΠ²Ρ€ΡƒΡ‡Π½ΡƒΡŽβ€ послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ всСх настроСк, ΠΈΠ½Π°Ρ‡Π΅ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡ‰Π΅Π½ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ
  • timer_intr_mode_t intr_type – всСгда TIMER_INTR_LEVEL (0), Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΏΠΎΠΊΠ° просто Π½Π΅Ρ‚, ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ Π·Π°ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ.

Если Π²Ρ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ, Π² Π΄Π°Π½Π½ΠΎΠΉ структурС Π½Π΅Ρ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ значСния счСтчиков Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°. Π˜Ρ… ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Для задания Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ значСния счСтчика Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ:

esp_err_t timer_set_counter_value(timer_group_t group_num, timer_idx_t timer_num, uint64_t load_val)

Π—Π΄Π΅ΡΡŒ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΈ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, Π° Ρ‚Π°ΠΊΠΆΠ΅ 64-Π±ΠΈΡ‚Π½ΠΎΠ΅ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика

Для задания ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ значСния счСтчика (ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π±ΡƒΠ΄Π΅Ρ‚ сгСнСрировано ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅) Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΏΠΎΡ…ΠΎΠΆΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ:

esp_err_t timer_set_alarm_value(timer_group_t group_num, timer_idx_t timer_num, uint64_t alarm_value) 

Π’ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, для измСнСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Π΅ΡΡ‚ΡŒ Π΅Ρ‰Ρ‘ цСлая ΠΊΡƒΡ‡ΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ:

  • timer_set_divider() – для измСнСния значСния дСлитСля (Π²ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ нСопрСдСлСнности рСкомСндуСтся ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ этого значСния)
  • timer_set_counter_mode() – для измСнСния направлСния счСта
  • timer_set_auto_reload() – для измСнСния Ρ€Π΅ΠΆΠΈΠΌΠ° Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ пСрСзапуска
  • timer_set_alarm() – для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ β€œΠ±ΡƒΠ΄ΠΈΠ»ΡŒΠ½ΠΈΠΊΠ°β€

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ

Π‘ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ разбСрСмся с прСрываниями. ΠŸΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΡ ΠΏΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρƒ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ-Π»ΠΈΠ±ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ‡Π΅Ρ€Π΅Π· Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π΅Ρ‰Π΅ происходит Π² вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ прСрывания – Π½Π΅ совсСм простыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ приостанавливаСт Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ всСх ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, поэтому ΠΊ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ ΠΏΡ€Π΅Π΄ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ трСбования:

  • ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ прСрывания Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ мСньшС ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΈΠ½Π°Ρ‡Π΅ сработаСт WDT для ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ ΠΈ устройство Π±ΡƒΠ΄Π΅Ρ‚ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½ΠΎ.
  • ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ прСрывания Π΄ΠΎΠ»ΠΆΠ΅Π½ постоянно находится Π² быстрой памяти IRAM, поэтому Π΅Π³ΠΎ слСдуСт ΠΏΠΎΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ IRAM_ATTR.
  • Π’ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°Ρ… ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ Π½Π΅ допускаСтся использованиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ESP_LOGx, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Π»Π΅Π³Ρ‡Π΅Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ESP_DRAM_LOGx.
  • Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ всСгда ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π²Π½Π΅ контСкста ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡. Π”Π°Π±Ρ‹ ΡΠΎΠ±Π»ΡŽΠ΄Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ· ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ Π»ΡƒΡ‡ΡˆΠ΅ всСго ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ„Π»Π°Π³ Π² EventGroup ΠΈ Ρ‚.Π΄. Π”Π°, Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ ΠΌΠΎΠΆΠ½ΠΎ просто ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ глобальной статичСской ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ bool ΠΈΠ»ΠΈ int, которая Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅, Π½ΠΎ это Π½Π΅ привСтствуСтся.

Π’Π½Π°Ρ‡Π°Π»Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ callback-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½Π° ΠΏΡ€ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ прСрывания, называСтся ΠΎΠ½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ прСрывания (ISR handler ΠΈΠ»ΠΈ ISR callback). БоздаСтся ΠΎΠ½Π° ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ:

НичСго свСрхслоТного, Π½ΠΎ стоит ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π΄Π²Π° сущСствСнных ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°:

  • Ѐункция эта Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π° ΠΊΠ°ΠΊ IRAM_ATTR, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ компилятор постоянно Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π΅Ρ‘ Π² быстрой памяти.
  • ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: ΠΊΠ°ΠΊΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ эта функция (кстати, Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… ISR-ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°Ρ… Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ значСния ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ). Если Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ FreeRTOS (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ xQueueSendFromISR()) ΠΈΠ· ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ, Ρ‚ΠΎ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true ΠΈΠ»ΠΈ false Π½Π° основС Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° pxHigherPriorityTaskWoken. Если Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ pxHigherPriorityTaskWoken Π»ΡŽΠ±Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² FreeRTOS Ρ€Π°Π²Π½ΠΎ pdTRUE, Ρ‚ΠΎ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ true; Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ false.

ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ°Ρ функция ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ

Π—Π°Ρ‚Π΅ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π΅Ρ‘ ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ

esp_err_t timer_isr_callback_add(timer_group_t group_num, timer_idx_t timer_num, timer_isr_t isr_handler, void *arg, int intr_alloc_flags) 

Π³Π΄Π΅:

  • timer_group_t group_num – Π½ΠΎΠΌΠ΅Ρ€ Π³Ρ€ΡƒΠΏΠΏΡ‹ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ²
  • timer_idx_t timer_num – Π½ΠΎΠΌΠ΅Ρ€ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Π² Π³Ρ€ΡƒΠΏΠΏΠ΅
  • timer_isr_t isr_handler – ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ
  • void *arg – ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ для ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°
  • int intr_alloc_flags – просто ΠΏΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ 0

ПослС этого Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ прСрывания:

esp_err_t timer_enable_intr(timer_group_t group_num, timer_idx_t timer_num) 

А Ссли Ρƒ нас насколько Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ²? МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²Π° ΠΏΡƒΡ‚ΠΈ:

  • ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ для всСх Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ², Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π² Π½Π΅Π³ΠΎ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ Ρ‡Π΅Ρ€Π΅Π· void *arg, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΉΠΌΠ΅Ρ€, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ поступило ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅.
  • А ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ простому – Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ нСсколько Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΈΡ… ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ.

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ hardware Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠΌ

ВсС Π³ΠΎΡ‚ΠΎΠ²ΠΎ ΠΊ запуску нашСго космичСского корабля Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°. ДСлаСтся это совсСм просто:

esp_err_t timer_start(timer_group_t group_num, timer_idx_t timer_num) 

ΠšΡΡ‚Π°Ρ‚ΠΈ, Ссли Π’Π°ΠΌ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΡ€ΠΈΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠΌΠ΅Ρ€, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ timer_pause().

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с hardware Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°ΠΌΠΈ

ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°ΠΌΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΏΠΎ ссылкС: esp-idf/timer_group_example_main.c Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ сразу Π΄Π²Π° Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Π² Π΄Π²ΡƒΡ… Π³Ρ€ΡƒΠΏΠΏΠ°Ρ… (с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Ρ€Π΅ΠΆΠΈΠΌΠ°ΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ соотвСтствСнно) – этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΌΠ΅Ρ€Π΅ дСмонстрируСт возмоТности Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠΌΠΈ.

Но, Π½Π° ΠΌΠΎΠΉ взгляд, Π½ΠΎΠ²ΠΈΡ‡ΠΊΡƒ ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ нСпросто Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, поэтому я создал Π΅Ρ‰Ρ‘ Π±ΠΎΠ»Π΅Π΅ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ всСго с ΠΎΠ΄Π½ΠΈΠΌ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠΌ Π±Π΅Π· всяких β€œΡ…ΠΈΡ‚Ρ€ΠΎΡΡ‚Π΅ΠΉβ€: dzen/timer_hardware. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ всСго 1 Ρ‚Π°ΠΉΠΌΠ΅Ρ€, настроСнный Π½Π° ΠΏΠΎΠ²Ρ‚ΠΎΡ€ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 3 сСкунды. А Ρ‡Π΅Ρ€Π΅Π· ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ 5 сСкунд Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ основной Ρ†ΠΈΠΊΠ», ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ vTaskDelay(). ВсС ΠΏΡ€Π΅Π΄Π΅Π»ΡŒΠ½ΠΎ просто. Если ΠΏΡ€ΠΎΡˆΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€, ΠΏΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ:

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, всё Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ β€œΠΊΠ°ΠΊ часы”. Π’Π°ΠΊ это ΠΈ Π΅ΡΡ‚ΡŒ часы!

Π’ ΠΌΠΎΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ для просты Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ контроля ошибок ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ – сдСлайтС это ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ. НуТна Π² этом ΠΏΠΎΠΌΠΎΡ‰ΡŒ – ΠΏΠΈΡˆΠΈΡ‚Π΅ Π² коммСнтариях, Π·Π°ΠΏΠΈΠ»ΠΈΠΌ Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½Ρƒ ΡΡ‚Π°Ρ‚ΡŒΡŽ.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, этим Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°ΠΌΠΈ Π½Π΅ ограниваСтся, Ρ‚Π°ΠΌ Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ нСсколько интСрСсных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π½ΠΎ ΠΌΡ‹ ΠΈΡ… ΠΏΠΎΠΊΠ° опустим.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρ‹

АппаратныС Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρ‹ – это Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Π½ΠΎ ΠΈΡ… Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅! А Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ количСство Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Ρ… Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π»Π΅Π³ΠΊΠΎ ΠΈΡΡ‡ΠΈΡΠ»ΡΡ‚ΡŒΡΡ дСсятками. Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π² Espressif ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π»ΠΈ способ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ – ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρ‹, привязанныС ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ· Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ².

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρ‹ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ нСсколько Ρ…ΡƒΠ΄ΡˆΠΈΠΌΠΈ характСристиками, Ρ‡Π΅ΠΌ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Π΅ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρ‹ ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния, Π½ΠΎ, Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, прСкрасно подходят для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ Π² ΠΏΠΎΠ΄Π°Π²Π»ΡΡŽΡ‰Π΅ΠΌ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ нСсколько ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ:

  • МаксимальноС Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°) Ρ€Π°Π²Π½ΠΎ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Ρƒ Ρ‚ΠΈΠΊΠ° FreeRTOS.
  • ΠžΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΈΠ· Π·Π°Π΄Π°Ρ‡ΠΈ с Π½ΠΈΠ·ΠΊΠΈΠΌ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ

АппаратныС Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρ‹ свободны ΠΎΡ‚ ΠΎΠ±ΠΎΠΈΡ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ, Π½ΠΎ Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ ΠΎΠ½ΠΈ ΠΌΠ΅Π½Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ Π² использовании. НапримСр, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ прилоТСния ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ запуск событий Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ врСмя Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ, Π½ΠΎ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ содСрТит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ «сравнСния», ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ прСрывания. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ²Π΅Ρ€Ρ… Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ срСдство для управлСния списком ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΡ… событий, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ для этих событий ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ возникновСния ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ. Π’Π½ΡƒΡ‚Ρ€ΠΈ всС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ всСго ΠΎΠ΄ΠΈΠ½ 64-Π±ΠΈΡ‚Π½Ρ‹ΠΉ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΉ LAC-Ρ‚Π°ΠΉΠΌΠ΅Ρ€.

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌΠΈ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ другая Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°: #include "esp_timer. h". ΠžΠ±Ρ‰Π°Ρ схСма Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌΠΈ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Π΅:

  • Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ – ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ событий Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°
  • Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ esp_timer_create()
  • ЗапуститС счСтчик Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ esp_timer_start_once() (ΠΎΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ) ΠΈΠ»ΠΈ esp_timer_start_periodic() (постоянно)

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, процСсс запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΡ€ΠΎΡ‡Π΅. Π”Π° ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ использованиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ², Π½Π° ΠΌΠΎΠΉ взгляд, ΠΏΡ€ΠΎΡ‰Π΅, Ρ‡Π΅ΠΌ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ…. ΠΠ°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ мСньшС, Π° для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ обычная функция ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°, Π° Π½Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ (поэтому ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ€Π΅Π·Π²ΠΈΡ‚ΡŒΡΡ). Рассмотрим всС эти этапы ΠΏΠΎΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°

Как я ΡƒΠΆΠ΅ написал, Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ обычная функция ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°, поэтому ΠΊ Π½Π΅ΠΉ Π½Π΅ ΠΏΡ€Π΅Π΄ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… особых Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ. МоТно ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΊ:

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ (инициализация) Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°

Π”Π°Π»Π΅Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

esp_err_t esp_timer_create(const esp_timer_create_args_t *create_args, esp_timer_handle_t *out_handle) 

Π³Π΄Π΅:

  • const esp_timer_create_args_t *create_args – ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° структуру, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ создаваСмого Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°
  • esp_timer_handle_t *out_handle – ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ…Π΅Π½Π΄Π» Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ смоТСтС ΠΏΠΎΡ‚ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ этим Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠΌ

Рассмотрим esp_timer_create_args_t ΠΏΠΎΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅:

  • esp_timer_cb_t callback – функция ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°
  • void* arg – Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°
  • esp_timer_dispatch_t dispatch_method – ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚Π°: ΠΈΠ· Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈΠ»ΠΈ Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅
  • const char* name – имя Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ
  • bool skip_unhandled_events – ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ событий, Ссли ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° события Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Π±Ρ‹Π»Π° ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Π°. ΠžΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ Π² любом случаС, ΠΎΠ½ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ потСрян. Π’ Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ случаС, ΠΊΠΎΠ³Π΄Π° Ρ‚Π°ΠΉΠΌΠ΅Ρ€ Π½Π΅ обрабатывался Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π° (для пСриодичСских Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ²), ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΎΠ΄ΠΈΠ½ Π·Π° Π΄Ρ€ΡƒΠ³ΠΈΠΌ, Π½Π΅ доТидаясь установлСнного ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π°. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎ для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΈ для устранСния Ρ‚Π°ΠΊΠΎΠ³ΠΎ повСдСния Π±Ρ‹Π»Π° Π²Π²Π΅Π΄Π΅Π½Π° опция skip_unhandled_events. Если установлСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ skip_unhandled_events = true, Ρ‚ΠΎ пСриодичСский Ρ‚Π°ΠΉΠΌΠ΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ истСкал нСсколько Ρ€Π°Π·, Π½Π΅ имСя возмоТности Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ², ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΡΠΎΠ±Ρ‹Ρ‚ΠΈΡŽ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ станСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°.

Π― Π·Π°ΠΏΠΎΠ»Π½ΠΈΠ» эту структуру Ρ‚Π°ΠΊ:

ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Ρ…Π΅Π½Π΄Π» Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Π½Π° NULL послС Π²Ρ‹Π·ΠΎΠ²Π° esp_timer_create(), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈ Π²Π½Π΅ΠΏΠ»Π°Π½ΠΎΠ²ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ MCU.

Запуск Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°

Π’Π°ΠΉΠΌΠ΅Ρ€ создали, ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ Π΅Π³ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ. Π’Π°ΠΉΠΌΠ΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΡƒΡ‰Π΅Π½ Π² ΠΎΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΈΠ»ΠΈ Π² пСриодичСском Ρ€Π΅ΠΆΠΈΠΌΠ΅.

  • Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ Π² ΠΎΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅, Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ esp_timer_start_once(esp_timer_handle_t timer, uint64_t timeout_us), ΠΏΠ΅Ρ€Π΅Π΄Π°Π² Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π», Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ². ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Ρ‚Π°ΠΉΠΌΠ΅Ρ€ считаСтся остановлСнным.
  • Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ Π² пСриодичСском Ρ€Π΅ΠΆΠΈΠΌΠ΅, Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ esp_timer_start_periodic(esp_timer_handle_t timer, uint64_t period), ΠΏΠ΅Ρ€Π΅Π΄Π°Π² ΠΏΠ΅Ρ€ΠΈΠΎΠ΄, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ². Π’Π°ΠΉΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€ , ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ esp_timer_stop().

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° вызываСтся esp_timer_start_once() ΠΈΠ»ΠΈ esp_timer_start_periodic(). Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ Ρ‚Π°ΠΉΠΌΠ΅Ρ€, сначала остановитС Π΅Π³ΠΎ, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ ΠΎΠ΄Π½Ρƒ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ запуска.

Π’ ΠΈΡ‚ΠΎΠ³Π΅ вСсь процСсс запуска Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΊΠ°ΠΊ-Ρ‚ΠΎ Ρ‚Π°ΠΊ:

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, всё довольно просто.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌΠΈ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°ΠΌΠΈ Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π½Π° GitHub ΠΏΠΎ ссылкС: dzen/timer_software

Π’Π°ΠΉΠΌΠ΅Ρ€Ρ‹ arduino

ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ Π½Π° Arduino ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ многозадачности для этого ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°. Для этого просто Π½ΡƒΠΆΠ½Π° своСобразная ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠ°, Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ являСтся использованиС ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ. Π’ процСссС Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ процСссор выполняСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π° ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΈΡ… остановку ΠΈ Π² соотвСтствиС с ΠΊΠΎΠ΄ΠΎΠΌ заставляСт Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Π±ΠΎΠ»Π΅Π΅ высоким ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ. ΠŸΡ€ΠΎΡ‰Π΅ говоря, прСрывания β€” это Π½Π°Π±ΠΎΡ€ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠ² для Ρ‚Π΅Ρ… ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Ρ… процСссов, исполняСмых ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠΌ. Π­Ρ‚ΠΎΡ‚ процСсс ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ ΠΈ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΠΊ сСбС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.


Поиск Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ Π’Π°ΡˆΠ΅ΠΌΡƒ запросу:

Π‘Ρ…Π΅ΠΌΡ‹, справочники, Π΄Π°Ρ‚Π°ΡˆΠΈΡ‚Ρ‹:

ΠŸΡ€Π°ΠΉΡ-листы, Ρ†Π΅Π½Ρ‹:

ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΡ, ΡΡ‚Π°Ρ‚ΡŒΠΈ, ΠΌΠ°Π½ΡƒΠ°Π»Ρ‹:

Π”ΠΎΠΆΠ΄ΠΈΡ‚Π΅ΡΡŒ окончания поиска Π²ΠΎ всСх Π±Π°Π·Π°Ρ….

По Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡŽ появится ссылка для доступа ΠΊ Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹ΠΌ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°ΠΌ.

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅:

  • Π£Ρ€ΠΎΠΊ 39. Π Π΅Π»Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ: ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ устройствами ΠΏΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρƒ
  • Arduino ΠΈ прСрывания Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°
  • Асинхронный Ρ‚Π°ΠΉΠΌΠ΅Ρ€ Π² Arduino
  • Π’Π°ΠΉΠΌΠ΅Ρ€ Π½Π° arduino
  • Ѐункция Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Π±Π΅Π· использования Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ
  • Arduino: прСрывания ΠΏΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρƒ

ΠŸΠžΠ‘ΠœΠžΠ’Π Π˜Π’Π• Π’Π˜Π”Π•Πž ПО Π’Π•ΠœΠ•: ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ Π² Ρ‚Π΅ΠΏΠ»ΠΈΡ†Ρƒ — Π½Π° Arduino

Π£Ρ€ΠΎΠΊ 39. Π Π΅Π»Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ: ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ устройствами ΠΏΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρƒ


GitHub is home to over 40 million developers working together to host and review code, manage projects, and build software together. Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community. Already on GitHub? Sign in to your account. Будя Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ATMegap ΠΈΠΌΠ΅Π΅Ρ‚ 2 ΡˆΡ‚. ΠŸΠΎΠ΄ΡΠΊΠ°ΠΆΠΈΡ‚Π΅ поТалуйста Π’Π°ΡˆΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° рассчитана Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° 16 Π±ΠΈΡ‚Π½Ρ‹Π΅ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρ‹?

ΠŸΠΎΠ΄ΡΠΊΠ°ΠΆΠΈΡ‚Π΅ поТалуйста Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ Π½Π° ATMegap процСссорС, с вашСй Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Ρ€ΠΈ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°? Для ΠΌΠΎΠ΅ΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ достаточно ΠΈ Π΄Π²ΡƒΡ…, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠΎΠΌΡƒ Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Ρ‚Ρ€ΠΈ ΡˆΡ‚ΡƒΠΊΠΈ Код для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ² для ARV я Π±Ρ€Π°Π» ΠΈΠ· стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Arduino для управлСния ΡΠ΅Ρ€Π²ΠΎΠΌΠ°ΡˆΠΈΠ½ΠΊΠ°ΠΌΠΈ Servo.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ» Π½Π° Π°Ρ€Π΄ΡƒΠΈΠ½Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ ΠΏΠΎΠ΄ Ρ€ΡƒΠΊΠΎΠΉ Uno ΠΈ Leonardo, каТСтся. Для ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Ρ‡ΠΈΠΏΠΎΠ² Π½Π΅ провСрял — эта Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° Π² основном ΠΏΠΎΠΏΠ°Π»Π° Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΊΠ°ΠΊ Π΅ΡΡ‚ΡŒ. Π‘ΠΊΠΎΡ€Π΅Π΅ всСго придСтся ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΄Π°Ρ‚Π°ΡˆΠΈΡ‚ Π½Π° ваш Ρ‡ΠΈΠΏ. И Π±Ρ‹ Π΅Ρ‰Π΅ посмотрСл послСднюю Π²Π΅Ρ€ΡΠΈΡŽ Servo. Skip to content. Dismiss Join GitHub today GitHub is home to over 40 million developers working together to host and review code, manage projects, and build software together.

Sign up. New issue. Copy link Quote reply. This comment has been minimized. Sign in to view. Π”ΠΎΠ±Ρ€Ρ‹ΠΉ дСнь. ΠŸΡ€ΠΎΡˆΡƒ прощСния Π·Π° Π΄ΠΎΠ»Π³ΠΈΠΉ ΠΎΡ‚Π²Π΅Ρ‚, вСсна ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π°ΡΡŒ сильно заморочСная. Sign up for free to join this conversation on GitHub.

Already have an account? Sign in to comment. You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window.


Arduino ΠΈ прСрывания Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°

Π­Ρ‚Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° с высоким ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ называСтся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ interrupt handler. Π’ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΉ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ я рассматривал, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ millis для управлСния Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ. Π’Π°ΠΉΠΌΠ΅Ρ€ ΠΈ прСрывания ΠΏΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρƒ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π½Π°ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ это. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π» нас ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Π² миллисСкунду.

ΠŸΡ€ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ питания, Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρ‹ Ρ€Π΅Π»Π΅ Π½Π΅ ΡΠ±ΠΈΠ²Π°ΡŽΡ‚ΡΡ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΡ… настройки хранятся Π² энСргонСзависимой памяти Arduino. Π’Π΅ΠΊΡƒΡ‰Π΅Π΅ врСмя Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅.

Асинхронный Ρ‚Π°ΠΉΠΌΠ΅Ρ€ Π² Arduino

ВсСм ΠΏΡ€ΠΈΠ²Π΅Ρ‚! БСгодня ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Ρ‚Π°ΠΊΠΈΡ… малопопулярных Π² срСдС Π°Ρ€Π΄ΡƒΠΈΠ½Ρ‰ΠΈΠΊΠΎΠ² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ…, ΠΊΠ°ΠΊ TimerOne ΠΈ TimerThree, Π° Ρ‚Π°ΠΊΠΆΠ΅ разбСрСмся для Ρ‡Π΅Π³ΠΎ ΠΎΠ½ΠΈ Π½ΡƒΠΆΠ½Ρ‹ ΠΈ ΠΊΠ°ΠΊ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ Π΄Π°Π½Π½Ρ‹ΠΌ ссылкам: TimerOne , TimerThree. И Π½Π°Ρ‡Π½Π΅ΠΌ ΠΌΡ‹ с Ρ‚Π°ΠΊΠΎΠ³ΠΎ понятия, ΠΊΠ°ΠΊ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρ‹-счСтчики. Если ΠΌΡ‹ Π±Π΅Ρ€Π΅ΠΌ Arduino, Ρ‚ΠΎ Π²ΠΎ встроСнном Π² Π½Π΅Π΅ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π΅ Atmega Π΅ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ Ρ‚Π°ΠΊΠΈΡ… Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°. Π˜Ρ… использованиС Π΄Π°Π΅Ρ‚ большоС Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Ρˆ Π² энСргоэффСктивности, Π½Π΅ давая ΠΏΡ€ΠΎΡΡ‚Π°ΠΈΠ²Π°Ρ‚ΡŒ мощностям ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° ΠΏΠΎ сСкундС ΠΈΠ»ΠΈ Π½Π° полсСкунды. Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ Π΄Π°Π½Π½Ρ‹ΠΌ ссылкам: TimerOne , TimerThree А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°Ρ‡Π½Π΅ΠΌ нСпосрСдствСнноС знакомство с Π½ΠΈΠΌΠΈ. Одним ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ² являСтся Ρ‚ΠΈ разрядный Ρ‚Π°ΠΉΠΌΠ΅Ρ€. Он выглядит Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅ Π½ΠΈΠΆΠ΅: Для ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ обратимся ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. Π Π°Π·Π±Π΅Ρ€Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Ρ‡Π΅Ρ€Π΅Π· Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρ‹ ΠΈ рассмотрим Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ…:.

Π’Π°ΠΉΠΌΠ΅Ρ€ Π½Π° arduino

GitHub is home to over 40 million developers working together to host and review code, manage projects, and build software together. Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community. Already on GitHub?

Π’Ρ…ΠΎΠ΄ РСгистрация ВосстановлСниС пароля Π’Ρ…ΠΎΠ΄ Π—Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ мСня. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ссылку Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ пароля.

Ѐункция Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Π±Π΅Π· использования Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ

Π’ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ рассказываСтся ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ²-счётчиков Arduino. Всё написанноС Ρ‚Π°ΠΊΠΆΠ΅ Π²Π΅Ρ€Π½ΠΎ ΠΈ для ΠΊΠ»ΠΎΠ½ΠΎΠ² Arduino, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Freeduino. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ тСхничСскиС Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹, для понимания ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ бСсполСзны ΡΡ‚Π°Ρ‚ΡŒΠΈ ИспользованиС ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ Arduino , ΠŸΠΎΡ€Ρ‚Ρ‹ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° Arduino ΠΈ Как ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΊ Arduino ΠœΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Arduino оснащён трёмя Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°ΠΌΠΈ-счётчиками с Π½ΠΎΠΌΠ΅Ρ€Π°ΠΌΠΈ 0, 1 ΠΈ 2. Π’Π°ΠΉΠΌΠ΅Ρ€Ρ‹ 0 ΠΈ 2 ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π² 8 Π±ΠΈΡ‚, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΈΡ… счётный Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΎΡ‚ 0 Π΄ΠΎ

Arduino: прСрывания ΠΏΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρƒ

Π― ΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ с Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ с Arduino. Π― Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ interrupts , ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ я Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ подсвСтку, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ врСмя прСрывания. БущСствуСт ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°, Π½ΠΎ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ внСшниС прСрывания attachInterrupt. Π― Π±Ρ‹ Ρ…ΠΎΡ‚Π΅Π» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ прСрывания.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΎΠ±ΡΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρ‹ AVR ΠΈ Arduino ΠΈ Ρ‚ΠΎ, ΠΊΠ°ΠΊ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Arduino ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… ΠΈ схСмах ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

ΠŸΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°ΠΌ ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠ°Ρ‚ΡŒΡΡ Π½Π° события Π±Π΅Π· нСобходимости постоянно ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ условий, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΈ Π²Π°ΠΆΠ½Ρ‹Π΅ измСнСния. Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ возмоТности ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ источники ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ ΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π°ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ прСрывания, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠΌ. Для дСмонстрации использования ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ вСрнСмся вновь ΠΊ Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹ΠΌ Π²Ρ…ΠΎΠ΄Π°ΠΌ.

Π― Ρ…ΠΎΡ‡Ρƒ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎ Π’Π°ΠΉΠΌΠ΅Ρ€Ρ‹ Arduino Nano. Π›ΡƒΡ‡ΡˆΠΈΠΉ способ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°Ρ… Arduino Nano — ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°Ρ… Π² Π±Π°Π·ΠΎΠ²ΠΎΠΌ Ρ‡ΠΈΠΏΠ΅: ATmega Он ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Ρ€ΠΈ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°:. К соТалСнию, Π½Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Arduino для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ ΠΊ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°ΠΌ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π½Ρ‹Π΅ прСрывания, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ ΠΊΠΎΠ΄. Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ прСрывания ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:.

ΠŸΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΡ β€” ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Arduino, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ внСшним устройствам Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠΌ ΠΏΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… событий. ΠŸΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ β€” это сигнал, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сообщаСт процСссору ΠΎ наступлСнии ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ события, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π½Π΅Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ внимания.

Π£Π·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с прСрываниями ΠΏΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρƒ. НапишСм ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ с ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ процСссами. Π’ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π°Π΄ΠΎ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ дСйствий. Π’ΠΎ Π²Π²Π΅Π΄Π΅Π½ΠΈΠΈ я ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ» ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° Ρ…ΠΎΠ»ΠΎΠ΄ΠΈΠ»ΡŒΠ½ΠΈΠΊΠ° Π½Π° ΠΌΠΎΠ΄ΡƒΠ»Π΅ ΠŸΠ΅Π»ΡŒΡ‚ΡŒΠ΅. ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡŽ, ΠΊΠ°ΠΊΠΈΠ΅ дСйствия ΠΎΠ½Π° ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Π΅Ρ‚:. ВсС эти ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ цикличСски, Ρƒ всСх Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Ρ‹ Ρ†ΠΈΠΊΠ»ΠΎΠ². Π›ΡŽΠ±ΠΎΠ΅, Π΄Π°ΠΆΠ΅ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ нСприятностям: Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚ΠΈ измСрСния, Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ стабилизаторов, ΠΌΠ΅Ρ€Ρ†Π°Π½ΠΈΡŽ ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ², нСустойчивой Ρ€Π΅Π°ΠΊΡ†ΠΈΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΉ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΈ Ρ‚.

Generally, an ISR should be as short and fast as possible. If your sketch uses multiple ISRs, only one can run at a time, other interrupts will be executed after the current one finishes in an order that depends on the priority they have. Since delay requires interrupts to work, it will not work if called inside an ISR.


Arduino Slovakia — ΠšΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° AVR

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

Π’Π°ΠΉΠΌΠ΅Ρ€ рассчитываСтся Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ CTC. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡƒΡŽ частоту, MCU ΠΈ Ρ‚Π°ΠΉΠΌΠ΅Ρ€. Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ Π Π°ΡΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ. Π‘ΠΊΠΎΠΏΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² Π±ΡƒΡ„Π΅Ρ€ ΠΎΠ±ΠΌΠ΅Π½Π°. Π’ΡΡ‚Π°Π²ΡŒΡ‚Π΅ ΠΊΠΎΠ΄ Π² Arduino IDE. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ ΠΎΠ±ΡƒΡ‡Π°ΡŽΡ‰Π΅Π΅ Π²ΠΈΠ΄Π΅ΠΎ Π½Π° YouTube.

  • ΠšΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ v. {{вСрсия}}
  • О
  • ΠžΡ‚Π»Π°Π΄ΠΊΠ°

Вактовая частота Ардуино:

ΠœΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€:

Π’Π°ΠΉΠΌΠ΅Ρ€:

Π—Π°ΠΏΡ€ΠΎΡˆΠ΅Π½Π½Π°Ρ частота Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° прСрывания:

Π¨Π°Π±Π»ΠΎΠ½:

ПослСдняя ошибка: Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ допустимоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ OCR. {{last_ocr}}>{{timer. maxvalue}}

{{ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅}}

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:


Π£Ρ‡Π΅Π±Π½ΠΎΠ΅ пособиС

ΠœΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρ‹

ATmega328P

Arduino Uno, Arduino Pro Mini.

ATmega48A, ATmega48PA, ATmega88A, ATmega88PA, ATmega168A, ATmega168PA, ATmega328.

  • Π’Π°ΠΉΠΌΠ΅Ρ€0 β€” 8-Π±ΠΈΡ‚Π½Ρ‹ΠΉ
  • Π’Π°ΠΉΠΌΠ΅Ρ€ 1 β€” 16-разрядный
  • Π’Π°ΠΉΠΌΠ΅Ρ€ 2 β€” 8-Π±ΠΈΡ‚Π½Ρ‹ΠΉ
ATmega2560

Arduino Mega 2560.

ATmega640, ATmega1280, ATmega1281, ATmega2561.

  • Π’Π°ΠΉΠΌΠ΅Ρ€0 β€” 8-Π±ΠΈΡ‚Π½Ρ‹ΠΉ
  • Π’Π°ΠΉΠΌΠ΅Ρ€ 1 β€” 16-разрядный
  • Π’Π°ΠΉΠΌΠ΅Ρ€ 2 β€” 8 Π±ΠΈΡ‚
  • Π’Π°ΠΉΠΌΠ΅Ρ€ 3 β€” 16-Π±ΠΈΡ‚Π½Ρ‹ΠΉ
  • Π’Π°ΠΉΠΌΠ΅Ρ€ 4 β€” 16-Π±ΠΈΡ‚Π½Ρ‹ΠΉ
  • Π’Π°ΠΉΠΌΠ΅Ρ€ 5 β€” 16-Π±ΠΈΡ‚Π½Ρ‹ΠΉ
ATtiny84

ATtiny24, ATtiny44.

  • Π’Π°ΠΉΠΌΠ΅Ρ€0 β€” 8-Π±ΠΈΡ‚Π½Ρ‹ΠΉ
  • Π’Π°ΠΉΠΌΠ΅Ρ€ 1 β€” 16-разрядный
ATtiny85

ATtiny25, ATtiny45.

  • Π’Π°ΠΉΠΌΠ΅Ρ€0 β€” 8-Π±ΠΈΡ‚Π½Ρ‹ΠΉ
  • Π’Π°ΠΉΠΌΠ΅Ρ€ 1 β€” 8-Π±ΠΈΡ‚Π½Ρ‹ΠΉ

Бписок измСнСний

  • v. 8 — ATtiny84
  • v.7 — ATmega2560
  • вСрсия 6 — ATtiny85
  • v. 5 — Π Π΅Π΄ΠΈΠ·Π°ΠΉΠ½
  • v. 4 — CTC Π½Π° Timer0 ΠΈ Timer2 исправлСно
  • v.3 — Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ² ATmega328P + сортировка
  • v. 2 — Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½ CTC Π½Π° Timer0 ΠΈ Timer1
  • v.1 — ΠΠ°Ρ‡Π°Π»ΡŒΠ½Π°Ρ вСрсия (ATmega328P)

ИндСкс ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ ОКР Частота Π”ΠΈΡ„Ρ„.
{{$индСкс}} {{ x.ΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ }} {{x.ocr}} {{Ρ….частота}} {{x.dif}}
 Π»ΡƒΡ‡ΡˆΠΈΠΉ_индСкс: {{Π»ΡƒΡ‡ΡˆΠΈΠΉ_индСкс}}
ΠΌΠΊ: {{ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ | json}}
Ρ‚Π°ΠΉΠΌΠ΅Ρ€: {{Ρ‚Π°ΠΉΠΌΠ΅Ρ€ | json}}
ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹ΠΉ_список: {{ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹ΠΉ_список | json}}
 

Апликация

  • ΠžΡ…ΠΌΠΎΠ²ΡΠΊΠΈΠΉ Π·Π°ΠΊΠΎΠ½
  • ΠšΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° AVR
  • РСзистор сСрии E
  • Π’Π°Π±Π»ΠΈΡ†Π° рСгистров AVR
  • AngularJS Π­ΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ

МСню

  • Π”ΠΎΠΌΠΎΠ²
  • Π‘Ρ‚Ρ€Π°Π½ΠΊΠΈ
  • Π˜ΡΡ‚ΠΎΡ€ΠΈΡ страны
  • Π‘Π»ΠΎΠ³
  • На затяТку
  • ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
  • ΠœΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Atmel
  • Π’ΠΈΠ΄Π΅ΠΎ
  • Π₯лядат

ΠŸΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΡ Arduino ΠΈ синхронизированныС события

Настройка ΠΊΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ (2)

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ cookie ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ основных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ для ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π²Π΅Π±-сайта.

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ„Π°ΠΉΠ»Π°Ρ… cookie Π‘ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ„Π°ΠΉΠ»Π°Ρ… cookie

Имя ΠŸΠ΅Ρ‡Π΅Π½ΡŒΠ΅ Борлабс
ΠŸΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ Π’Π»Π°Π΄Π΅Π»Π΅Ρ† этого Π²Π΅Π±-сайта, Π’Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅
НазначСниС БохраняСт настройки посСтитСлСй, Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Π΅ Π² ΠΎΠΊΠ½Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ² cookie Borlabs Cookie.
Имя Ρ„Π°ΠΉΠ»Π° cookie borlabs-cookie
Π‘Ρ€ΠΎΠΊ дСйствия Ρ„Π°ΠΉΠ»ΠΎΠ² cookie 1 Π³ΠΎΠ΄
Имя эзоик
ΠŸΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ Ezoic Inc, 6023 Innovation Way 2nd Floor, ΠšΠ°Ρ€Π»ΡΠ±Π°Π΄, ΠšΠ°Π»ΠΈΡ„ΠΎΡ€Π½ΠΈΡ 92009, БША
НазначСниС НСобходим для основных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ сайта.
ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° ΠΊΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ
Ezoic Website Privacy Policy
Имя Ρ„Π°ΠΉΠ»Π° cookie ez*, cf*, unique_id, __cf*, __utmt*
Π‘Ρ€ΠΎΠΊ дСйствия Ρ„Π°ΠΉΠ»Π° cookie 1 Π³ΠΎΠ΄

ΠŸΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΡ (1)

Настройки

Π€Π°ΠΉΠ»Ρ‹ cookie ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠΉ хранят ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ прСдставлСнии ΠΈ функциях Π²Π΅Π±-сайта, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, отобраТаСтся Π»ΠΈ оптимизированная ΠΈΠ»ΠΈ исходная вСрсия Π²Π΅Π±-сайта.

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ„Π°ΠΉΠ»Π°Ρ… cookie Π‘ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ„Π°ΠΉΠ»Π°Ρ… cookie

ΠŸΡ€ΠΈΠ½ΡΡ‚ΡŒ Ezoic β€” Настройки
Имя Ezoic β€” Настройки
ΠŸΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ Ezoic Inc, 6023 Innovation Way 2nd Floor, ΠšΠ°Ρ€Π»ΡΠ±Π°Π΄, ΠšΠ°Π»ΠΈΡ„ΠΎΡ€Π½ΠΈΡ 92009, БША
НазначСниС Π—Π°ΠΏΠΎΠΌΠΈΠ½Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, которая мСняСт ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ внСшний Π²ΠΈΠ΄ сайта, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΉ язык ΠΈΠ»ΠΈ Ρ€Π΅Π³ΠΈΠΎΠ½, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ΡΡŒ.
ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° ΠΊΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ
Ezoic Website Privacy Policy
Имя Ρ„Π°ΠΉΠ»Π° cookie ez*, sitespeed_preview, FTNT*, SITESERVER, SL*, speed_no_process, GED_PLAYLIST_ACTIVITY, __guid
Π‘Ρ€ΠΎΠΊ дСйствия Ρ„Π°ΠΉΠ»Π° cookie 1 Π³ΠΎΠ΄

Бтатистика (1)

Бтатистика

БтатистичСскиС Ρ„Π°ΠΉΠ»Ρ‹ cookie ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎ. Π­Ρ‚Π° информация ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π½Π°ΠΌ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ наши посСтитСли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ наш Π²Π΅Π±-сайт.

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ„Π°ΠΉΠ»Π°Ρ… cookie Π‘ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ„Π°ΠΉΠ»Π°Ρ… cookie

ΠŸΡ€ΠΈΠ½ΡΡ‚ΡŒ Π­Π·ΠΎΠΈΠΊ — Бтатистика
Имя Π­Π·ΠΎΠΈΠΊ — Бтатистика
ΠŸΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ Ezoic Inc, 6023 Innovation Way 2nd Floor, ΠšΠ°Ρ€Π»ΡΠ±Π°Π΄, ΠšΠ°Π»ΠΈΡ„ΠΎΡ€Π½ΠΈΡ 92009, БША
НазначСниС ΠŸΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ посСтитСли Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ с Π²Π΅Π±-сайтами, собирая ΠΈ сообщая ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎ.
ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° ΠΊΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ
Ezoic Website Privacy Policy
Имя Ρ„Π°ΠΉΠ»Π° cookie ez*, __qca, _gid, _ga, _gat, AMP_ECID_EZOIC, __utm*, _ga*
Π‘Ρ€ΠΎΠΊ дСйствия Ρ„Π°ΠΉΠ»Π° cookie 1 Π³ΠΎΠ΄

ΠœΠ°Ρ€ΠΊΠ΅Ρ‚ΠΈΠ½Π³ (1)

ΠœΠ°Ρ€ΠΊΠ΅Ρ‚ΠΈΠ½Π³

ΠœΠ°Ρ€ΠΊΠ΅Ρ‚ΠΈΠ½Π³ΠΎΠ²Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ cookie ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ сторонними рСкламодатСлями ΠΈΠ»ΠΈ издатСлями для отобраТСния пСрсонализированной Ρ€Π΅ΠΊΠ»Π°ΠΌΡ‹. Они Π΄Π΅Π»Π°ΡŽΡ‚ это, отслСТивая посСтитСлСй Π½Π° Π²Π΅Π±-сайтах.

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ„Π°ΠΉΠ»Π°Ρ… cookie Π‘ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ„Π°ΠΉΠ»Π°Ρ… cookie

ΠŸΡ€ΠΈΠ½ΡΡ‚ΡŒ Π­Π·ΠΎΠΈΠΊ — ΠœΠ°Ρ€ΠΊΠ΅Ρ‚ΠΈΠ½Π³
Имя Π­Π·ΠΎΠΈΠΊ — ΠœΠ°Ρ€ΠΊΠ΅Ρ‚ΠΈΠ½Π³
ΠŸΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ Ezoic Inc, 6023 Innovation Way 2nd Floor, ΠšΠ°Ρ€Π»ΡΠ±Π°Π΄, ΠšΠ°Π»ΠΈΡ„ΠΎΡ€Π½ΠΈΡ 92009, БША
НазначСниС Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для отслСТивания посСтитСлСй Π²Π΅Π±-сайтов. ЦСль состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Ρ€Π΅Π»Π΅Π²Π°Π½Ρ‚Π½Ρ‹Π΅ ΠΈ ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ для ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ объявлСния.
ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° ΠΊΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ
Ezoic Website Privacy Policy
Имя Ρ„Π°ΠΉΠ»Π° cookie ez*, _sm_au, cto*, __gads, mind*, _ym_uid, GoogleAdServingTest
Π‘Ρ€ΠΎΠΊ дСйствия Ρ„Π°ΠΉΠ»Π° cookie 1 Π³ΠΎΠ΄

Π’Π½Π΅ΡˆΠ½ΠΈΠ΅ носитСли (1)

Π’Π½Π΅ΡˆΠ½ΠΈΠ΅ носитСли

ΠšΠΎΠ½Ρ‚Π΅Π½Ρ‚ с Π²ΠΈΠ΄Π΅ΠΎΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ ΠΈ ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… сСтСй ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½. Если Ρ„Π°ΠΉΠ»Ρ‹ cookie Π²Π½Π΅ΡˆΠ½ΠΈΡ… носитСлСй ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ, доступ ΠΊ этому содСрТимому большС Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ согласия.

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ„Π°ΠΉΠ»Π°Ρ… cookie Π‘ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ„Π°ΠΉΠ»Π°Ρ… cookie

ΠŸΡ€ΠΈΠ½ΡΡ‚ΡŒ YouTube
Имя YouTube
ΠŸΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ Google Ireland Limited, Gordon House, Barrow Street, Dublin 4, Π˜Ρ€Π»Π°Π½Π΄ΠΈΡ
НазначСниС Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° YouTube.

alexxlab

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *