Muchisimas gracias Rubén cuando tenga un hueco lo implemento y te doy feedback. Sería de gran ayuda que subieras el código que enseñas en los vídeos a un repositorio publico para poder juguetear con el directamente y trabajar exactamente sobre lo que has hecho en el vídeo. Un saludo. Sigue así se nota la dedicación que tienes, te encanta esto!
@DEA_CARLOS7 ай бұрын
Hola Ruben buenas noches. Transcribi el programa para ponerlo en funcionamiento. Es de gran ayuda para mi ya que ibamos a utilizar un adc externo de microchip con comunicación lo que engrosa bastante el proyecto. Tengo problemas con la libreria #include . La he buscado y no la pude localizar en la web. Esta compilado con arduino el proyecto ? La libreria es de Espresif ? Gracias
@rubenhidalgocarrillo7 ай бұрын
No hay nada especial usado. Todo es de ESPRESSIF. Si te ha encontrado la del adc, debería encontrar la del dac, porque están en el mismo sitio. El link donde está documentado es: docs.espressif.com/projects/esp-idf/en/v4.4.2/esp32/api-reference/peripherals/dac.html Te paso todo el programa, por si acaso. #include #include #include #include void setup() { Serial.begin(250000); Serial.setTimeout(60000); dac_output_enable(DAC_CHANNEL_1); delay (5000); Serial.println (" ============================================================="); Serial.println ("- Conecta la GPIO_25 (DAC1) con la GPIO_36 (ADC1_0)"); Serial.println ("- Conecta un tester en la GIPIO_36 para ver el voltaje"); Serial.println ("- Conecta un pote multivueltas entre +3V3 y GND. El punto medio conectalo a la GPIO_39 (ADC1_3)"); Serial.println ("- Cuando se complete el proceso se guardará la tabla de calibracion en /calibraADC.cfg, en la flash "); Serial.println ("Espera un momento y sigue las instrucciones "); //SPIFFS.format(); if (!SPIFFS.begin(true)) { Serial.println ("ERROR AL MONTAR EL SISTEMA DE FICHEROS"); } } int estado = 0; int valorDac = 0; double recta_n = 0; double recta_m = 0; int mX[18]; int mY[18]; int calibra[4096]; int nMedida = 0; int miliAnt = 0; double filtro = 0; void loop() { // Pedir los datos de referencia de voltaje para el DAC if (estado == 0) { Serial.print("Introducir el voltaje en milivoltios leido en el tester para DAC = 16: "); dac_output_voltage(DAC_CHANNEL_1, 16); int vBajo = Serial.parseInt(); Serial.printf ("%d ", vBajo); Serial.print("Introducir el voltaje en milivoltios leido en el tester para DAC = 200: "); dac_output_voltage(DAC_CHANNEL_1, 200); int vAlto = Serial.parseInt(); Serial.printf ("%d ", vAlto); recta_m = ((double)vAlto - (double)vBajo) / (200 - 16); recta_n = (double)vBajo - (double)recta_m * 16; estado = 1; Serial.printf (" Ecuacion resultante: y = %0.3f·x + %0.3f ", recta_m, recta_n); Serial.println ("Iniciando la calibración... "); delay (1000); mX[0] = 0; mY[0] = 0; nMedida = 1; return; } // Construir la tabla de calibracion y guardarla en el fichero de configuracion if (estado == 1) { // Calibracion terminada. Guardar los datos en el fichero if (valorDac > 256) { mX[nMedida] = 4096; mY[nMedida] = 4096; for (int i=0 ; i miliAnt + 500) { int miliVoltios = (int)(filtro * 3300 / 4095); Serial.printf("ADC1_3 = %d ", miliVoltios); miliAnt = millis(); } } }
@DEA_CARLOS7 ай бұрын
@@rubenhidalgocarrillo Hola Ruben buen día. Gracias por responder. Quiero agradecer su colaboración. Quiero decirle aunque no pueda recompensar de otra manera expresar mi reconocimiento y que toda la pasión que le imprime a sus investigaciones se ven reflejada en los resultados. Desde mi lugar el aporte que me ha hecho ha sido de gran gran utilidad. Muchas gracias. No quise pedirle el código para no excederme en su generosidad. Lo había copiado desde el video. Gracias !!!!
@DEA_CARLOS7 ай бұрын
@@rubenhidalgocarrillo Una consulta Ruben. De acuerdo a su experiencia. Tengo una serie de módulos esp32 iguales en modelos y características. La desviación que tiene el micro en el ADC será igual en todos ? La pregunta consiste si habrá que calibrar todos en forma individual o el archivo generado con la calibración de uno puede implementarse en los restantes ? Gracias
@rubenhidalgocarrillo7 ай бұрын
@@DEA_CARLOS El adc de la ESP32 tiene varios problemas: - No lee menos de 150 mV, mas o menos. - No lee más de 3.1 V, mas o menos. - No es totalmente lineal. Sobre todo en la parte de arriba tiene un codo pronunciado. - El nivel depende de su referencia interna, que varía entre 1 y 1.2 V, tal como declaran en su propia documentación. - Tiene un ruido interno muy grande, lo cual permite solo 10 bits en crudo, sin filtrar. En su documentación lo explican: docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/peripherals/adc_calibration.html Si quieres tener todo el rango de voltaje, es decir, desde 0 hasta 3.3V, tendrias que montar un circuito como el que explico en este otro video: kzbin.info/www/bejne/lYK6lpqaj7F_eck
@DEA_CARLOS7 ай бұрын
@@rubenhidalgocarrillo Gracias Ruben. Sigo sus consejos y lo pondré en practica. Lo estamos incluyendo en un proyecto que estamos realizando. De esta manera me evito colocar adc externo mas la complejidad de la placa.