Esp32 arduino timer: Timer β€” Arduino-ESP32 2.0.2 documentation

Π’Π°ΠΉΠΌΠ΅Ρ€ ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния β€” ESP32

[δΈ­ζ–‡]

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

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

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±Π·ΠΎΡ€

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… этого Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° описаны Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ шаги ΠΏΠΎ настройкС ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠΌ:

  • Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° β€” описываСт, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Π°Π», Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² зависимости ΠΎΡ‚ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°.

  • Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠΌ β€” описываСт, ΠΊΠ°ΠΊ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, ΠΏΡ€ΠΈΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Ρ‚Π°ΠΉΠΌΠ΅Ρ€, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρƒ.

  • Π‘ΠΈΠ³Π½Π°Π»Ρ‹ Ρ‚Ρ€Π΅Π²ΠΎΠ³ΠΈ β€” ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сигналы Ρ‚Ρ€Π΅Π²ΠΎΠ³ΠΈ.

  • ΠŸΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΡ β€” ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ прСрывания.

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°

Π”Π²Π΅ Π³Ρ€ΡƒΠΏΠΏΡ‹ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ² ESP32, ΠΏΠΎ Π΄Π²Π° Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Π² ΠΎΠ±Ρ‰Π΅ΠΉ слоТности Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° для использования. Π“Ρ€ΡƒΠΏΠΏΠ° Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ² ESP32 Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ timer_group_t . ΠžΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ Π² Π³Ρ€ΡƒΠΏΠΏΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ timer_idx_t .

ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ слСдуСт ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π²Ρ‹Π·Π²Π°Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ timer_init() ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π² Π΅ΠΉ структуру timer_config_t , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚Π°ΠΉΠΌΠ΅Ρ€. Π’ частности, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ установлСны ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°:

  • Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ Ρ‚Π°ΠΊΡ‚ΠΎΠ²ΠΎΠ³ΠΎ сигнала : Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ источник Ρ‚Π°ΠΊΡ‚ΠΎΠ²ΠΎΠ³ΠΎ сигнала, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ вмСстС с Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ источником синхронизации являСтся APB_CLK (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ 80 ΠœΠ“Ρ†).

  • Π”Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ : УстанавливаСт ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ «тикания» счСтчика Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ источника Ρ‚Π°ΠΊΡ‚ΠΎΠ²ΠΎΠ³ΠΎ сигнала.

  • Π Π΅ΠΆΠΈΠΌ : УстанавливаСт, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π»ΠΈ счСтчик ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠ»ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ‚ΡŒΡΡ. Π•Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ counter_dir , Π²Ρ‹Π±Ρ€Π°Π² ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΠ· timer_count_dir_t .

  • Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ счСтчика : Если счСтчик Π²ΠΊΠ»ΡŽΡ‡Π΅Π½, ΠΎΠ½ Π½Π°Ρ‡Π½Π΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ/ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ‚ΡŒΡΡ сразу послС Π²Ρ‹Π·ΠΎΠ²Π° timer_init() . Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ counter_en , Π²Ρ‹Π±Ρ€Π°Π² ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΠ· timer_start_t .

  • Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Π²ΠΎΠ³ΠΈ : МоТно ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ alarm_en .

  • АвтоматичСская ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° : УстанавливаСт, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π»ΠΈ счСтчик auto_reload Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика сигнала Ρ‚Ρ€Π΅Π²ΠΎΠ³ΠΈ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ значСния настроСк Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ timer_get_config() .

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

ПослС Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΅Π³ΠΎ счСтчик. Π§Ρ‚ΠΎΠ±Ρ‹ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠΌΠ΅Ρ€, Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ timer_init() с counter_en , ΡƒΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½Π½ΡƒΡŽ Π½Π° true , ΠΈΠ»ΠΈ Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ timer_start() . Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, Π²Ρ‹Π·Π²Π°Π² timer_set_counter_value() . Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ timer_get_counter_value() ΠΈΠ»ΠΈ timer_get_counter_time_sec() .

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ Π² любоС врСмя, Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ timer_pause() . Π§Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ, Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ timer_start() .

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠΌΠ΅Ρ€, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ timer_init() . Π­Ρ‚Π° функция описана Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°.

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠΌΠ΅Ρ€, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для измСнСния ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… настроСк:

Настройка

Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ функция

ОписаниС

Π Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ

timer_set_divider()

Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΊΠ°Π½ΡŒΡ. Π’ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ нСпрСдсказуСмых Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Ρ‚Π°ΠΉΠΌΠ΅Ρ€ слСдуСт ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π½Π° ΠΏΠ°ΡƒΠ·Ρƒ ΠΏΡ€ΠΈ смСнС дСлитСля. Если Ρ‚Π°ΠΉΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, timer_set_divider() приостанавливаСт Π΅Π³ΠΎ, измСняСт настройку ΠΈ снова запускаСт Ρ‚Π°ΠΉΠΌΠ΅Ρ€.

Π Π΅ΠΆΠΈΠΌ

timer_set_counter_mode()

Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π»ΠΈ счСтчик ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠ»ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ‚ΡŒΡΡ

АвтоматичСская ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ°

timer_set_auto_reload()

УстановитС, слСдуСт Π»ΠΈ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика ΠΏΡ€ΠΈ Ρ‚Ρ€Π΅Π²ΠΎΠ³Π΅ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°

Π’Ρ€Π΅Π²ΠΎΠ³ΠΈ

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π±ΡƒΠ΄ΠΈΠ»ΡŒΠ½ΠΈΠΊ, Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ timer_set_alarm_value() , Π° Π·Π°Ρ‚Π΅ΠΌ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π±ΡƒΠ΄ΠΈΠ»ΡŒΠ½ΠΈΠΊ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ timer_set_alarm() . Π’Ρ€Π΅Π²ΠΎΠ³Ρƒ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π½Π° этапС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, ΠΊΠΎΠ³Π΄Π° вызываСтся timer_init() .

ПослС Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π±ΡƒΠ΄ΠΈΠ»ΡŒΠ½ΠΈΠΊΠ° ΠΈ достиТСния Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠΌ значСния Π±ΡƒΠ΄ΠΈΠ»ΡŒΠ½ΠΈΠΊΠ° Π² зависимости ΠΎΡ‚ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π²Π° дСйствия:

  • Π‘ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡ‰Π΅Π½ΠΎ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅, Ссли ΠΎΠ½ΠΎ Π±Ρ‹Π»ΠΎ настроСно Ρ€Π°Π½Π΅Π΅. Π‘ΠΌ. Π Π°Π·Π΄Π΅Π» Β«ΠŸΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΡΒ» ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ прСрывания.

  • Когда auto_reload Π²ΠΊΠ»ΡŽΡ‡Π΅Π½, счСтчик Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½, Ρ‡Ρ‚ΠΎΠ±Ρ‹ снова Π½Π°Ρ‡Π°Ρ‚ΡŒ отсчСт с Ρ€Π°Π½Π΅Π΅ настроСнного значСния. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ установлСно Π·Π°Ρ€Π°Π½Π΅Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ timer_set_counter_value() .

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

  • Если установлСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ сигнала Ρ‚Ρ€Π΅Π²ΠΎΠ³ΠΈ, Π° Ρ‚Π°ΠΉΠΌΠ΅Ρ€ ΡƒΠΆΠ΅ достиг этого значСния, сигнал Ρ‚Ρ€Π΅Π²ΠΎΠ³ΠΈ срабатываСт Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ.

  • ПослС срабатывания сигнал Ρ‚Ρ€Π΅Π²ΠΎΠ³ΠΈ автоматичСски ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ, ΠΈ Π΅Π³ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ для ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ срабатывания.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Π²ΠΎΠ³ΠΈ, Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ timer_get_alarm_value() .

ΠŸΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΡ

РСгистрация ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° прСрывания для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ timer_isr_callback_add() ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Π³Ρ€ΡƒΠΏΠΏΡ‹, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ…. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π² контСкстС ISR, поэтому ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ API Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°.
ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²ΠΎ использования ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° прСрывания вмСсто ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ прСрывания с нуля Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π΅Π»ΠΎ с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ состояния прСрывания ΠΈ очисткой, всС ΠΎΠ½ΠΈ Ρ€Π΅ΡˆΠ°ΡŽΡ‚ΡΡ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡ‰Π΅Π½ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ прСрывания Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

Для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΠ± использовании ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ см. ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ прилоТСния.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ прилоТСния

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 64-Π±ΠΈΡ‚Π½ΠΎΠ³ΠΎ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°: пСрифСрия/timer_group.

Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ ΠΏΠΎ API

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

esp_err_t timer_get_counter_value (timer_group_t group_num , timer_idx_t timer_num , uint64_t * timer_val )

Π‘Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚
ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹
  • group_num : Π“Ρ€ΡƒΠΏΠΏΠ° Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ², 0 для TIMERG0 ΠΈΠ»ΠΈ 1 для TIMERG1

  • timer_num : ИндСкс Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, 0 для hw_timer[0] ΠΈ 1 для hw_timer[1]

  • timer_val : Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ для ΠΏΡ€ΠΈΠ΅ΠΌΠ° значСния счСтчика Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°.

esp_err_t timer_get_counter_time_sec (timer_group_t group_num , timer_idx_t timer_num , double * врСмя )

Π§Ρ‚Π΅Π½ΠΈΠ΅ значСния счСтчика Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Π² Π΅Π΄ΠΈΠ½ΠΈΡ†Π°Ρ… Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΡˆΠΊΠ°Π»Ρ‹.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚
ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹
  • group_num : Π“Ρ€ΡƒΠΏΠΏΠ° Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ², 0 для TIMERG0 ΠΈΠ»ΠΈ 1 для TIMERG1

  • timer_num : ИндСкс Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, 0 для hw_timer[0] ΠΈ 1 для hw_timer[1]

  • time : Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, Ρ‚ΠΈΠΏ double*, для ΠΏΡ€ΠΈΠ΅ΠΌΠ° значСния счСтчика Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Π² сСкундах.

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

Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика Π½Π° Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Ρ‚Π°ΠΉΠΌΠ΅Ρ€.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚
ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹
  • group_num : Π“Ρ€ΡƒΠΏΠΏΠ° Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ², 0 для TIMERG0 ΠΈΠ»ΠΈ 1 для TIMERG1

  • timer_num : ИндСкс Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, 0 для hw_timer[0] ΠΈ 1 для hw_timer[1]

  • load_val : Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика для записи Π² Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Ρ‚Π°ΠΉΠΌΠ΅Ρ€.

esp_err_t timer_start (timer_group_t group_num , timer_idx_t timer_num )

Запуск счСтчика Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚
ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹
  • group_num : НомСр Π³Ρ€ΡƒΠΏΠΏΡ‹ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ², 0 для TIMERG0 ΠΈΠ»ΠΈ 1 для TIMERG1

  • timer_num : ИндСкс Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, 0 для hw_timer[0] ΠΈ 1 для hw_timer[1]

esp_err_t timer_pause (timer_group_t group_num , timer_idx_t timer_num )

ΠŸΡ€ΠΈΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ счСтчик Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚
ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹
  • group_num : НомСр Π³Ρ€ΡƒΠΏΠΏΡ‹ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ², 0 для TIMERG0 ΠΈΠ»ΠΈ 1 для TIMERG1

  • timer_num : ИндСкс Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, 0 для hw_timer[0] ΠΈ 1 для hw_timer[1]

esp_err_t timer_set_counter_mode (timer_group_t group_num , timer_idx_t timer_num , timer_count_dir_t counter_dir )

Установка Ρ€Π΅ΠΆΠΈΠΌΠ° счСта для Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚
ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹
  • group_num : НомСр Π³Ρ€ΡƒΠΏΠΏΡ‹ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ², 0 для TIMERG0 ΠΈΠ»ΠΈ 1 для TIMERG1

  • timer_num : ИндСкс Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, 0 для hw_timer[0] ΠΈ 1 для hw_timer[1]

  • counter_dir : НаправлСниС счСта Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, прямой ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ отсчСт

esp_err_t timer_set_auto_reload (timer_group_t group_num , timer_idx_t timer_num , timer_autoreload_t reload )

Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ счСтчика ΠΏΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠ³ΠΎ события.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚
ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹
  • group_num : НомСр Π³Ρ€ΡƒΠΏΠΏΡ‹ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ², 0 для TIMERG0 ΠΈΠ»ΠΈ 1 для TIMERG1

  • timer_num : ИндСкс Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, 0 для hw_timer[0] ΠΈ 1 для hw_timer[1]

  • ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° : Π Π΅ΠΆΠΈΠΌ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ счСтчика.

esp_err_t timer_set_divider (timer_group_t group_num , timer_idx_t timer_num , uint32_t Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ )

Установка дСлитСля частоты источника Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°. Часы Π³Ρ€ΡƒΠΏΠΏ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ² ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΌ часов APB.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚
ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹
  • group_num : НомСр Π³Ρ€ΡƒΠΏΠΏΡ‹ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ², 0 для TIMERG0 ΠΈΠ»ΠΈ 1 для TIMERG1

  • timer_num : ИндСкс Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, 0 для hw_timer[0] ΠΈ 1 для hw_timer[1]

  • Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ : Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ дСлитСля часов Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°. Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ дСлитСля ΠΎΡ‚ 2 Π΄ΠΎ 65536.

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

Установка значСния сигнала Ρ‚Ρ€Π΅Π²ΠΎΠ³ΠΈ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚
ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹
  • group_num : Π“Ρ€ΡƒΠΏΠΏΠ° Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ², 0 для TIMERG0 ΠΈΠ»ΠΈ 1 для TIMERG1

  • timer_num : ИндСкс Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, 0 для hw_timer[0] ΠΈ 1 для hw_timer[1]

  • alarm_value : 64-Π±ΠΈΡ‚Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для установки значСния Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠ³ΠΎ сигнала.

esp_err_t timer_get_alarm_value (timer_group_t group_num , timer_idx_t timer_num , uint64_t * alarm_value )

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ сигнала Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚
ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹
  • group_num : Π“Ρ€ΡƒΠΏΠΏΠ° Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ², 0 для TIMERG0 ΠΈΠ»ΠΈ 1 для TIMERG1

  • timer_num : ИндСкс Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, 0 для hw_timer[0] ΠΈ 1 для hw_timer[1]

  • alarm_value : Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ 64-Π±ΠΈΡ‚Π½ΠΎΠ³ΠΎ значСния для принятия значСния Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠ³ΠΎ сигнала.

esp_err_t timer_set_alarm (timer_group_t group_num , timer_idx_t timer_num , timer_alarm_t alarm_en )

Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ Ρ‚Ρ€Π΅Π²ΠΎΠΆΠ½Ρ‹Ρ… событий Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚
ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹
  • group_num : Π“Ρ€ΡƒΠΏΠΏΠ° Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ², 0 для TIMERG0 ΠΈΠ»ΠΈ 1 для TIMERG1

  • timer_num : ИндСкс Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, 0 для hw_timer[0] ΠΈ 1 для hw_timer[1]

  • alarm_en : Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΡƒΠ΄ΠΈΠ»ΡŒΠ½ΠΈΠΊΠ° ΠΏΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρƒ.

ESP_ERR_T TIMER_ISR_CALLBACK_ADD (TIMER_GROUP_T GROUP_NUM , TIMER_IDX_T TIMER_NUM , TIMER_ISR_T ISR_HANDLER , VOID * 9027 AGR_T ISR_HANDLER , VOID * AGR_T ISR_HANDLER , VOID * AGR_T ISR_HANDLE

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² дСскриптора ISR для ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°.

ΠžΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ логичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Π½ΡƒΠΆΠ½ΠΎ Π»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ YIELD Π² ΠΊΠΎΠ½Ρ†Π΅ ISR.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Π­Ρ‚ΠΎΡ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ISR Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΈΠ· ISR. Π­Ρ‚ΠΎΡ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ISR Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ статус прСрывания ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΌ. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ прилоТСния ΠΈΠ»ΠΈ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ вСсь ISR, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ timer_isr_register(…) для рСгистрации ISR.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹
  • group_num : НомСр Π³Ρ€ΡƒΠΏΠΏΡ‹ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ²

  • timer_num : ИндСкс Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Π³Ρ€ΡƒΠΏΠΏΡ‹ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ²

  • isr_handler : Ѐункция ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ, это функция ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°.

  • arg : ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°

  • intr_alloc_flags : Π€Π»Π°Π³ΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ для выдСлСния прСрывания. Одно ΠΈΠ»ΠΈ нСсколько (ORred) Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ESP_INTR_FLAG_*. Π‘ΠΌ. esp_intr_alloc. h для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

Если установлСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ESP_INTR_FLAG_IRAM для intr_alloc_flags, функция-ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ объявлСна ​​с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ IRAM_ATTR ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² IRAM ΠΈΠ»ΠΈ ROM. Он Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ API-интСрфСйсы Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚
esp_err_t timer_isr_callback_remove (timer_group_t group_num , timer_idx_t timer_num )

Π£Π΄Π°Π»ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² дСскриптора ISR для ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚
ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹
esp_err_t timer_isr_register (timer_group_t group_num , timer_idx_t timer_num , void (* fn )(void *), void * arg , int intr_alloc_flags , timer_isr_handle_t * handle , )

РСгистр ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ прСрывания Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ являСтся ISR. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»Π΅Π½ ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ядру ЦП, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ выполняСтся эта функция.

Если установлСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ intr_alloc_flags ESP_INTR_FLAG_IRAM, функция-ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ объявлСна ​​с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ IRAM_ATTR ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² IRAM ΠΈΠ»ΠΈ ROM. Он Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ API-интСрфСйсы Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°. Π’ этом случаС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ прямой доступ ΠΊ рСгистру для настройки Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ² ΠΈΠ·Π½ΡƒΡ‚Ρ€ΠΈ ISR.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Если ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для рСгистрации ISR, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ вСсь ISR. Π’ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ прСрывания Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ timer_spinlock_take(..) ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ ΠΈ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ timer_spinlock_give(…) послС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹
  • group_num : НомСр Π³Ρ€ΡƒΠΏΠΏΡ‹ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ²

  • timer_num : ИндСкс Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Π³Ρ€ΡƒΠΏΠΏΡ‹ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ²

  • fn : Ѐункция ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ.

  • arg : ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°

  • intr_alloc_flags : Π€Π»Π°Π³ΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ для выдСлСния прСрывания. Одно ΠΈΠ»ΠΈ нСсколько (ORred) Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ESP_INTR_FLAG_*. Π‘ΠΌ. esp_intr_alloc.h для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

  • дСскриптор : Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° дСскриптор Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°. Если Π½Π΅ NULL, здСсь Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ дСскриптор прСрывания.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚
esp_err_t timer_init (timer_group_t group_num , timer_idx_t timer_num , const timer_config_t * config )

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈ настраиваСт Ρ‚Π°ΠΉΠΌΠ΅Ρ€.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚
ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹
  • group_num : НомСр Π³Ρ€ΡƒΠΏΠΏΡ‹ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ², 0 для TIMERG0 ΠΈΠ»ΠΈ 1 для TIMERG1

  • timer_num : ИндСкс Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, 0 для hw_timer[0] ΠΈ 1 для hw_timer[1]

  • config : Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°.

esp_err_t timer_deinit (timer_group_t group_num , timer_idx_t timer_num )

Π”Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚Π°ΠΉΠΌΠ΅Ρ€.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚
ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹
  • group_num : НомСр Π³Ρ€ΡƒΠΏΠΏΡ‹ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ², 0 для TIMERG0 ΠΈΠ»ΠΈ 1 для TIMERG1

  • timer_num : ИндСкс Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, 0 для hw_timer[0] ΠΈ 1 для hw_timer[1]

esp_err_t timer_get_config (timer_group_t group_num , timer_idx_t timer_num , timer_config_t * config )

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ настройки Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚
ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹
  • group_num : НомСр Π³Ρ€ΡƒΠΏΠΏΡ‹ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ², 0 для TIMERG0 ΠΈΠ»ΠΈ 1 для TIMERG1

  • timer_num : ИндСкс Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, 0 для hw_timer[0] ΠΈ 1 для hw_timer[1]

  • config : Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ структуры для ΠΏΡ€ΠΈΠ΅ΠΌΠ° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°.

esp_err_t timer_group_intr_enable (timer_group_t group_num , timer_intr_t intr_mask )

Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π³Ρ€ΡƒΠΏΠΏΠΎΠ²ΠΎΠ³ΠΎ прСрывания Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° ΠΏΠΎ маскС Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚
ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹
  • group_num : НомСр Π³Ρ€ΡƒΠΏΠΏΡ‹ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ², 0 для TIMERG0 ΠΈΠ»ΠΈ 1 для TIMERG1

  • intr_mask : Маска Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ прСрывания Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°.

    • TIMER_INTR_T0: ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ t0

    • TIMER_INTR_T1: ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ t1

    • TIMER_INTR_WDT: ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ стороТСвого Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°

esp_err_t timer_group_intr_disable (timer_group_t group_num , timer_intr_t intr_mask )

ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π³Ρ€ΡƒΠΏΠΏΠΎΠ²ΠΎΠ΅ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° ΠΏΠΎ маскС ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚
ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹
  • group_num : НомСр Π³Ρ€ΡƒΠΏΠΏΡ‹ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ², 0 для TIMERG0 ΠΈΠ»ΠΈ 1 для TIMERG1

  • intr_mask : Маска ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ прСрывания Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°.

    • TIMER_INTR_T0: ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ t0

    • TIMER_INTR_T1: ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ t1

    • TIMER_INTR_WDT: ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ стороТСвого Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°

esp_err_t timer_enable_intr (timer_group_t group_num , timer_idx_t timer_num )

Π Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΏΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρƒ.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚
ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹
esp_err_t timer_disable_intr (timer_group_t group_num , timer_idx_t timer_num )

ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚
ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹
void timer_group_intr_clr_in_isr (timer_group_t group_num , timer_idx_t timer_num )

ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ состояниС прСрывания Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ использованноС Π² ISR.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹
Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ timer_group_clr_intr_status_in_isr (timer_group_t group_num , timer_idx_t timer_num )

ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ состояниС прСрывания Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ использованноС Π² ISR.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹
void timer_group_enable_alarm_in_isr (timer_group_t group_num , timer_idx_t timer_num )

Π Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΏΠΎ Ρ‚Ρ€Π΅Π²ΠΎΠ³Π΅, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ использованноС Π² ISR.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹
uint64_t timer_group_get_counter_value_in_isr (timer_group_t group_num , timer_idx_t timer_num )

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ использованноС Π² ISR.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚
  • Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹
Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ timer_group_set_alarm_value_in_isr (timer_group_t group_num , timer_idx_t timer_num , uint64_t alarm_val )

УстановитС ΠΏΠΎΡ€ΠΎΠ³ срабатывания сигнализации для Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ использованного Π² ISR.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹
  • group_num : НомСр Π³Ρ€ΡƒΠΏΠΏΡ‹ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ², 0 для TIMERG0 ΠΈΠ»ΠΈ 1 для TIMERG1

  • timer_num : ИндСкс Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°.

  • alarm_val : ΠŸΠΎΡ€ΠΎΠ³ срабатывания сигнализации.

void timer_group_set_counter_enable_in_isr (timer_group_t group_num , timer_idx_t timer_num , timer_start_t counter_en )

Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ/ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ счСтчик, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π² ISR.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹
  • group_num : НомСр Π³Ρ€ΡƒΠΏΠΏΡ‹ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ², 0 для TIMERG0 ΠΈΠ»ΠΈ 1 для TIMERG1

  • timer_num : ИндСкс Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°.

  • counter_en : Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ/Π²Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ.

timer_intr_t timer_group_intr_get_in_isr (timer_group_t group_num )

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ статус замаскированного прСрывания, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ использованного Π² ISR.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚
  • Бтатус прСрывания

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹
uint32_t timer_group_get_intr_status_in_isr (timer_group_t group_num )

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ статус прСрывания, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π² ISR.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚
  • Бтатус прСрывания

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹
void timer_group_clr_intr_sta_in_isr (timer_group_t group_num , timer_intr_t intr_mask )

ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ состояниС замаскированного прСрывания, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ использованного Π² ISR.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹
bool timer_group_get_auto_reload_in_isr (timer_group_t group_num , timer_idx_t timer_num )

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ статус Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ автоматичСской ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π² ISR.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚
ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹
esp_err_t timer_spinlock_take (timer_group_t group_num )

Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΠΉΡ‚ΠΈ Π² ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π·Π°Ρ‰ΠΈΡ‚Ρƒ.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚
ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹
esp_err_t timer_spinlock_give (timer_group_t group_num )

УстановитС Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° для Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· критичСской Π·Π°Ρ‰ΠΈΡ‚Ρ‹.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚
ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹

ΠœΠ°ΠΊΡ€ΠΎΡΡ‹

Π’ΠΠ™ΠœΠ•Π _BASE_CLK

Частота часов Π½Π° Π²Ρ…ΠΎΠ΄Π΅ Π³Ρ€ΡƒΠΏΠΏ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ²

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ Ρ‚ΠΈΠΏΠΎΠ²

typedef bool (* timer_isr_t )(void *)

Ѐункция ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° прСрывания. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ логичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚
ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Если Π²Ρ‹ Π²Ρ‹Π·Π²Π°Π»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ FreeRTOS Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true ΠΈΠ»ΠΈ false Π² зависимости ΠΎΡ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° pxHigherPriorityTaskWoken . НапримСр, xQueueSendFromISR вызываСтся Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅, Ссли Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ pxHigherPriorityTaskWoken любого Π²Ρ‹Π·ΠΎΠ²Π° FreeRTOS Ρ€Π°Π²Π½ΠΎ pdTRUE, возвращаСтся true; Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ лоТь.

ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° intr_handle_t timer_isr_handle_t

ДСскриптор прСрывания, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для освобоТдСния isr послС использования. ΠŸΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ‹ для дСскриптора int Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚.

Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»

  • hal/include/hal/timer_types.h

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈ

структура timer_config_t

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ… с настройками ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°.

ΠŸΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Π΅ участники

timer_alarm_t alarm_en

Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Π²ΠΎΠ³ΠΈ ΠΏΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρƒ

timer_start_t counter_en

Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ счСтчика

timer_intr_mode_t intr_type

Π Π΅ΠΆΠΈΠΌ прСрывания

timer_count_dir_t counter_dir

ВстрСчноС Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅

timer_autoreload_t Π°Π²Ρ‚ΠΎ_ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ°

АвтоматичСская ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°

uint32_t Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ

Π”Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ счСтчика часов. Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ дСлитСля ΠΎΡ‚ 2 Π΄ΠΎ 65536.

Бписки

пСрСчислСниС timer_group_t

Π’Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ Π³Ρ€ΡƒΠΏΠΏΡƒ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ² ΠΈΠ· 2 доступных Π³Ρ€ΡƒΠΏΠΏ.

ЗначСния:

Π’ΠΠ™ΠœΠ•Π _Π“Π Π£ΠŸΠŸΠ_0 = 0

Π“Ρ€ΡƒΠΏΠΏΠ° Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ² 0

Π’ΠΠ™ΠœΠ•Π _Π“Π Π£ΠŸΠŸΠ_1 = 1

Π“Ρ€ΡƒΠΏΠΏΠ° Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° 1

Π’ΠΠ™ΠœΠ•Π _Π“Π Π£ΠŸΠŸΠ_МАКБ
пСрСчислСниС timer_idx_t

Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ ΠΈΠ· Π³Ρ€ΡƒΠΏΠΏ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ².

ЗначСния:

Π’ΠΠ™ΠœΠ•Π _0 = 0

Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ 0 ΠΈΠ· GROUPx

Π’ΠΠ™ΠœΠ•Π _1 = 1

Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ 1 ΠΈΠ· GROUPx

Π’ΠΠ™ΠœΠ•Π _МАКБ
пСрСчислСниС timer_count_dir_t

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ счСтчика.

ЗначСния:

TIMER_COUNT_DOWN = 0

Π‘Ρ‡Π΅Ρ‚ ΠΏΠΎ ΡƒΠ±Ρ‹Π²Π°Π½ΠΈΡŽ ΠΎΡ‚ cnt.high|cnt.low

TIMER_COUNT_UP = 1

Π‘Ρ‡Π΅Ρ‚ ΠΏΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ ΠΎΡ‚ нуля

TIMER_COUNT_MAX
пСрСчислСниС timer_start_t

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ ΠΈΠ»ΠΈ приостановлСн.

ЗначСния:

Π’ΠΠ™ΠœΠ•Π _ΠŸΠΠ£Π—Π = 0

Π‘Ρ‡Π΅Ρ‚Ρ‡ΠΈΠΊ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° ΠΏΠ°ΡƒΠ·Ρ‹

Π’ΠΠ™ΠœΠ•Π _БВАРВ = 1

Π‘Ρ‡Π΅Ρ‚Ρ‡ΠΈΠΊ пускового Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°

пСрСчислСниС timer_intr_t

Π’ΠΈΠΏΡ‹ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°.

ЗначСния:

Π’ΠΠ™ΠœΠ•Π _INTR_T0 = Π‘Π˜Π’(0)

ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° 0

Π’ΠΠ™ΠœΠ•Π _INTR_T1 = Π‘Π˜Π’(1)

ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° 1

TIMER_INTR_WDT = Π‘Π˜Π’(2)

ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ стороТСвого Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°

Π’ΠΠ™ΠœΠ•Π _ИНВР_НЕВ = 0
пСрСчислСниС timer_alarm_t

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π»ΠΈ Ρ€Π΅ΠΆΠΈΠΌ Ρ‚Ρ€Π΅Π²ΠΎΠ³ΠΈ.

ЗначСния:

Π’ΠΠ™ΠœΠ•Π _ALARM_DIS = 0

ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Ρ€Π΅Π²ΠΎΠ³Ρƒ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°

Π’ΠΠ™ΠœΠ•Π _ΠΠ’ΠΠ Π˜Π™ΠΠ«Π™ Π‘Π˜Π“ΠΠΠ›_EN = 1

Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Ρ€Π΅Π²ΠΎΠ³Ρƒ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°

Π’ΠΠ™ΠœΠ•Π _ALARM_МАКБ
пСрСчислСниС timer_intr_mode_t

Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Ρ‚ΠΈΠΏ прСрывания ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ‚Ρ€Π΅Π²ΠΎΠ³ΠΈ.

ЗначСния:

Π’ΠΠ™ΠœΠ•Π _INTR_LEVEL = 0

Π Π΅ΠΆΠΈΠΌ прСрывания: Ρ€Π΅ΠΆΠΈΠΌ уровня

Π’ΠΠ™ΠœΠ•Π _ИНВР_МАКБ
пСрСчислСниС timer_autoreload_t

Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π»ΠΈ сигнал Ρ‚Ρ€Π΅Π²ΠΎΠ³ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ ΠΈΠ»ΠΈ автоматичСски ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎ.

ЗначСния:

Π’ΠΠ™ΠœΠ•Π _ΠΠ’Π’ΠžΠ—ΠΠ“Π Π£Π—ΠšΠ_DIS = 0

ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ: Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ΅ обСспСчСниС Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика послС Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠ³ΠΎ события

Π’ΠΠ™ΠœΠ•Π _ΠΠ’Π’ΠžΠ—ΠΠ“Π Π£Π—ΠšΠ_EN = 1

Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ: Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ΅ обСспСчСниС Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика послС Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠ³ΠΎ события

Π’ΠΠ™ΠœΠ•Π _ΠΠ’Π’ΠžΠ—ΠΠ“Π Π£Π—ΠšΠ_МАКБ

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ, связанныС со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ, ΠΈ прСрывания Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°

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

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ MicroPython, связанныС со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ
MicroPython прСдоставляСт ΠΌΠΎΠ΄ΡƒΠ»ΡŒ time для Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π·Π°Π΄Π΅Ρ€ΠΆΠ΅ΠΊ, ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠ² ΠΈ обслуТивания Π΄Π°Ρ‚Ρ‹ ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π­Ρ‚ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ являСтся ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ модуля CPython. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ MicroPython, связанныС со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ, совмСстимы со встроСнными ΠΏΠΎΡ€Ρ‚Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ эпоху 2000-01-01 00:00:00 UTC вмСсто систСмной эпохи POSIX 1970-01-01 00:00:00 UTC. Π’Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ настройка ΠΈ обслуТиваниС ΠΊΠ°Π»Π΅Π½Π΄Π°Ρ€Π½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ зависит ΠΎΡ‚ ОБ ΠΈΠ»ΠΈ RTOS, установлСнных Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΌ ΠΏΠΎΡ€Ρ‚Ρƒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Raspberry Pico. ВстроСнный RTC ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ этим Π² случаС ΠΏΠΎΡ€Ρ‚ΠΎΠ² ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°. БвязанныС со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ MicroPython Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‚ Ρƒ ОБ/RTOS ΠΈΠ»ΠΈ RTC сохранСниС ΠΈΠ»ΠΈ установку Π΄Π°Ρ‚Ρ‹ ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Установку Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Ρ‡Π΅Ρ€Π΅Π· сСтСвой ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» ΠΈΠ»ΠΈ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΡƒΡŽ Π±Π°Ρ‚Π°Ρ€Π΅ΡŽ.

ΠœΠΎΠ΄ΡƒΠ»ΡŒ time обСспСчиваСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π΄Π°Ρ‚Ρ‹ ΠΈ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ.

time.sleep(seconds) : Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ обСспСчиваСт Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ Π² сСкундах. НСкоторыС ΠΏΠΎΡ€Ρ‚Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ врСмя Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ Π² Π²ΠΈΠ΄Π΅ числа с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой. ПослС Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ останавливаСт Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ количСство сСкунд.

time.sleep_ms(ms) : Π­Ρ‚ΠΎ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ Π² миллисСкундах. По ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с time.sleep() этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π΅Π½. Π’ качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° этому ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число ΠΈΠ»ΠΈ ноль. Если ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для прСрывания ΠΏΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρƒ, Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒΡΡ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ обслуТивания прСрывания. Если Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° пСрСдаСтся 0, Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π·Π°Ρ‚Ρ€Π°Ρ‡Π΅Π½Π½ΠΎΠΌΡƒ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ обслуТивания прСрывания.

time.sleep_us(us) : Π­Ρ‚ΠΎ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ Π² микросСкундах. Π’ качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число ΠΈΠ»ΠΈ ноль. Если ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для прСрывания ΠΏΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρƒ, Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ выполнСния ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ обслуТивания прСрывания. Если Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° пСрСдаСтся 0, Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π·Π°Ρ‚Ρ€Π°Ρ‡Π΅Π½Π½ΠΎΠΌΡƒ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ обслуТивания прСрывания.

time.ticks_ms() : Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ количСство миллисСкунд, ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠΈΡ… послС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ ссылки. Π­Ρ‚ΠΎ Ρ‡Π΅ΠΌ-Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ millis() Π² Arduino. Π₯отя функция millis() Π² Arduino Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» Π² миллисСкундах с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΏΠ»Π°Ρ‚Ρ‹ Arduino, time. ticks_ms() ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ для справки. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ пСрСноса, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ Π² качСствС максимального Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°, всСгда находится Π² стСпСни 2, поэтому ΠΎΠ½ΠΎ остаСтся ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ Π²ΠΎ всСй Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ MicroPython нСзависимо ΠΎΡ‚ ΠΏΠΎΡ€Ρ‚Π°. Он называСтся TICKS_PERIOD, Ρ‡Ρ‚ΠΎ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ большС, Ρ‡Π΅ΠΌ TICKS_MAX. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π²Ρ‹Π·ΠΎΠ² этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ всСгда Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π΅ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΎΡ‚ 0 Π΄ΠΎ TICKS_MAX Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° миллисСкунды Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅, ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠΈΠ΅ Π΄Π°Π»Π΅Π΅ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π’Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Arduino, стандартныС матСматичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈΠ»ΠΈ рСляционныС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π»ΠΈΠ±ΠΎ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, Π»ΠΈΠ±ΠΎ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² для ticks_diff() ΠΈΠ»ΠΈ ticks_add() ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… этим ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ, ΠΈΠ»ΠΈ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠ°, ΠΊΠ°ΠΊ упомянутыС Π²Ρ‹ΡˆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π½Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Ρ‹. Π’Π°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ привСсти ΠΊ синтаксичСской ошибкС (Π² зависимости ΠΎΡ‚ IDE) ΠΈΠ»ΠΈ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ.

time.ticks_us() : Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ time. ticks_ms() , Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ врСмя Π² микросСкундах ΠΈΠ· ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

time.ticks_cpu() : этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ time.ticks_ms() ΠΈ time.ticks_us() , Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚Π°ΠΊΡ‚Ρ‹ ЦП, ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½Π½Ρ‹Π΅ с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Он обСспСчиваСт максимально Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. ВмСсто Ρ‚Π°ΠΊΡ‚ΠΎΠ² Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΡ€Ρ‚Π°Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Π° другая Π΅Π΄ΠΈΠ½ΠΈΡ†Π° с самым высоким Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ, обСспСчиваСмая встроСнным Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠΌ. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ доступСн Π½Π΅ для всСх ΠΏΠΎΡ€Ρ‚ΠΎΠ² MicroPython. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΠ΅Ρ€Π΅Π΄ использованиСм этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² скриптС MicroPython Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΏΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ ΠΏΠΎΡ€Ρ‚Ρƒ.

time.ticks_add(ticks, delta) : Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ вычисляСт ΠΊΡ€Π°ΠΉΠ½ΠΈΠ΅ сроки для событий ΠΈ Π·Π°Π΄Π°Ρ‡ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°. Π’ зависимости ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΎΠ½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΡ€Π°ΠΉΠ½ΠΈΠΉ срок Π² миллисСкундах, микросСкундах ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ»Π΅ ЦП .ticks_ms() , time.ticks_us() ΠΈΠ»ΠΈ time.ticks_cpu() ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Ρ‚ΠΈΠΊΠΎΠ² соотвСтствСнно. АргумСнт Π΄Π΅Π»ΡŒΡ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ†Π΅Π»Ρ‹ΠΌ ΠΈΠ»ΠΈ числовым Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ. Он Ρ€Π°Π²Π΅Π½ количСству Ρ‚ΠΈΠΊΠΎΠ², Π³Π΄Π΅ Ρ‚ΠΈΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ миллисСкундами, микросСкундами ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ»Π°ΠΌΠΈ ЦП, установлСнными Π² качСствС ΠΊΡ€Π°ΠΉΠ½Π΅Π³ΠΎ срока. НапримСр, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΡ€Π°ΠΉΠ½ΠΈΠΉ срок 200 миллисСкунд.
ΠΊΡ€Π°ΠΉΠ½ΠΈΠΉ срок = ticks_add(time.ticks_ms(), 200)

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΡ€Π°ΠΉΠ½ΠΈΠΉ срок 100 микросСкунд.
ΠΊΡ€Π°ΠΉΠ½ΠΈΠΉ срок = ticks_add(time.ticks_us(), 100)

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΡ€Π°ΠΉΠ½ΠΈΠΉ срок Π² 20 Ρ†ΠΈΠΊΠ»ΠΎΠ² ЦП.
ΠΊΡ€Π°ΠΉΠ½ΠΈΠΉ срок = ticks_add(time.ticks_cpu(), 20)

time.ticks_diff(ticks1, ticks2) : этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Ρ‚ΠΈΠΊΠ°ΠΌΠΈ. Π Π°Π·Π½ΠΈΡ†Π° Π² Ρ‚ΠΈΠΊΠ°Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π² миллисСкундах, микросСкундах ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ»Π°Ρ… ЦП Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ 9Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ 0275 time.ticks_ms() , time.ticks_us() ΠΈΠ»ΠΈ time.ticks_cpu() ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² качСствС Ρ‚ΠΈΠΊΠΎΠ² соотвСтствСнно. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ β€” ticks1-ticks2, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°Ρ€ΡŒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ -TICKS_PERIOD/2 Π΄ΠΎ TICKS_PERIOD/2 β€” 1. Ѐункция time.ticks_diff() ΠΏΠΎΠ»Π΅Π·Π½Π° ΠΏΡ€ΠΈ опросС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ оТидания, ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ встроСнной Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈΠ»ΠΈ расчСтС ΠΊΡ€Π°ΠΉΠ½Π΅Π³ΠΎ срока.

time.time() : Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ количСство сСкунд с Π½Π°Ρ‡Π°Π»Π° эпохи ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ RTC Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ€Ρ‚Π° установлСн ΠΈ поддСрТиваСтся. Π­ΠΏΠΎΡ…Π° совмСстима со встроСнными функциями, Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ врСмя β€” это количСство сСкунд, ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠΈΡ… с 01 января 2000 Π³. Π² 00:00:00 UTC. Π­ΠΏΠΎΡ…Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ссылкой для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ€Ρ‚Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ питания ΠΈΠ»ΠΈ сброса Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΡ€Ρ‚Π°Ρ….

time.time_ns() : Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ количСство микросСкунд с Π½Π°Ρ‡Π°Π»Π° эпохи. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для опрСдСлСния Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ этим ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ, являСтся Ρ†Π΅Π»Ρ‹ΠΌ числом.

time.mktime() : Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ количСство сСкунд, ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠΈΡ… ΠΌΠ΅ΠΆΠ΄Ρƒ эпохой (Ρ‚. Π΅. 01.01.2000 00:00:00 UTC) ΠΈ мСстным Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΌ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΠΎΠ»Π½Ρ‹ΠΉ 8-ΠΊΠΎΡ€Ρ‚Π΅ΠΆ ΠΊΠ°ΠΊ мСстноС врСмя, Π³Π΄Π΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ β€” (Π³ΠΎΠ΄, мСсяц, дСнь, час, ΠΌΠΈΠ½ΡƒΡ‚Π°, сСкунда, дСнь Π½Π΅Π΄Π΅Π»ΠΈ, дСнь Π³ΠΎΠ΄Π°), Π³Π΄Π΅ значСния ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅.

Π³ΠΎΠ΄Π° нашСй эры

Π“ΠΎΠ΄ Π³ΠΎΠ΄
мСсяц 1~12
мдСнь 1~31
час 0~23
ΠΌΠΈΠ½ΡƒΡ‚Π° 0~59
Π²Ρ‚ΠΎΡ€ΠΎΠΉ 0~59
Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ дСнь 0~6 для Пн~Вс
годдСнь 1~366

Β 

time.gmtime([secs]) : Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄Π°Ρ‚Ρƒ-врСмя Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ UTC, начиная с сСкунд, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ врСмя прСдставляСт собой ΠΊΠΎΡ€Ρ‚Π΅ΠΆ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ (Π³ΠΎΠ΄, мСсяц, mday, час, ΠΌΠΈΠ½ΡƒΡ‚Π°, сСкунда, дСнь Π½Π΅Π΄Π΅Π»ΠΈ, дСнь Π³ΠΎΠ΄Π°).

time.localtime([secs]) : Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄Π°Ρ‚Ρƒ-врСмя ΠΏΠΎ мСстному Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΡƒΠΊΠ°Π·Π°Π½Ρ‹ сСкунды. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ врСмя прСдставляСт собой ΠΊΠΎΡ€Ρ‚Π΅ΠΆ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ (Π³ΠΎΠ΄, мСсяц, mday, час, ΠΌΠΈΠ½ΡƒΡ‚Π°, сСкунда, дСнь Π½Π΅Π΄Π΅Π»ΠΈ, дСнь Π³ΠΎΠ΄Π°). ΠœΠ΅ΡΡ‚Π½ΠΎΠ΅ врСмя ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ установлСно Π² соотвСтствии с ОБ/RTOS ΠΈΠ»ΠΈ RTC.

ИспользованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ тикания
Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ тикания ΡƒΠ΄ΠΎΠ±Π½Ρ‹, ΠΊΠΎΠ³Π΄Π° Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ MicroPython трСбуСтся Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ врСмя. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π³Π°Π»ΠΎΡ‡ΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ врСмя, Π·Π°Ρ‚Ρ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌΠΎΠ΅ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ встроСнной Π·Π°Π΄Π°Ρ‡ΠΈ, ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΡ€Π°ΠΉΠ½ΠΈΠΉ срок для встроСнной Π·Π°Π΄Π°Ρ‡ΠΈ, ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚Ρ‹ ΠΈ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ встроСнныС Π·Π°Π΄Π°Ρ‡ΠΈ.

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ допустимый ΠΏΡ€ΠΈΠΌΠ΅Ρ€ расчСта Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π·Π°Ρ‚Ρ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ части скрипта MicroPython.
врСмя ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°
Π½Π°Ρ‡Π°Π»ΠΎ = time.ticks_us()
… # ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ MicroPython для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ
print(time.ticks_diff(time.ticks_us(), start))

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ допустимый ΠΏΡ€ΠΈΠΌΠ΅Ρ€ нахоТдСния TICKS_MAX Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ€Ρ‚Π°.
print(ticks_add(0, -1))

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ установки ΠΊΡ€Π°ΠΉΠ½Π΅Π³ΠΎ срока для встроСнной Π·Π°Π΄Π°Ρ‡ΠΈ.
ΠΊΡ€Π°ΠΉΠ½ΠΈΠΉ срок = ticks_add(time.ticks_ms(), 200)
Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ticks_diff(ΠΊΡ€Π°ΠΉΠ½ΠΈΠΉ срок, time. ticks_ms()) > 0:
do_a_little_of_something()

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ допустимый ΠΏΡ€ΠΈΠΌΠ΅Ρ€ опроса события с Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚ΠΎΠΌ.
start = time.ticks_us()
while pin.value() == 0:

if time.ticks_diff(time.ticks_us(), start) > 500:
ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ TimeoutError

допустимый ΠΏΡ€ΠΈΠΌΠ΅Ρ€ планирования встроСнных Π·Π°Π΄Π°Ρ‡ с использованиСм Ρ‚ΠΈΠΊΠ°ΡŽΡ‰ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.
сСйчас = time.ticks_ms()
schedule_time = task.scheduled_time()
if ticks_diff(scheduled_time, now) == 0:
print(«ΠΏΠΎΡ€Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ!»)
task.run()

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

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, связанныС с Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ модуля time, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ time.sleep(), time.sleep_ms() ΠΈ time.sleep_us(), ΠΈΠΌΠ΅ΡŽΡ‚ Π΄Π²Π΅ Π·Π°ΡΠ»ΡƒΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ внимания ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, эти ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ носят Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ ΠΈ ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ скрипт ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, эти ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½Π΅ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Ρ‚ΠΎΡ‡Π½ΠΎΠΉ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ. НапримСр, Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° Π² нСсколько сСкунд ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° time.sleep() ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ошибкС Π² нСсколько миллисСкунд. Π­Ρ‚ΠΈ ошибки ΠΌΠΎΠ³ΡƒΡ‚ Π΄ΠΎΡΡ‚ΠΈΠ³Π°Ρ‚ΡŒ 1 ΠΈΠ»ΠΈ 2 ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ΠΎΠ².

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

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

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΏΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρƒ?
Одной ΠΈΠ· Π²Π°ΠΆΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ² являСтся синхронизация событий. Π­Ρ‚ΠΎ дСлаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ ΠΏΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρƒ. Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅ β€” это Π½Π΅ Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ΅, ΠΊΠ°ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ΄Π° Π² ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π΅. Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ΠΎΠ²Ρ‹ΠΉ Π±Π»ΠΎΠΊ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ
ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ обслуТивания ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ (ISR) . ISR выполняСтся, ΠΊΠΎΠ³Π΄Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ выполняСт инструкции ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ. Когда Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅, ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ пропускаСт Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΠΈ сначала выполняСт ISR. ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ISR возобновляСтся Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°.

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

Класс Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° MicroPython
MicroPython прСдоставляСт класс Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ² ΠΈ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ ΠΎΡ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… ΠΏΠΎΡ€Ρ‚ΠΎΠ². Класс Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ машинного модуля. Он импортируСтся Π² сцСнарий MicroPython с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°.
ΠΈΠ· Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ΠΌΠ°ΡˆΠΈΠ½Ρ‹

Π’ случаС, Ссли ΠΏΠΎΡ€Ρ‚ WiPy, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€.
ΠΈΠ· машинного ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° TimerWiPy

Π’Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ссли ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ обслуТивания прСрывания Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ошибки, MicroPython Π½Π΅ создаСт ΠΎΡ‚Ρ‡Π΅Ρ‚ ΠΎΠ± ошибкС, Ссли для Π½Π΅Π³ΠΎ Π½Π΅ создан ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π±ΡƒΡ„Π΅Ρ€. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π±ΡƒΡ„Π΅Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ создан для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ, ΠΊΠΎΠ³Π΄Π° прСрывания Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ прСрывания ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² скриптС MicroPython. Π‘ΡƒΡ„Π΅Ρ€ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ².
import micropython
micropython. alloc_emergency_exception_buf(100)

Π’Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ здСсь Π±ΡƒΡ„Π΅Ρ€ Ρ…Ρ€Π°Π½ΠΈΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послСднюю трассировку стСка ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. Если Π²ΠΎ врСмя Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΊΡƒΡ‡ΠΈ гСнСрируСтся Π²Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, трассировка стСка Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ замСняСт ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ трассировку.

ПослС ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° класса Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°. Π­Ρ‚ΠΎ дСлаСтся ΠΏΡƒΡ‚Π΅ΠΌ Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° конструктора. ΠœΠ΅Ρ‚ΠΎΠ΄ конструктора ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ.
class machine.Timer(id, /, …)

ΠœΠ΅Ρ‚ΠΎΠ΄ конструктора ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число 0, 1, 2 ΠΈ Ρ‚. Π΄. для Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° ΠΈΠ»ΠΈ -1 для Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, Ссли ΠΏΠΎΡ€Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ это. Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ установлСны Π² Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° конструктора. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ явно Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° timer.init() . ΠœΠ΅Ρ‚ΠΎΠ΄ timer.init() ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ.
Timer.init(*, mode=Timer.PERIODIC, period=- 1, callback=None)

МоТно ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ€Π΅ΠΆΠΈΠΌ timer. ONE_SHOT ΠΈΠ»ΠΈ Timer.PERIODIC. Если установлСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ timer.ONE_SHOT, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ запускаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΡ€ΠΎΠΉΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ Π² миллисСкундах. Если Π·Π°Π΄Π°Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ timer.PERIODIC, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ запускаСтся пСриодичСски с ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠΌ Π² миллисСкундах, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ пСрСдаСтся Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ . АргумСнт ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ β€” это ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π² миллисСкундах, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π² качСствС Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚Π° для ΠΎΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ пСриодичСского выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°, Π² зависимости ΠΎΡ‚ установлСнного Ρ€Π΅ΠΆΠΈΠΌΠ°. 9ΠžΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² 0275 β€” это Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, выполняСмый ΠΏΠΎ истСчСнии ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° обслуТивания прСрывания вызываСтся для выполнСния ΠΆΠ΅Π»Π°Π΅ΠΌΡ‹Ρ… встроСнных Π·Π°Π΄Π°Ρ‡ ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ прСрывания Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°. Π’Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ класса.

Класс Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° позволяСт ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€ΠΈΠΉΠ½ΠΎΠ΅ устройство Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°. Π­Ρ‚ΠΎ дСлаСтся Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° timer.deinit(). Π’Ρ‹Π·ΠΎΠ² этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ останавливаСт Ρ‚Π°ΠΉΠΌΠ΅Ρ€, Ссли ΠΎΠ½ Π·Π°ΠΏΡƒΡ‰Π΅Π½, Π΄Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€ΠΈΠΉΠ½ΠΎΠ΅ устройство Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°. Он ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ.
Timer.deinit()

Если ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ снова Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ, Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ снова ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ MicroPython
Ѐункция ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°, указанная Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, прСдставляСт собой ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ обслуТивания прСрывания, которая запускаСтся, ΠΊΠΎΠ³Π΄Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°. Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎ, Ρ‡Ρ‚ΠΎ MicroPython Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ² Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ рСгистров. ВмСсто этого ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ прСрывания Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ врСмя оТидания Π² миллисСкундах. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ доступны Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ°ΡˆΠΈΠ½Ρƒ. Π’Π°ΠΉΠΌΠ΅Ρ€Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ ΠΊΠΎ всСм ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹ΠΌ ΠΏΠΎΡ€Ρ‚Π°ΠΌ.

Ѐункция ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ прСрывания для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΌΠ΅Ρ€ прСдостороТности ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ сбоСв Π²ΠΎ врСмя выполнСния. ΠœΡ‹ ΡƒΠΆΠ΅ обсуТдали ΠΎΠ΄Π½ΠΎ ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… прСдостСрСТСний: ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π±ΡƒΡ„Π΅Ρ€Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° для хранСния послСднСй ошибки ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. ΠžΠ±ΡΡƒΠ΄ΠΈΠΌ Π΅Ρ‰Π΅ нСсколько Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΉ ΠΏΠΎ написанию ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ Π½Π° MicroPython.

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

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ² Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ значСния. Однако MicroPython позволяСт ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ обслуТивания ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈΠ»ΠΈ нСсколько Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. ISR ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΠ΄Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΎΠ±Π½ΠΎΠ²ΠΈΠ² Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ. Если Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ нСсколько Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ массив Π±Π°ΠΉΡ‚ΠΎΠ². ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ массива Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ, Ссли ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ нСсколько цСлочислСнных Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Однако Ρ‚Π°ΠΊΠΎΠ΅ совмСстноС использованиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ ISR ΠΈ основным Ρ†ΠΈΠΊΠ»ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ состояниС Π³ΠΎΠ½ΠΊΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΈ основной Ρ†ΠΈΠΊΠ» ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈ Π³ΠΎΠ½ΠΊΠ° ISR ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ значСния этих ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² основном Ρ†ΠΈΠΊΠ»Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ особой остороТности. ΠŸΠ΅Ρ€Π΅Π΄ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ±Ρ‰Π΅ΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ/массива Π±Π°ΠΉΡ‚ΠΎΠ²/массива Π² основном Ρ†ΠΈΠΊΠ»Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ прСрывания Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠœΠ΅Ρ‚ΠΎΠ΄ pyb.disable_irq() . ПослС обновлСния ΠΎΠ±Ρ‰Π΅ΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ/Π±Π°ΠΉΡ‚ΠΎΠ²ΠΎΠ³ΠΎ массива/массива Π² основной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ прСрывания ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ, Π²Ρ‹Π·Π²Π°Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ pyb.enable_irq() .

Π’Π°ΠΉΠΌΠ΅Ρ€Ρ‹ Π² ESP8266
Π’ ESP8266 Π΅ΡΡ‚ΡŒ Π΄Π²Π° Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° β€” timer0 ΠΈ timer1. Timer0 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для сСтСвых Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Timer1 доступСн для использования Π² ESP8266, Π½ΠΎ MicroPython прСдоставляСт доступ ΠΊ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°ΠΌ ESP8266. ВмСсто этого ESP8266 прСдоставляСт API для Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°. Π­Ρ‚ΠΎΡ‚ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ Π½Π° основС RTOS ΠΈΠΌΠ΅Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ -1. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ допустимый ΠΏΡ€ΠΈΠΌΠ΅Ρ€ прСрывания Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Π² ESP8266.
ΠΈΠ· машинного ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° Π’Π°ΠΉΠΌΠ΅Ρ€
tim = Π’Π°ΠΉΠΌΠ΅Ρ€(-1)
tim.init(ΠΏΠ΅Ρ€ΠΈΠΎΠ΄=500, Ρ€Π΅ΠΆΠΈΠΌ=Timer.ONE_SHOT, ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ²=лямбда t:print(1))
tim.init( ΠΏΠ΅Ρ€ΠΈΠΎΠ΄=200, Ρ€Π΅ΠΆΠΈΠΌ=Timer.PERIODIC, callback=lambda t:print(2))

Π’Π°ΠΉΠΌΠ΅Ρ€Ρ‹ Π² ESP32
ESP32 ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ ΠΎΡ‚ 0 Π΄ΠΎ 3. ВсС Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρ‹ доступны для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Π² ESP32.
ΠΈΠ· машинного ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° Π’Π°ΠΉΠΌΠ΅Ρ€
tim0 = Π’Π°ΠΉΠΌΠ΅Ρ€(0)
tim0.init(ΠΏΠ΅Ρ€ΠΈΠΎΠ΄=2000, Ρ€Π΅ΠΆΠΈΠΌ=Timer.ONE_SHOT, ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ²=лямбда t:print(0))
tim1 = Π’Π°ΠΉΠΌΠ΅Ρ€(1)
tim1.init(ΠΏΠ΅Ρ€ΠΈΠΎΠ΄=1000, Ρ€Π΅ΠΆΠΈΠΌ=Π’Π°ΠΉΠΌΠ΅Ρ€ .PERIODIC, callback=lambda t:print(1))

ИспользованиС Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° ESP8266 для Ρ‚ΠΈΠΊΠ΅Ρ€Π° свСтодиодов
Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°ΠΌΠΈ MicroPython для ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ состояния свСтодиода.

НСобходимыС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹

  1. ESP8266/ESP32 x1
  2. 5 ΠΌΠΌ свСтодиод x1
  3. РСзистор 330 Ом x1
  4. ΠœΠ°ΠΊΠ΅Ρ‚
  5. Π‘ΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π°/ΠΏΠ΅Ρ€Π΅ΠΌΡ‹Ρ‡ΠΊΠΈ

БоСдинСния Ρ†Π΅ΠΏΠΈ
ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π°Π½ΠΎΠ΄ свСтодиода ΠΊ GPIO14 ESP8266 ΠΈΠ»ΠΈ ESP32. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ рСзистор 330 Ом ΠΊ ΠΊΠ°Ρ‚ΠΎΠ΄Ρƒ свСтодиода ΠΈ Π·Π°Π·Π΅ΠΌΠ»ΠΈΡ‚Π΅ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠ½Π΅Ρ† рСзистора.

ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ свСтодиода Π½Π° ESP8266 с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ прСрывания Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° MicroPython

Π‘ΠΊΡ€ΠΈΠΏΡ‚ MicroPython

Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½ΠΈΠ·ΠΊΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ сигнала с Π²Ρ‹Π². Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ MicroPython Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° ΠΊΠ°ΠΆΠ΄ΡƒΡŽ 1 сСкунду, ΠΊΠΎΠ³Π΄Π° состояниС свСтодиода ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ, Π° количСство ΠΌΠΈΠ³Π°Π½ΠΈΠΉ обновляСтся Π½Π° консоли.

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

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

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