• Lunes 23 de Diciembre de 2024, 03:56

Autor Tema:  Conversor Ad  (Leído 6228 veces)

Ale_la_maga

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Conversor Ad
« en: Viernes 24 de Noviembre de 2006, 22:12 »
0
Hola todos  :hola:

Estoy portando mis rutinas de pic´s a la plataforma del Freescale y me encuentro con un problema curioso.
Al pasar las rutinas del conversor A/D de un asembler al otro no hay problemas, pero al querer pasar estas rutinas al CodeWarrior me encuentro que las mediciones son muy inestables, aclaro que con la misma electrónica y el mismo micro un JK3, si el código es asembler funciona perfecto pero si el código es en C la cosa se complica, alguien sabe algo de esto, a que se debe?
Como se soluciona?

   Gracias, saludos para todos.
     
         Alejandra

Daniel´s

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re: Conversor Ad
« Respuesta #1 en: Lunes 27 de Noviembre de 2006, 13:19 »
0
Hola Alejandra

Mmmmmm no entiendo bien, como estas tomando las muestras, como fijas el tiempo de muestras, usas interrup, o determinas el tiempo entre muestras de otra forma. En todo caso te recomiendo no hacer una muestra y esperar n tiempo y tomar otra muestra. Lo ideal es que tomes por ejempo 15 muestras seguidas y promedialas, y usá eso como dato, los motivos de los problemas que comentas pueden ser varios, desde ruidos, generalmente no ponemos los condensadores supresores junto al micro en la alimentación o no alimentamos todo con una fuente medianamente buena, te recomiendo un artículo muy interesante sobre esto de repente el problema pasa por ahí solo que no entiendo porque en assembler funciona bien:
http://www.firtec.com.ar/downloader/index....f74d09&start=20

Saludos  :hola:
   Daniel

Ale_la_maga

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: Conversor Ad
« Respuesta #2 en: Martes 28 de Noviembre de 2006, 12:20 »
0
Gracias Daniel

Voy a cambiar de estrategia y probar eso que comentas, luego te cueton  :D

  Saludos  :hola:

     Alejandra

Ale_la_maga

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: Conversor Ad
« Respuesta #3 en: Miércoles 29 de Noviembre de 2006, 14:11 »
0
Hola de Nuevo

Bueno, hechas las pruebas los resultados son los siguientes:
Si es verdad mejora pero no llega a ser lo perfecto que es en el asembler.
Sigo teniendo una inestabilidad en el último dígito. Si quiero muestrear al mucha velocidad el ultimo digito es "imparable"  :angry:

En fin sigo con las pruebas.

     Saludos  :hola:

           Alejandra

Daniel´s

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re: Conversor Ad
« Respuesta #4 en: Miércoles 29 de Noviembre de 2006, 14:32 »
0
Hola Ale.
Mirá te paso el código que maneja un conversor, toma 100 muestras consecutivas las promedia y luego se fija si el dato es igual al enterior si es igual no hace nada si es distinto lo transmite al PC via RS232.
Lo interesante de esto Alejandra es que opera con un cristal de 32Mhz y la velocidad de muestra es del orden del los microsegundos ajustadas por el timer, y te aseguro que es perfecto no hay inestabilidad ninguna y lo unico que tiene agregado en la electrónica es un condensador en la entrada del conversor de .1 Uf que no me afecta a la alterna que quiero medir pues su frecuencia no se ve afectada por este valor de capacitor.
Si miras el codigo verás que aqui hay un ejemplo de algunas cosas que son difíciles de hacer en asembler clásico y mucho mas en los pic´s clásicos cuyas funciones matemáticas son muy elementales.

******************************************************      
*  SERVICIO DE INTERRUPCIÓN DEL MÓDULO DEL TIMER
********************************************************/
#pragma TRAP_PROC

TIMER(){

do{
   
 while(!(ADSCR & 0x80));  // Mido

   M0 = M0 + ADR;  //Acumulo 100 medidas
 
   muestras++;
 
}while(muestras <=0x63); // Tomo 100 muestras
 
 conversion = M0/0x64; // Promedio
 
 if(conversion != M1){ // Es igual al antenrior??
 
 
 SCDR = conversion;      
 while(!(SCS1 & 0x80));   // Transmito
 
 M1 = conversion;  //Actualizo
 
 }
 M0 = 0;
 muestras = 0;
 
 T1SC ^= 0X80; // Borra la bandera del timer

}

Suerte!!!
   Luego me comentas

      Daniel

borgo

  • Miembro activo
  • **
  • Mensajes: 60
    • Ver Perfil
Re: Conversor Ad
« Respuesta #5 en: Miércoles 29 de Noviembre de 2006, 16:14 »
0
Hola Alejandra y Daniel

Guaaaaaaaaa!!!  :o

Me descolocaron  :whistling:  muy bueno el ejemplo solo me surgen unas preguntas de metido nomas.    :D
Si todas las 100 medidas fueran 255, 255 * 100= 25500  :unsure:
Supongo que M0 en un int ???? o no???
Digo para poder guardar una variable de ese tamaño.
Y otra, el código que resulta de esto que tamaño tiene si lo comparo con assembler?
Y .......... me gustaría manejar el C asi  :whistling:  pueden indicarme algún libro, link, lo que sea ya que veo que estoy medio lejos de plantear algo asi  :(

Saludos y muy bueno  :hola:

   Angel

Ale_la_maga

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: Conversor Ad
« Respuesta #6 en: Miércoles 29 de Noviembre de 2006, 19:01 »
0
Holis de nuevo.

Impecable Daniel funciona perfecto lo probé en un GP32 ESPECTACULAR!!! es mas como no me convencia saco las 100 muestras y hago que mida solo una y si si si no hay nada que hacer esa es la solución, queda perfecto.
Gracias Dany por la idea realmente muy buena y realmente muy simple.
Angel te paso como declare las variables en el GP32:

unsigned int M0 = 0;
unsigned char M1 =0;
unsigned conversion = 0;
unsigned char muestras = 0;

Asi funciona perfecto, buena idea la de enviar solo cuando el dato es distinto asi no se usa constantemente el puerto.
Respondiendo un poco tu pregunta Angel, nada el assembler que resullta de esto es practicamente como si lo escribis en asembler realmente me tiene muy metida esto del C para micros.
Ahora digo, como puedo hacer algo asi con el PIC16F873 tengo mucho codigo con ese micro y realmente poder portar una rutina asi seria muy bueno, muy eficiente pero lo veo dificil en ese micro si quizas en un 18Fxx no se si lo que digo es correcto.
Solo una reflexión final, me parece a mi o estos lenguajes se perfilan como una necesidad en el hardware futuro y no com una elección, será que es asi?

Gracias de nuevo y un abrazo  :hola:

     Alejandra

Huguen_aus_Tirol

  • Miembro MUY activo
  • ***
  • Mensajes: 318
    • Ver Perfil
    • http://www.erhard-automation.co.cc
Re: Conversor Ad
« Respuesta #7 en: Jueves 30 de Noviembre de 2006, 06:38 »
0
Hola! Bueno, estoy usando un 18F, pero parte de la aplicación es similar a lo que quieres hacer, Ale... Aun no esta lista la aplicación, pero sí lo que es mediciones analógicas.
Mido tensión y corriente de linea (220Vac), para luego calcular demás valores. Hago varias muestras y acumulo el cuadrado de las muestras, usando un timer; la cantidad de muestras está sincronizada con la frecuencia de la red. Luego promedio, y la raíz cuadrada del promedio es mi valor rms de lo que medí.
Bueno, la cuestión es que en C me resultó muy simple hacer todo esto (y muy rápido!) No se si se podrá migrar a alguna otra marca.
Más adelante pienso postear algo de esta aplicación...
Aunque no uso un Motorola, pensé hacer el comentario igual.

Saludos!

Ale_la_maga

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: Conversor Ad
« Respuesta #8 en: Jueves 30 de Noviembre de 2006, 12:04 »
0
Hola Huguen  :hola:

Gracias por participar en la charla esta muy bueno porque de repente no se encuentran muchas personas tabajando en C. Te cuento que pense seguir con pic´s sobre la línea 18F pero me tentaron los Motorola. Y bueno aca estoy, te hago una consulta, que compilador estas usando en PIC´s, he visto que la sintaxis del Hi Tech C2C etc etc no es la misma del ansi C clasico, como que tienen algunas diferencias.
Y estoy totalmente de acuerdo con vos respecto que se crean aplicaciones mucho mas facil que en assembler siempre y cuando entiendas C claro  ;) .

Gracias por tu aporte Huguen

Un cordial saludo
     
      Alejandra

Huguen_aus_Tirol

  • Miembro MUY activo
  • ***
  • Mensajes: 318
    • Ver Perfil
    • http://www.erhard-automation.co.cc
Re: Conversor Ad
« Respuesta #9 en: Jueves 30 de Noviembre de 2006, 13:03 »
0
Hola!
Para los PIC uso el PCWH, version 4.013; justamente aqui en el foro dejaron un link para bajarlo, no se si seguira...
Es cierto, en C las cosas van bastante mas rapido; de todas formas me queda bastante por aprender de este lenguage. Consegui algo de literatura en la red, pero no es muy buena que digamos. Lo mejor es ir probando ;)
Varias veces estuve tentado en probar Motorola, pero por ahora estoy algo justo de tiempo. Ademas, parece complicado encontrar informacion, o mejor dicho herramientas, para estos micros... No se que compilador (C o asm), que programador, en fin...
Por el momento me alcanzan los PIC, y creo que antes voy a incursionar en el mundo de los dsPIC. Ya veremos que resulta!

Bueno, saludos :hola:

Ale_la_maga

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: Conversor Ad
« Respuesta #10 en: Jueves 30 de Noviembre de 2006, 13:27 »
0
Hola de nuevo

Uyyy que bueno eso de bajar el PCWH voy a ver si lo encuentro.
Claro sabes que justamente por eso me meti en el tema del C para incursionar en el tema de los DSP y muy acertado lo que decis sobre que por ahora los pic´s te alcanzan creo que de eso se trata de trabajar ya sea PIC motorola o lo que sea.
En lo personal sabes que me desencanto de los pic´s, el que haya tantas diferencias entre un 18Fxx y por ejemplo un 16F8xx, es como empezar de nuevo mas o menos, quizas vos no lo notas porque vos ya estas programando los 18Fxx
pero para muchos será un cambio duro, en contrapartida por ejemplo para un 908AP32 no hay casi nada en ejemplos y ayudas, pero si buscas algo que tiene 30 años y fué escrito para el 705 funciona igual!!! es cosa de ajustar algunas cosas y nada mas.  Pero en fin es cosa de costumbres, necesidades, y soluciones, todas las platadormas son buenas y si logro bajar el entorno de C para pic´s seguramente te estaré molestando con alguna consulta  :whistling:

Saludos  :hola:

  Alejandra

Aristides Alvarez

  • Miembro MUY activo
  • ***
  • Mensajes: 111
    • Ver Perfil
    • http://www.todomicrostamp.com/parallax_argentina
Re: Conversor Ad
« Respuesta #11 en: Jueves 14 de Diciembre de 2006, 20:05 »
0
Hola a todos, he seguido atentamente la conversación, me interesaron varios temas; al de tomar muestras de una tensión alterna, lo solucioné con un puente de diodos y un capacitor en paralelo, antes del ADC, en otro caso, para tomar el valor de una tensión dada por un potenciómetro ubicado en un servo hidráulico, a muchos metros del  microcontrolador, utilicé una R en serie con el PIN y un C a masa desde el mimo PIN.

Con respecto a nuevas tendencias en los microcontroladores, estoy estudiando el "Propeller", un nuevo concepto en micros (en realidad son 8 que trabajan dentro del mismo chip), entre lo destacable; no hacen falta interrupciones (multifunción), clock 80 MHZ, variables LONG (32 bits), idioma "Spin" (bastante entendible).

Invitación, si alguno de ustedes viene a MDQ en algún momento y quieren verlo funcionando, me avisan así podemos combinar.
“La experiencia sólo puede comenzar..... cuando termine la experimentación"

Un saludo, Aristides Alvarez,
Consultor de Parallax Inc. http],
[url=http://www.microsparallax.com.ar]http] ,
info@microsparallax.com.ar ,
TE (0223) 474 5058, CEL 155 63 50 58
Mar del Plata, Argentina.

Huguen_aus_Tirol

  • Miembro MUY activo
  • ***
  • Mensajes: 318
    • Ver Perfil
    • http://www.erhard-automation.co.cc
Re: Conversor Ad
« Respuesta #12 en: Jueves 14 de Diciembre de 2006, 21:53 »
0
Hola!
Como dice Aristides, podemos usar un puente y un rectificador para medir tensiones alternas; pero eso nos sirve si suponemos algunas cosas, y depende de la aplicación. Primero debemos tener en cuenta la tensión que cae en los diodos; existen rectificadores usando operacionales. Segundo, teniendo en cuenta que nuestra impedancia tiene que ser elevada, un capacitor nos puede jugar en contra.
En mi aplicación necesito medir el valor rms, es decir que tengo que tomar varias muestras de la señal alterna y luego hacer uso de unas fórmulas... Me dio algo de trabajo, más en la parte analógica, pero funciona!
Ya que estamos en el tema, para reducir la tensión de línea a valores "saludables" para el micro, me valgo de un pequeño trafo. Vi aplicaciones donde no hay aislación, pero no me atrae la idea por el tema seguridad. El problema es que el trafo me introduce un error (desfasaje) al medir el factor de potencia, pero es constante asi que se puede minimizar en programa; otro problema es el tamaño, este es pequeño, pero ocupa su espacio...
Comentario; en cuanto a medir a distancia, lo mejor es usar una señal de corriente, lo tipico es 4 a 20mA (por debajo de 4mA nos sirve para saber si se interrumpió la línea). Usamos este sistema en sondas de nivel de agua, para transmitir a la turbina el nivel del agua a la entrada o toma, a veces son distancias del orden de 1000m, y funciona de maravillas... hasta que se viene una tormenta! :P (lo que me resulta rentable... :D )
Bueno, disculpen que les aburra...

Saludos a todos