Cordial Saludo
Hoy os escribo por que estoy haciendo unas pruebas con un programador Pickit3 el cual adquirí por un amigo
,
el ejemplo que realizo es una lectura análoga de tres canales y los guardo en distintas variables (
dato0,dato1,dato2),
Cuando realizo el debug paso a paso , puede ver como cambian los bits de los registros asociados al ADCON, la cosa esta que
cuando el valor que queda en
ADRESH, lo paso a
dato n pero no queda guardado
en la variable, el código implementado es el siguiente :
#include "fuses.h"
#include <stdio.h>
#include <adc.h>
#include <p18f4550.h>
#include <delays.h>
unsigned int dato0,dato1,dato2;
#define Time Delay10KTCYx(60)
//Variables a usar Globales
void main(void)
{
TRISA=0XFF; //PORTA INPUTS
TRISB=0xFF; //PORTB OUTPUTS
TRISC=0X00;
TRISD=0x00; //PORTB OUTPUTS
PORTC=0x00;
PORTD=0x00;
PORTB=0x00; //CLEAN PORTB
//ADC Configs
ADCON1=0b00001011; // Canales AN0,AN1,AN2,AN3 ADCON1:|0|0|VSS(0)|VDD(0)|AN3(1)|AN2(0)|AN1(1)|AN0(1)|
// VSS,VDD 5v / 2^8 = 20mV por numero osea que para 100 = 20mV*1.953125~1.96
ADCON2=0b00011010; // ADCON2: ADFM Left justified(0)|-|6 TAD (0)|6 TAD(1)|6 TAD (1)|FOSC32(0)|FOSC32(1)|FOSC32(0)|
/* . . .ADRESH . . : . . ADRESL. . .
7 6 5 4 3 2 1 0 : 7 6 5 4 3 2 1 0
X X X X X X X X . X X . . . . . . <-Left Justified
. . . . . . X X . X X X X X X X X <-Right Justified
*/
ADCON0=0b00000000; // |-|-|CHS3(0)|CHS2(0)| CHS1 (0)| CHS0(0)| GO/DONE | ADON (0) AD DISABLED.
//when adon=1 , go_done 1 = A/D conversion in progress 0 = A/D Idle
ADCON0bits.ADON = 0x01; //Enable A/D module
while(1)
{
ADCON0bits.ADON = 0x01;//Enable A/D module
SetChanADC(ADC_CH0); //Channel 0
Delay10TCYx(1);
ConvertADC();
while(BusyADC()==1){}
dato0=ReadADC(); //I'm reading saving data here, I can see the result in ADRESH, but It can't save the value into the variable O_o !
Delay10TCYx(1);
SetChanADC(ADC_CH1); //Seleciono canal.
Delay10TCYx(1);
ConvertADC();
while(BusyADC()==1){}
dato1=ReadADC();
Delay10TCYx(1);
SetChanADC(ADC_CH2); //Seleciono canal.
Delay10TCYx(1);
ConvertADC();
while(BusyADC()==1){}
dato2=ReadADC();
Delay10TCYx(1);
}
}
Puede alguien ayudarme a revisar este problema
, pues no se por que no quedan almacenados los valores de la conversion adc
realizare un vídeo para ver si me pueden ayudar con esta situación de duda.
El video lo he subido en la siguiente url
https://www.youtube.com/watch?v=mowQaq5pvz4