Autor Tema: Dimmer programable con control remoto  (Leído 20592 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re:Dimmer programable con control remoto
« Respuesta #15 en: 17 de Abril de 2023, 15:12:23 »
Pues me acabo de encontrar un problema que no sé cómo resolver.
Tengo un TIMER que se ejecuta cada 100us, de manera que divido un semiciclo (a 50Hz) en 100 trocitos. Es este TIMER el que utilizo para gestionar el Dimmer con una resolución del 1% y está funcionando perfectamente.

Mi intención era leer la potencia haciendo una lectura analógica del sensor en cada uno de esos trocitos.
Pero ahora resulta que el ADC del ESP8266 tarda 97us en devolver una lectura, así que me deja el micro ocupado todo ese tiempo sin poder hacer otra cosa.

Voy a investigar si es que puedo acelerar el ADC, o gestionarlo directamente leyendo los registros del micro en lugar de usar la función analogRead.

Si alguno tiene una idea mejor, soy todo oídos.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Dimmer programable con control remoto
« Respuesta #16 en: 17 de Abril de 2023, 15:23:22 »
Yo creo que puedes hacer una lectura del sensor 100 veces por segundo (en cada fin de ciclo) y debería ser suficiente para definir el PWM del siguiente ciclo.

Edito:
Por lo que he leído resulta difícil leer el ADC a bajo nivel con el ESP8266.
https://hackaday.io/page/7136-esp8266-adc-read-nonblocking
« Última modificación: 17 de Abril de 2023, 15:25:45 por Picuino »

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:Dimmer programable con control remoto
« Respuesta #17 en: 17 de Abril de 2023, 16:41:58 »
Voy a investigar si es que puedo acelerar el ADC, o gestionarlo directamente leyendo los registros del micro en lugar de usar la función analogRead.

¿Por qué no haces procesos cooperativos o en tal caso recurrir a la interrupción del ADC para evitar la sincronicidad?
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado Eduardo2

  • PIC24H
  • ******
  • Mensajes: 1004
Re:Dimmer programable con control remoto
« Respuesta #18 en: 17 de Abril de 2023, 17:53:25 »
...Mi intención era leer la potencia haciendo una lectura analógica del sensor en cada uno de esos trocitos.
Pero ahora resulta que el ADC del ESP8266 tarda 97us en devolver una lectura, así que me deja el micro ocupado todo ese tiempo sin poder hacer otra cosa.
...
No hace falta quedarse esperando.  Al comienzo del intervalo de 100uS lees el ADC y luego inicias otra conversión, que recién se leerá en el siguiente intervalo.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re:Dimmer programable con control remoto
« Respuesta #19 en: 18 de Abril de 2023, 02:09:43 »
Yo creo que puedes hacer una lectura del sensor 100 veces por segundo (en cada fin de ciclo) y debería ser suficiente para definir el PWM del siguiente ciclo.

Edito:
Por lo que he leído resulta difícil leer el ADC a bajo nivel con el ESP8266.
https://hackaday.io/page/7136-esp8266-adc-read-nonblocking

¿100 veces por segundo?, teniendo en cuenta que en cada segundo hay 100 semiciclos (a 50Hz) eso me daría sólo una lectura en cada semiciclo. No veo de qué manera puedo calcular la potencia con tan pocas muestras, pero si se puede hacer sería ideal.
Mi intención es leer 100 muestras en cada semiciclo (10.000 en un segundo) de manera que puedo ir sampleando con bastante resolución la forma de la curva, y a partir de ahí, calcular la potencia RMS.
No he leído ese artículo de hackaday pero lo miraré. Si finalmente es imposible acelerar el ADC del ESP8266, tendré que considerar cambiarme a un ESP32, aunque es una pena porque sería matar moscas a cañonazos.

Voy a investigar si es que puedo acelerar el ADC, o gestionarlo directamente leyendo los registros del micro en lugar de usar la función analogRead.

¿Por qué no haces procesos cooperativos o en tal caso recurrir a la interrupción del ADC para evitar la sincronicidad?
Actualmente lo tengo montado con un proceso "cooperativo". La interrupción del Timer marca el ritmo de las lecturas y la interrupción Externa marca el ritmo de los cruces por cero de la señal alterna. El problema es que la lectura del ADC provoca que la función llamada por la interrupción del Timer dure mucho más de lo que dura un ciclo, por lo que desborda y forma el lío.
¿Interrupción del ADC?, no sé si este micro la tiene, pero sería una buena opción. Lo miro. Gracias

No hace falta quedarse esperando.  Al comienzo del intervalo de 100uS lees el ADC y luego inicias otra conversión, que recién se leerá en el siguiente intervalo.
¿Y cómo se hace eso?, con la instrucción AnalogRead que es la que estoy usando no se puede.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re:Dimmer programable con control remoto
« Respuesta #20 en: 18 de Abril de 2023, 02:12:15 »
Visto en el enlace de Hackaday que ha publicado Picuino:

As far as I know, the SDK does not support non-blocking ADC operation. And since there are no register definitions for the ADCs in the official reference manual, the only way to get this to work would be by digging through the SDK assembly.

In short, as far as I know it's (more or less) impossible.


Si la solución pasa por utilizar assembler, paso.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re:Dimmer programable con control remoto
« Respuesta #21 en: 18 de Abril de 2023, 02:21:51 »
Más información, directamente en el SDK de Espressif:

https://www.espressif.com/sites/default/files/documentation/2c-esp8266_non_os_sdk_api_reference_en.pdf

Existe una función llamada system_adc_read_fast (página 13) que permite leer el ADC mucho más rápido pero:
- mientras se lee el ADC hay que desactivar las interrupciónes. No me serviría porque pierdo el sincronismo del dimmer.
- necesita apagar el Wifi, por lo que tampoco me sirve

Todos los caminos me llevan al ESP32  :?

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re:Dimmer programable con control remoto
« Respuesta #22 en: 18 de Abril de 2023, 03:32:58 »
Supongo que el ESP8266 no tiene DMA para el ADC. De lo contrario ya se habría hablado. Pero bueno. Lo dejo ahí por si acaso.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re:Dimmer programable con control remoto
« Respuesta #23 en: 18 de Abril de 2023, 04:19:21 »
Ojalá tuviera,  querido remi

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Dimmer programable con control remoto
« Respuesta #24 en: 18 de Abril de 2023, 06:41:44 »
Yo creo que puedes hacer una lectura del sensor 100 veces por segundo (en cada fin de ciclo) y debería ser suficiente para definir el PWM del siguiente ciclo.

Edito:
Por lo que he leído resulta difícil leer el ADC a bajo nivel con el ESP8266.
https://hackaday.io/page/7136-esp8266-adc-read-nonblocking

¿100 veces por segundo?, teniendo en cuenta que en cada segundo hay 100 semiciclos (a 50Hz) eso me daría sólo una lectura en cada semiciclo. No veo de qué manera puedo calcular la potencia con tan pocas muestras, pero si se puede hacer sería ideal.
Mi intención es leer 100 muestras en cada semiciclo (10.000 en un segundo) de manera que puedo ir sampleando con bastante resolución la forma de la curva, y a partir de ahí, calcular la potencia RMS.
No he leído ese artículo de hackaday pero lo miraré. Si finalmente es imposible acelerar el ADC del ESP8266, tendré que considerar cambiarme a un ESP32, aunque es una pena porque sería matar moscas a cañonazos.

Es verdad, no entendí bien para qué querías leer 100 muestras en un semiciclo.



Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re:Dimmer programable con control remoto
« Respuesta #25 en: 18 de Abril de 2023, 07:18:38 »
Vale, pues mantenía la esperanza de que supieras otra forma de hacerlo con menos muestras, jajaja. Vía cerrada.

He estado buscando algún sensor de corriente que devuelva la información por I2C o SPI, y así me ahorro tirar del ADC del ESP8266. Los hay pero son mucho más caros que la diferencia de precio entre ESP8266 y ESP32 (poco más de un euro) así que definitivamente migraré de micro, a ver consigo avanzar.

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:Dimmer programable con control remoto
« Respuesta #26 en: 18 de Abril de 2023, 10:15:50 »
¿Y puedes usar algún RTOs? Ahí ya no debes romper mucha cabeza al crear tareas cooperativas.
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re:Dimmer programable con control remoto
« Respuesta #27 en: 18 de Abril de 2023, 10:19:17 »
Sí, podría, pero para una tarea tan crítica en tiempo de ejecución no iba a conseguir mejora. Piensa que sólo el ADC ya se come casi todo el tiempo del micro; quedan pocos ciclos para hacer todo lo demás. Si hay que gestionar un RTOS, todavía peor.

Mi programa está bastante optimizado; las interrupciones ocupan muy poquito ya que sólo cambian estados de pines y reinician contadores. Es al meter el analogRead cuando todo se va a la mierda, y eso no me lo arregla un RTOS.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Dimmer programable con control remoto
« Respuesta #28 en: 18 de Abril de 2023, 11:26:46 »
Antes de cambiar de micro puedes hacerlo con 50 muestras por ciclo. Tendrás tiempo de sobra y así haces una prueba de concepto. No creo que haya tanta diferencia entre 50 y 100 muestras.