ESP32 a HW timer
Vláďa Anděl
vaelektronik na vaelektronik.cz
Pondělí Září 2 20:31:16 CEST 2024
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
Další informace o konferenci Hw-list