Programación Específica > Microcontroladores MOTOROLA

 Conversor Ad

(1/3) > >>

Ale_la_maga:
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:
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:
Gracias Daniel

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

  Saludos  :hola:

     Alejandra

Ale_la_maga:
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:
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

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa