3

I would like your help to solve the following problem.

I'm using an ESP32 Dev Kit V1 connected as follows:

  • Pin 4 (input) is connected to a 20kHz and 3.3V signal and to channel 1 of the oscilloscope; and
  • Pin 2 (output) is connected to channel 2 of the oscilloscope.

My goal is to use interrupts and generate a signal on pin 2 (output) that follows the variations of the signal on pin 4 (input).

The image below illustrates two behaviors. The most frequent and the other one that happens occasionally. In the first behavior, the latency is around 3 us, but sometimes there is a variation (jitter) and the rise of the output signal takes 15 us or even more to keep up with the input.

ESP32 Dev Kit V1 connection

I would like to know how to remove this occasional behavior and keep the system stable.

The code that I'm using is below. To compile and upload I am using the latest Arduino IDE version 1.8.13.

I'm using GPIO.out_w1ts and GPIO.out_w1tc because I believe it will be faster than using digitalWrite(pin, state).

Also notice that I'm not reading the state of pin 4 (input) to be faster, because of this, sometimes the output signal gets inverted, but that's not a problem at this point.

#define OUTPUT_PIN 2
#define INPUT_PIN 4

volatile bool state = false;

void IRAM_ATTR interruptFunction() {
    if (state)
        GPIO.out_w1ts = 0b100;
    else
        GPIO.out_w1tc = 0b100;
    state = !state;
}

void setup() {
    pinMode(INPUT_PIN, INPUT);
    attachInterrupt(digitalPinToInterrupt(INPUT_PIN), interruptFunction, CHANGE);
    gpio_config_t io_conf;
    io_conf.mode = GPIO_MODE_OUTPUT;
    io_conf.pin_bit_mask = 0b100;
    gpio_config(&io_conf);
}
    
void loop() {
}

The settings used in the Arduino IDE are illustrated in the next image.

Arduino IDE Settings

Thanks in advance for all the help!

Jose Silva
  • 139
  • 6
  • I´m not familar with ESP32 and FreeRTOS but after a quick search i found this https://www.freertos.org/deferred_interrupt_processing.html The question is if on the Arduino plattform the interrupt is handeld as deferred interrupt or with standard ISR processing? – sunriax Mar 24 '22 at 09:54
  • Thank you @sunriax! I'll take a look at this and if I get the solution, I'll reply over here! I'm glad for your help. – Jose Silva Mar 30 '22 at 20:06

0 Answers0