Autor Tema: DTMF ccs c  (Leído 3619 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re:DTMF ccs c
« Respuesta #15 en: 24 de Abril de 2023, 11:11:33 »
Claro, siempre es buena idea leer lo escrito y comprobar errores.

Desconectado Robert76

  • PIC24F
  • *****
  • Mensajes: 571
Re:DTMF ccs c
« Respuesta #16 en: 24 de Abril de 2023, 16:53:51 »
Cuándo tengo que guardar datos en la EEPROM, lo que hago es monitorear la tensión SIN  REGULAR de la fuente a través de un divisor resistivo, para acondicionarla al ADC.
Entonces cuándo la tensión cae un porcentaje crítico, se activa la rutina de Back-Up. y los datos se guardan en cuestión de milisegundos, antes de que la tensión regulada caiga. :mrgreen:

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:DTMF ccs c
« Respuesta #17 en: 24 de Abril de 2023, 17:09:06 »
Entonces cuándo la tensión cae un porcentaje crítico, se activa la rutina de Back-Up. y los datos se guardan en cuestión de milisegundos, antes de que la tensión regulada caiga. :mrgreen:

¿Y usas una batería o supercapacitor para taner un poco de energía antes del colapso o con los capacitores de comunes es suficiente?
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:DTMF ccs c
« Respuesta #18 en: 24 de Abril de 2023, 17:11:28 »
Cuándo tengo que guardar datos en la EEPROM, lo que hago es monitorear la tensión SIN  REGULAR de la fuente a través de un divisor resistivo, para acondicionarla al ADC.

Tal vez sólo el comparador analógico es suficiente en lugar de usar el ADC.
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado Robert76

  • PIC24F
  • *****
  • Mensajes: 571
Re:DTMF ccs c
« Respuesta #19 en: 24 de Abril de 2023, 22:24:33 »
En realidad luego del condensador de la fuente conecto un diodo y luego otro condensador que se dedica sólo a la alimentación del uP. Con sólo eso, sobra muchísimo tiempo para que el PIC almacene todo lo necesario.
Dije ADC, por dar un ejem. Pero cómodamente se puede hacer con el comparador interno o bien usando un op-amp externo y conectar a una entrada que dispare por interrupción.

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:DTMF ccs c
« Respuesta #20 en: 24 de Abril de 2023, 22:27:29 »
En realidad luego del condensador de la fuente conecto un diodo y luego otro condensador que se dedica sólo a la alimentación del uP. Con sólo eso, sobra muchísimo tiempo para que el PIC almacene todo lo necesario.
Dije ADC, por dar un ejem. Pero cómodamente se puede hacer con el comparador interno o bien usando un op-amp externo y conectar a una entrada que dispare por interrupción.

En algunos proyectos, yo he recurrido a un EERAM para salvaguardar la información ante una interrupción de la energía.

https://www.microchip.com/en-us/products/memory/serial-eeram
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado Robert76

  • PIC24F
  • *****
  • Mensajes: 571
Re:DTMF ccs c
« Respuesta #21 en: 24 de Abril de 2023, 23:06:43 »
Es una buena opción la EERAM. Nunca usé una como tal. Salvo la NVRAM, que incluyen los viejos RTC muy usados en los PCs 386.
Y la info está asegurada mientras la pila esté ok :D

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:DTMF ccs c
« Respuesta #22 en: 24 de Abril de 2023, 23:22:16 »
Es una buena opción la EERAM. Nunca usé una como tal. Salvo la NVRAM, que incluyen los viejos RTC muy usados en los PCs 386.
Y la info está asegurada mientras la pila esté ok :D

Las ocupo porque trabajo con microcontroladores PIC32 y no poseen una EEPROM.

También hay la opción de usar una zona de la memoria de programa (flash) para almacenar datos de usuario, pero me parece que no sería óptimo el proceso que mencionas de un capacitor de respaldo sólo para el microcontrolador y el ADC o Comparador "sintiendo" el estado de la red.

Generalmente hay muchas tareas o hilos que deben entrar en pausa para dar prioridad alta al proceso de almacenar la información.

Y es posible que, algún proceso tome más tiempo del necesario y cuando al fin se pueda proceder a salvaguardar la información, el capacitor ya no tenga suficiente voltaje.

Ahora claro, con un supercapacitor sería otra historia.

 
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado Robert76

  • PIC24F
  • *****
  • Mensajes: 571
Re:DTMF ccs c
« Respuesta #23 en: 25 de Abril de 2023, 06:44:39 »
En los proyectos que he hecho, y que he necesitado monitorear la red para saber cuándo salvaguardar,  activaba la alerta por interrupción. Por lo tanto NO hay procesos que demanden más tiempo del debido. Ya que he calculado el tiempo que demanda una escritura completa de datos en EEPROM, para conocer el valor del condensador de respaldo, en función del consumo de esa etapa.
Tengo proyectos que llevan más de 10 años funcionando con ese mecanismo, sin problemas. No entiendo porque dices que NO es óptimo, sin tener un esquema electrónico de como lo implementé y sin analizar el código que utilicé.
Está claro, que con el tiempo, los condensadores se degraden y posiblemente haya problemas.
Pero utilizar una EERAM también está condenado al tiempo de vida útil de una pila. Pero eso ya es otra historia.
« Última modificación: 25 de Abril de 2023, 06:49:56 por Robert76 »

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:DTMF ccs c
« Respuesta #24 en: 25 de Abril de 2023, 07:49:17 »
En los proyectos que he hecho, y que he necesitado monitorear la red para saber cuándo salvaguardar,  activaba la alerta por interrupción. Por lo tanto NO hay procesos que demanden más tiempo del debido. Ya que he calculado el tiempo que demanda una escritura completa de datos en EEPROM, para conocer el valor del condensador de respaldo, en función del consumo de esa etapa.
Tengo proyectos que llevan más de 10 años funcionando con ese mecanismo, sin problemas. No entiendo porque dices que NO es óptimo, sin tener un esquema electrónico de como lo implementé y sin analizar el código que utilicé.
Está claro, que con el tiempo, los condensadores se degraden y posiblemente haya problemas.
Pero utilizar una EERAM también está condenado al tiempo de vida útil de una pila. Pero eso ya es otra historia.

Hola, lamento el mal entendido,  me refería a mi caso en particular.

Al no tener una EEPROM interna, debería usar la FLASH, la cual no es tan sencillo acceder, se debe cumplir una serie de pasos para lograr escribir datos en ella.

También, como trabajo en procesos cooperativos, debería verificar primero que todas las tareas entren en pausa o reposo.

Y también al ser un MCU de 32 bits, generalmente suelen funcionar el CPU a altas velocidades (200MHz) y el consumo de energía es grande.

Todas estas razones, digo que en mi caso particular, posiblemente no me permitan seguir tu idea, sería de probarlo, tal vez sea funcional.

Por eso, para evitarme todo lo que expliqué, prefiero usar la EERAM, que básicamente es una RAM donde puedes escribir y leer información de manera rápida. El chip ese necesita tan solo un capacitor de 15 uF, y ante un corte de energía, el contenido de la RAM se guarda en la EEPROM de manera automática.

Al retornar la energía, también de manera automática, el contendió de la EERPOM regresa a la RAM.
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado Robert76

  • PIC24F
  • *****
  • Mensajes: 571
Re:DTMF ccs c
« Respuesta #25 en: 25 de Abril de 2023, 10:31:54 »
Ok, seguramente no se aplique a todo propósito.
Escribir 1 byte en una EEPROM puede llevar como máximo unos 4ms. A partir de ahí se calcula la constante RC del condensador, con 50% más de margen, sobra.
« Última modificación: 25 de Abril de 2023, 10:34:16 por Robert76 »

Desconectado mariacontenis

  • PIC16
  • ***
  • Mensajes: 114
Re:DTMF ccs c
« Respuesta #26 en: 25 de Abril de 2023, 20:49:29 »
Aquí de nuevo.

E probado el código físicamente y funciona (pero con un pero...), por ahora e dejado aun lado la parte de la eeprom por que recién me di cuenta de un detalle que sucedió probando físicamente.

Les comento que cuando envió las secuencias por ejemplo *1234# enciendo mi LED, mas cuando envió una secuencia incorrecta por ejemplo *12344 el pic se me queda bloqueado y ya no obedece a nada hasta que no lo reinicio. Pense en limpiar el buffer o aplicar quizás el watchdog para reiniciarlo, mas me gustaría saber su opinión como gente de mucha mas experiencia.


Código: C++
  1. if(contador>=6)
  2. {
  3. contador=0;
  4. if((Dig[0]==11)&&(Dig[1]==1)&&(Dig[2]==2)&&(Dig[3]==3)&&(Dig[4]==4)&&(Dig[5]==12)) { Led_verde    }       // * 1 2 3 4 #        
  5. if((Dig[0]==11)&&(Dig[1]==1)&&(Dig[2]==9)&&(Dig[3]==3)&&(Dig[4]==7)&&(Dig[5]==12)) { Led_naranja  }       // * 1 9 3 7 #        
  6. if((Dig[0]==11)&&(Dig[1]==4)&&(Dig[2]==8)&&(Dig[3]==6)&&(Dig[4]==2)&&(Dig[5]==12)) { Led_rojo     }       // * 4 8 6 2 #
  7. if((Dig[0]==11)&&(Dig[1]==2)&&(Dig[2]==6)&&(Dig[3]==8)&&(Dig[4]==4)&&(Dig[5]==12)) { Led_Apagados }       // * 2 6 8 4 #
  8.      
  9. else Dig[0]=0; Dig[1]=0; Dig[2]=0; Dig[3]=0; Dig[4]=0; Dig[5]=0;
  10. }

agregando ese else Dig[0]=0; Dig[1]=0; Dig[2]=0; Dig[3]=0; Dig[4]=0; Dig[5]=0;

o quizás este mal desde if(contador>=6) por que si envió una secuencia menor a 6 dígitos o mayor desde ahí tampoco se cumple la condición :?

Gracias por sus aportes, aprendo mucho de ustedes.

Por favor su ayuda...

« Última modificación: 25 de Abril de 2023, 20:54:48 por mariacontenis »

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:DTMF ccs c
« Respuesta #27 en: 25 de Abril de 2023, 22:32:53 »
Aquí de nuevo.

E probado el código físicamente y funciona (pero con un pero...), por ahora e dejado aun lado la parte de la eeprom por que recién me di cuenta de un detalle que sucedió probando físicamente.

Les comento que cuando envió las secuencias por ejemplo *1234# enciendo mi LED, mas cuando envió una secuencia incorrecta por ejemplo *12344 el pic se me queda bloqueado y ya no obedece a nada hasta que no lo reinicio. Pense en limpiar el buffer o aplicar quizás el watchdog para reiniciarlo, mas me gustaría saber su opinión como gente de mucha mas experiencia.


Código: C++
  1. if(contador>=6)
  2. {
  3. contador=0;
  4. if((Dig[0]==11)&&(Dig[1]==1)&&(Dig[2]==2)&&(Dig[3]==3)&&(Dig[4]==4)&&(Dig[5]==12)) { Led_verde    }       // * 1 2 3 4 #        
  5. if((Dig[0]==11)&&(Dig[1]==1)&&(Dig[2]==9)&&(Dig[3]==3)&&(Dig[4]==7)&&(Dig[5]==12)) { Led_naranja  }       // * 1 9 3 7 #        
  6. if((Dig[0]==11)&&(Dig[1]==4)&&(Dig[2]==8)&&(Dig[3]==6)&&(Dig[4]==2)&&(Dig[5]==12)) { Led_rojo     }       // * 4 8 6 2 #
  7. if((Dig[0]==11)&&(Dig[1]==2)&&(Dig[2]==6)&&(Dig[3]==8)&&(Dig[4]==4)&&(Dig[5]==12)) { Led_Apagados }       // * 2 6 8 4 #
  8.      
  9. else Dig[0]=0; Dig[1]=0; Dig[2]=0; Dig[3]=0; Dig[4]=0; Dig[5]=0;
  10. }

agregando ese else Dig[0]=0; Dig[1]=0; Dig[2]=0; Dig[3]=0; Dig[4]=0; Dig[5]=0;

o quizás este mal desde if(contador>=6) por que si envió una secuencia menor a 6 dígitos o mayor desde ahí tampoco se cumple la condición :?

Gracias por sus aportes, aprendo mucho de ustedes.

Por favor su ayuda...

¿Y agregando ese else  (else Dig[0]=0; Dig[1]=0; Dig[2]=0; Dig[3]=0; Dig[4]=0; Dig[5]=0;), también se cuelga el micro?

Porque en teoría, la condición *12344, no cumpliría ningún if, y el contador de programa debería salir del if(contador>=6).
« Última modificación: 25 de Abril de 2023, 22:36:01 por DominusDRR »
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado mariacontenis

  • PIC16
  • ***
  • Mensajes: 114
Re:DTMF ccs c
« Respuesta #28 en: 25 de Abril de 2023, 22:38:49 »

¿Y agregando ese else  (else Dig[0]=0; Dig[1]=0; Dig[2]=0; Dig[3]=0; Dig[4]=0; Dig[5]=0;), también se cuelga el micro?


No e probado aún. Antes quince saber su opinión.

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:DTMF ccs c
« Respuesta #29 en: 25 de Abril de 2023, 22:42:45 »

¿Y agregando ese else  (else Dig[0]=0; Dig[1]=0; Dig[2]=0; Dig[3]=0; Dig[4]=0; Dig[5]=0;), también se cuelga el micro?


No e probado aún. Antes quince saber su opinión.

En teoría no sería necesario, pero parece un error del compilador. Simulando o depurando se podría avanzar paso a paso en el código para determinar el porque se cuelga.

También analizando el desensamblado se podría descartar un error o no del compilador.
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32


 

anything