amigosssss.... luego de leer un post de suky sobre ADC quise hacer una prueba con el ADC del 18F4550,... el circuito que monte es: alimentacion general 3.3v, 18F4550, con un cristal de 20Mhz, memoria Ramtrom
FM24V10, se interconecta mediante bus I2C y se caracteriza por "no delay write"
y luego una micro SD en el bus SPI.... la señal alterna ingresa y se acopla a un capacitor, luego le sumo un nivel de continua igual a la mitad de la maxima excursion... y de aqui derecho al AN0 del ADC interno del micro.-
la idea es ingresar primero una señal de 50Hz y tratar de digitalizarla, obteniendo la mayor cantidad muestras por segundos posible, almacenando cada dato de 10bits en la ramtrom y luego de finalizar la adquisicion, se parsarian los datos de la ramtrom a la micro SD para su futuro analisis.... o lo que sea que se quieran hacer con los datos...
pero no se que ocurre.... por ejemplo.... esta es una señal de 50Hz con 1v de pìco aproximadamente.-
la configuracion del micro es la siguiente:
ADCON1=0b00001110; // habilita solamente AN0;
ADCON2=0b10000000; // configura ADC, 0TaD y Fosc/2
y la rutina de conversion y almacenamiento es en la ramtrom es la siguiente:
I2C_Init(1000000); // configura la velocidad del reloj bus I2C
Direccion=0; // inicializa posicion d mmoria flash
CS_RAMTROM=0; // habilita memoria serial
///// inicializa el bus i2c y ESCRITURA EN MEMORIA ///////////////////
for (i=1;i<=200;i++)
{
buffer = ADC_Read (0);
ADC_MSB0 = Hi(buffer);
ADC_LSB0 = Lo(buffer);
ADD_H = Hi(Direccion);
ADD_L = Lo(Direccion);
I2C_Start();
I2C_Wr(0b10100000); // se direciona el dispositivo, modo escritura
I2C_Wr(ADD_H); // se manda primera parte de la direccion de memoria pagina 1
I2C_Wr(ADD_L); // se manda segunda parte de la direccion de memoria pagina1
I2C_Wr(ADC_MSB0); // graba MSB canal 0
I2C_Wr(ADC_LSB0); // graba LSB canal 0
I2C_Stop();
Direccion=(Direccion+2); //incrementa x2 posicion d memoria
}
la secuencia es simple.... y como resultado luego de trasferir todos los datos a la Micro SD obtengo ésto...
como se ve, aproximadamente en 200 muestras tomadas, entraron aproximadamente 3 periodos de senoidal de 50Hz, es decir, 66.6 muestras por cada periodo completo, y el tiempo entre muestra y muestra es de aproximadamente 300.3 uS.... lo cual es muy lento para obtener una buena definicion de la curva.
otra cosa extraña es ese salto que se ve periodicamente.... la verdad sin palabras...
Acá va otra prueba , cambiando la configuracion del ADC...
ADCON1=0b00001110; // habilita solamente AN0;
ADCON2=0b10110110; // configura ADC, 16TaD y Fosc/64
y la le deje la misma rutina de conversion... lo resultados son los siguientes....
como se vé.... se tomaron nuevamente 200 muestras.... pero el salto extraño se hizo mas notorio y la cantidad e muestras por cada perioro sigue siendo de 66.6 muetras....
alguien me puede orientar en que me estoy confundiendo?
saludos a todos!
German