Video understanding that you LP coprocessor assembly code in the ESP 32. In this video, we will discuss in depth the you will Pico process assembly code for deep sleep in the ESP 32. Now let us discuss the most important part of this project, which is the you will pay coprocessor program open the ADC dot s code in Arduino ID in this code we will use instruction codes and register level coding to make the USB core processor read ADC values and trigger the wakeup the structure of an assembler is straightforward. No curly braces, no if else statements, no loops, only instruction codes. It is also not case sensitive. Also, the you will Pico processor only understands a total of only 26 commands.
Check out the link in the resources. For more details on these commands. This video is not an assembler tutorial. Moreover, teaching assembly level programming can be the whole course by itself. Thus, we will only go through the basics of the code. You can go through the links in the resources to learn more.
Initially we have imported SOC or system on chip level libraries for doing you LP RTC, GPIO and RTC control operations in the assembly code. Now we will set the ADC channel for ADC one at GPIO 34, which has channel six on each wakeup. The program measures input voltage on the given ADC channel ADC underscore over sampling underscore factor times. These instructions are used to set the number of readings to be taken via the ADC to cancel Click an average value. You can see that these instructions are used to access the four global variables, which are shared between the main program and they will pick code. They include the low underscore threshold, the high threshold, the sample counter, and the ADC underscore reading.
In the assembler, we will use the right underscore RTC underscore RG function to switch the LED on and off based on the ADC values. This function is used to disable or enable hold and set or clear GPIO pins in the deep sleep mode. You might already know that setting and clearing function is to make the LED on or off. But what has enabled hold or disabled hold mean? The you will pay coprocessor has a great feature. It can keep this data for pin even when it sleeps.
But if you want to change the state of this pin, You have to release it by disabling hold on that pin. Before we look at how to use the right underscore RTC underscore Rh function, we need to make the pin numbering clear. See the GPIO pin numbering on the board is different from the pin numbering given for RTC GPIO pin, which is used during up deep sleep. So please refer to this table provided on the screen. To get a better understanding. You can download this table from the resources section.
Please make sure you don't get confused on the pin names. Let's continue with code. These instructions increment the sample counter to keep track of number of times that you will be coprocessor measure for ADC value. Next, we will collect measurement using ADC and use our zero as an accumulator to measure and add the consecutive values. Finally, we divide the accumulator value with the total number of measurements. That is by ADC underscore over sampling underscore factor, then we compare the average with the low underscore threshold value.
If it's below the lower threshold, the program counter will jump to the set of instructions for led underscore off. If it is above the threshold, these set of instructions will check whether the value is about the higher threshold value. If it's about a threshold value, then it will jump to the set of instructions under wake underscore up. If it's not about the threshold, then it means that the value is between the higher and lower thresholds which means that the LED should be on in this case, which is why the following set of instructions are included here. Now we will look at instructions inside led underscore on led underscore of wake underscore up and exit. If you remember correctly, we will use the GPIO 27 pin to control an LED inside led underscore on, you can see that we have first disabled the hold on the GPIO 27 then we have set the GPIO pin high and finally enabled hold before exiting inside led underscore have also the same sequence of instruction happened.
But instead of setting the register bit, we cleared it so that the LED will become off. In both cases, we have used the last parameter to disable and enable hold. To understand why the pin numbering has changed, you have to refer back to the pin number table I have provided earlier. Here. The GPIO 27 pin is connected to the RTC pin 17 during deep sleep mode. And the register name associated with the state of the pin happens to be RTC, underscore i o underscore Touch underscore pad seven underscore r eg.
This is merely a naming convention used by the ESP 32 core for the GPIO mapping. We're not in deep sleep, the ESP 32 uses this pin as a GPIO pin. That can also sense touch. The difference between setting and clearing the GPIO pin states is only these letters. Inside exit, we clear the GPIO pin 13 which is equivalent to RTC pin 14 or touchpad four and then use halt to exit out of the Equal Pay program and make the ESP 32. The wake underscore up checks if the system can be woken up and jumps to exit stopping the UL PE program.
Now connect an LED with an appropriate current limiting resistor at the GPIO 27 pin and wire up a variable power supply to the GPIO 34 To simulate varying voltage at the sensing input pin of ADC. If you don't have a proper power supply, you can always use a constant current source with a voltage divider configuration to create your own fixed test voltages, you can even use a potentiometer to control it. Now you can see that as long as the average ADC input voltage is below the lower threshold, the LED is off. If it's between one volt and two volts, then the LED is on. And if it's about two volts, the serial monitor shows that the main core is waking up and printing the ADC value. Now I will give you a cool activity.
Modified this project to create a battery level monitor. You can measure the potential drop between the battery terminals and based on the voltage drop in battery level, the deep sleep interval must vary So basically you need to study how battery drain happens and based on reducing battery level, the deep sleep time between LED blinking must increase. Summary. In this video we have covered the following topic, the you will pay coprocessors simply code in the ESP 32. In the next video, we will discuss the power consumption during deep sleep in the sparkfun ESP 32 thing