<div class="iw_mail" dir="ltr" style="font-size: 13px;"><div>Nevím jak mají ten timer implementovaný, ale zběžným pohledem to vypadá, že timer běží pořád.</div><div>Tudíž když nastavíš alarm, tak těžko říci, jaká je právě hodnota v timeru (předpokládám, že se tím nenuluje).</div><div>Takže bych zkusil k tomu nastavení alarmu přidat i nulování/nastaveni na nulu/ timeru </div><div><span class="nf">"timerWrite</span><span class="p">(</span><span class="n">hw_timer_t</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">timer</span><span class="p">,</span><span class="w"> </span><span class="kr">uint64_t</span><span class="w"> </span><span class="n">val</span><span class="p">)"</span></div><div><br></div><div class=""><div>Martin L.</div></div><div><br></div><div class="iw-reply-block" dir="LTR" style="font-size: 13px;font-family:Roboto, Tahoma, Helvetica, sans-serif;line-height:normal;"><div style="margin:0;font-family:Roboto, Tahoma, Helvetica, sans-serif;font-size:13px;font-weight:300;line-height:150%;letter-spacing:normal;color:#333333;"><div style="display:none;margin:0;font-family:Roboto, Tahoma, Helvetica, sans-serif;font-size:13px;font-weight:300;line-height:150%;letter-spacing:normal;color:#333333;">----- Původní zpráva -----</div><hr size="1" width="100%" style="width:100%;padding:0;margin:10px 0;color:#888888;background-color:#888888;border-color:#DDDDDD;">Odesilatel: Pavel Kutina (<a href="mailto:hw@prelude.cz" style="font-family: Helvetica, sans-serif; font-size: 12px; font-weight: 300; line-height: 150%; color: rgb(0, 136, 204); text-decoration: none;">hw@prelude.cz</a>)<br>Datum: 02/09/2024 19:11<br>Příjemce: HW-news (<a href="mailto:hw-list@list.hw.cz" style="font-family: Helvetica, sans-serif; font-size: 12px; font-weight: 300; line-height: 150%; color: rgb(0, 136, 204); text-decoration: none;">hw-list@list.hw.cz</a>)<br>Předmět: <span style="font-family:Helvetica, sans-serif;font-size:12px;font-weight:300;line-height:150%;color:#333;text-decoration:none;font-weight:bold;">ESP32 a HW timer</span></div><br><div>Zdravim,<br><br>pokouším se tu krotit HW timer v ESP32 na Arduino IDE, potřebuju neblokující<br>indikační pípák (zavolej funkci a jdi si dělat co potřebuješ, ono už se to<br>dopípá).<br><br>Kód má jednoduchou myšlenku:<br><br>v setup si nadefinuj interrupt<br>při stisku tlačítka nahoď pin s pípákem, současně spusť HW timer<br>když dojede HW timer, obsluha interruptu shodí pin s pípákem<br><br>Ve vlastním kódu je to o chlup složitější, testuje se tam, jestli pípák<br>ještě pípá, aby se to nespouštělo znovu.<br><br>Ať dělám, co dělám, mám nastavený dvousekundový píp, ale ty pípy jsou různě<br>kratší, skutečně dvousekundových je málo.<br><br>Netušíte, co dělám blbě? Jinak kód jsem zjednodušil "až na dřevo", výsledek<br>je stejný. Když jsem nečetl stav portu, ale použil proměnnou se stavem,<br>chovalo se to stejně. Když jsem použil funkce pro přímý zápis na pin místo<br>digitalWrite, chovalo se to stejně. Připúadá mi to neprůstřelný, ale není :)<br>Někde dělám něco blbě, ale nevidím to.<br><br>Díky za pomoc.<br><br>Pavel Kutina<br><br>//-----------------------------------------------------------------------------<br>#define BEEPER      2                   //  beeper<br>#define ENC_SW      32                  //  encoder button, HW pull-up<br><br>hw_timer_t * timer = NULL;<br><br>//-----------------------------------------------------------------------------<br>void IRAM_ATTR beepTimer()<br>{<br>   digitalWrite(BEEPER, LOW);<br>}<br><br>//-----------------------------------------------------------------------------<br>void setup()<br>{<br>   pinMode(BEEPER, OUTPUT);<br>   pinMode(ENC_SW,  INPUT);     //  button enkoderu<br>   Serial.begin(115200);<br><br>   //  hw_timer_t * timerBegin(uint32_t frequency);<br>   timer = timerBegin(1000000UL);<br><br>   //  void timerAttachInterrupt(hw_timer_t * timer, void<br>(*userFunc)(void));<br>   timerAttachInterrupt(timer, &beepTimer);<br>}<br><br>//-----------------------------------------------------------------------------<br>void loop()<br>{<br>   // kdyz neni stisknute tlasitko a soucasne nepipa pipak<br>   if ((digitalRead(ENC_SW) == false) && (digitalRead(BEEPER) == false))<br>   {<br>       //  void timerAlarm(hw_timer_t * timer, uint64_t alarm_value, bool<br>autoreload, uint64_t reload_count);<br>       timerAlarm(timer, uint32_t(2000000UL), true, 1);<br><br>       digitalWrite(BEEPER, HIGH);<br>   }<br>}<br><hr>_______________________________________________<br>HW-list mailing list  -  sponsored by <a href="http://www.HW.cz">www.HW.cz</a><br><a href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a><br><a href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a></div></div></div>