Error in blinking led using GPIO_12 of ESP32 - touch

Here is my code:
#define LED_BUILTIN 12
// the setup function runs once when you press reset or power the board
void setup()
{
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT);
}
// the loop function runs over and over again forever
void loop()
{
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(LED_BUILTIN, LOW);// turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
The above code works perfectly fine for GPIO_2 but fails for GPIO_12. I want to ask whether it is giving fault because I am using touchpad pin or there is some other error?
I have attached an LED to GPIO_12 of ESP32 and after program uploading, my led is not blinking. I have tried to connect voltmeter to GPIO_12 and it is giving 0.5 volts with minor fluctuation. I was expecting a change of voltage after each second as per HIGH/LOW conditions of my code but unfortunately, I am not getting the desired result. What could be the possible reason?

Now I have found out the solution so let's share so that others can also get benefit. The code for which I was following the reference website contained 36 pins which mean 18 pins on each side but in my version of the board there were total 30 pins on my board which mean 15 pins on each side. Now that I have got pin out reference of that board and my board also, everything is fine, aligned and makes perfect sense. Problem was that the hardware which the reference website referred to had different hardware version with 36 pins and my hardware contained 30 total pins and was a different version of ESP32.

Related

Raspiberry Pi RP2040 LCD clock signals

I'm using Micro python to try and generate an RGB signal for a TFT screen such as the:
Screen
The timings i need the follow are:
CLKIN: 3.33Mhz
Horizontal is 800 clock cycles up and 1 clock cycle down
Vertical is 480 Horizontal Clock cycles up and
Ive already got this code that spits out the clock but i cant chnage the square function or add a second state machine, how would i go about bit bashing the pins at the required times.
from machine import Pin
from rp2 import PIO, StateMachine, asm_pio
import time
#asm_pio(set_init=PIO.OUT_LOW)
def square():
wrap_target()
set(pins, 1)
set(pins, 0)
wrap()
sm = rp2.StateMachine(0, square, freq=33300000, set_base=Pin(2))
sm.active(1)
Your frequency is 3.33mHz, but each cycle uses 2 cpu cycles so each rising edge is only at 1.665mHz.

Why is 'GPIO.setup(6, GPIO.IN)' throwing an error?

I'm trying to read the state of the input pin (BOARD pin 6, which is a ground pin) and I receive the error "ValueError: The channel sent is invalid on a Raspberry Pi".
Am I misunderstanding the definition of an input pin? My understanding was that it is simply the ground/negative pin, connecting back 'in' to the pi?
I'm trying to read the state purely for tinkering purposes, to see the value change when it's floating (not using a pull-down).
The Ground pin is connected, literally, to ground. It is impossible to read or write values to ground or power, as these are the circuit components. You have to connect to a GPIO pin (the green(ish? I'm colorblind) dots at http://pinout.xyz).
It is possible for the input of a GPIO pin to be set to HIGH or LOW, depending on the circuit you wish to use. If you expect the GPIO to be normally LOW and HIGH when your input is triggered (such as with a pushbutton switch), then you have to set the state to pulldown.
I would recommend you read some of the background on microcontrollers: https://embeddedartistry.com/blog/2018/06/04/demystifying-microcontroller-gpio-settings/

STM32:-Why is it required to make pins AF(Alternate function)

I want to configure SPI1 in stm32f103. Why is it required to make pins AF(Alternate function)? Cant it just be input or output? What is actually happening when the pins are AF?
Those pins can be connected to several different peripheral blocks, by setting the alternate function, you're configuring a multiplexer within the IC to connect the pin to the correct peripheral block for your purpose.
Output pins can be controlled either by the GPIO ODR registe, or a peripheral. There must be a way to say which one has the control. If you don't need all output signals of a peripheral, you can leave the corresponding pin as GPIO, and use the pin for something else.
If the pin is set as General Purpose Output, then the output voltage level is determined by the ODR register. The peripheral controller has no effect on the output.
If the pin is set as Alternate Function Output, then the peripheral determines the pin output, and the corresponding ODR register is disconnected from the pin.
If the pin is set as input, then there is no difference. The pin state is available both in the IDR register and to the peripheral controller.
In your STM32F103, Page 26 describes what would be the value of each pin after reset. Making it AF (alternate Function) tells the processor to make this pin as your desired functionality, SPI1 in your case. If you dont do it then your Pin will always behave as default Pin.

Simple Relay Control with Arduino

I am new to coding for Arduino. I have done Java and Matlab in the past.
I have designed a simple replay circuit as seen here:
I assume it is set up right, but if not please let me know.
I basically need simple code to just trigger the relay on and off for intervals of 1 second indefinitely or until I just disconnect the power.
Any help would be great.
Thanks!
You can simply use the Blink example that comes with Arduino IDE. Connect the Relay output control to pin 13 (your yellow wire) and you have it.
/*
Blink
Turns on an LED on for one second, then off for one second, repeatedly.
This example code is in the public domain.
*/
// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;
// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
pinMode(led, OUTPUT);
}
// the loop routine runs over and over again forever:
void loop() {
digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
Even better would be to use the blink without delay example

RC Filter at the ADC input pins of beagle bone black

I am trying to read a thermistor with the beagle bone black.
I have a voltage divider circuit that feeds a unity gain Opamp. The O/P of the opamp is connected to a simple RC Low pass filter that feeds voltage to the ADC pin.
The problem I have noticed is that the voltage sensed by the beagle bone is always 0.02V higher than the actual voltage at the opamp output.
At first I thought this was a software issue, but on further investigation I found out that the voltage at the ADC pin is actually raised by 0.02V. If I feed the ADC pin directly from the opamp, without the RC filter I do not have this issue.
Has anyone else experienced anything similar?
Thanks in advance!
The resistance in the RC filter is too high which is causing a voltage drop because of the internal impedance of the ADC pin. You can use an active low pass filter to resolve this problem:
http://en.wikipedia.org/wiki/Low-pass_filter#Active_electronic_realization