ESP32 a HW timer

hw na prelude.cz hw na prelude.cz
Pondělí Září 2 19:27:52 CEST 2024


Se stavovou proměnnou se to chovalo stejně, ta tam původně byla, já to postupně zkoušel.

Kupodivu v aktuální verzi čtení z výstupního pinu funguje, normálně to nepoužívám, tady jsem to zkusil. Ale ani to nevysvětluje, proč by měl ten timer takhle "kulhat".

Pavel Kutina 

-----Original Message-----
From: Jaroslav Buchta <jaroslav.buchta na hascomp.cz>
To: hw-list na list.hw.cz
Sent: po, 02 zář 2024 19:18
Subject: Re: ESP32 a HW timer

Prvni chyba bude v pouziti arduino prostredi ;-)
Nezalezi odchylka na delce stisku tlacitka? ESP aspon v nekterych 
verzich nedela input na pinu, pokud je nastaven jen jako output. Ale jak 
to je interne udelane nevim. Kazdopadne cist zpetne vystup pro zjisteni 
stavu jinak nez pro diagnostiku mi prijde neslusne, zavedl bych stavovou 
promennou.
Standardne by se asi nejlip pouzil extra task OS, nebo timer OS coz je 
to same sdilene.

Dne 02.09.2024 v 19:11 Pavel Kutina napsal(a):
> Zdravim,
>
> pokouším se tu krotit HW timer v ESP32 na Arduino IDE, potřebuju 
> neblokující indikační pípák (zavolej funkci a jdi si dělat co 
> potřebuješ, ono už se to dopípá).
>
> Kód má jednoduchou myšlenku:
>
> v setup si nadefinuj interrupt
> při stisku tlačítka nahoď pin s pípákem, současně spusť HW timer
> když dojede HW timer, obsluha interruptu shodí pin s pípákem
>
> Ve vlastním kódu je to o chlup složitější, testuje se tam, jestli 
> pípák ještě pípá, aby se to nespouštělo znovu.
>
> Ať dělám, co dělám, mám nastavený dvousekundový píp, ale ty pípy jsou 
> různě kratší, skutečně dvousekundových je málo.
>
> Netušíte, co dělám blbě? Jinak kód jsem zjednodušil "až na dřevo", 
> výsledek je stejný. Když jsem nečetl stav portu, ale použil proměnnou 
> se stavem, chovalo se to stejně. Když jsem použil funkce pro přímý 
> zápis na pin místo digitalWrite, chovalo se to stejně. Připúadá mi to 
> neprůstřelný, ale není :)
> Někde dělám něco blbě, ale nevidím to.
>
> Díky za pomoc.
>
> Pavel Kutina
>
> //----------------------------------------------------------------------------- 
>
> #define BEEPER      2                   //  beeper
> #define ENC_SW      32                  //  encoder button, HW pull-up
>
> hw_timer_t * timer = NULL;
>
> //----------------------------------------------------------------------------- 
>
> void IRAM_ATTR beepTimer()
> {
>    digitalWrite(BEEPER, LOW);
> }
>
> //----------------------------------------------------------------------------- 
>
> void setup()
> {
>    pinMode(BEEPER, OUTPUT);
>    pinMode(ENC_SW,  INPUT);     //  button enkoderu
>    Serial.begin(115200);
>
>    //  hw_timer_t * timerBegin(uint32_t frequency);
>    timer = timerBegin(1000000UL);
>
>    //  void timerAttachInterrupt(hw_timer_t * timer, void 
> (*userFunc)(void));
>    timerAttachInterrupt(timer, &beepTimer);
> }
>
> //----------------------------------------------------------------------------- 
>
> void loop()
> {
>    // kdyz neni stisknute tlasitko a soucasne nepipa pipak
>    if ((digitalRead(ENC_SW) == false) && (digitalRead(BEEPER) == false))
>    {
>        //  void timerAlarm(hw_timer_t * timer, uint64_t alarm_value, 
> bool autoreload, uint64_t reload_count);
>        timerAlarm(timer, uint32_t(2000000UL), true, 1);
>
>        digitalWrite(BEEPER, HIGH);
>    }
> }
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list


_______________________________________________
HW-list mailing list  -  sponsored by www.HW.cz
Hw-list na list.hw.cz
http://list.hw.cz/mailman/listinfo/hw-list


Další informace o konferenci Hw-list