ESP32 a HW timer
Pavel Kutina
hw na prelude.cz
Pondělí Září 2 23:42:47 CEST 2024
Tady mi to hlava nepobrala: Jak "zkratovat pin"? Když ho nastavím jako
výstup a pošlu na něj high, pak z něj zkusím číst a získám stav na pinu (Při
čtení můžu mít vstup floating, pull-up nebo pull-down, v daném případě jsem
ho nechal plavat). Ale je dost dobře možné, že získám stav nějakého latche,
ne skutečný stav na pinu, architekturou I/O portů si úplně jistý nejsem, ta
architektura není úplně jednoduchá. Ale nevidím nikde žádný zkrat, co
přehlížím?
Pavel Kutina
----- Original Message -----
From: "Vláďa Anděl" <vaelektronik na vaelektronik.cz>
To: <hw-list na list.hw.cz>
Sent: Monday, September 2, 2024 8:31 PM
Subject: Re: ESP32 a HW timer
S ESP32 nedělám, ale jen se divím, to tomu jde ve výstupním režimu ten
pin zkratovat a ten výstup neodejde? U silabsáckých 8051 by to nejspíš
odešlo. Tam když chci vstup, musím ho nastavit jako vstup a mohu si
vybrat, jestli s pull-up odpory, nebo bez nich. Ve vstupním režimu to
mohu ovládat jako výstup, ale je s otevřeným kolektorem.
Anděl
Dne 02.09.2024 v 19:18 Jaroslav Buchta napsal(a):
> 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
_______________________________________________
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