Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Hola a todos,
Estoy creando un programa con el compilador CCS para el microcontrolador PIC18F4550 en el que quiero hacer una lectura del puerto analógico 0 (RA0) y hacer una lectura del la bandera del mismo para comporbar cuando ha acabado. Estoy haciendo debug con un ICD2 y veo que los registros del ADRESH y ADRESL nunca cambian. Mi código es el siguiente:
#byte PIR1 = 0xF9E
#bit ADIF = PIR1.5
void main(void) {
set_tris_a(0xFF); // todo entradas
set_tris_b(0xFF); // todo entradas
set_tris_c(0b10111111); // todo entradas menos TX
set_tris_d(0x00); // todo salidas
set_tris_e(0xFF); // todo entradas
ADIF = false;
//ENABLE_INTERRUPTS(GLOBAL);
//ENABLE_INTERRUPTS(INT_AD);
SETUP_ADC_PORTS(AN0_TO_AN7);
SETUP_ADC(ADC_CLOCK_DIV_64);
SET_ADC_CHANNEL(0);
READ_ADC(ADC_START_AND_READ);
while(ADIF){
if (read_adc() < 100){
output_bit( PIN_D2, 0);
}else{
output_bit( PIN_D2, 1);
}
ADIF = false;
READ_ADC(ADC_READ_ONLY);
}
}
Que es lo que estoy haciendo mal, podeis darme alguna idea??
Muchas gracias a todos de antemano!
Hola Joviwap.
La semana pasada empecé con lecturas analógicas con un PIC18F2550 y hasta ahora no he tenido problema (una vez superadas las primeras 10 horas de quebraderos de cabeza), ademas uso VRef- VRef+ y tengo que cambiar de canal ya que leo dos sensores alternos constantemente....
En el código lo que veo es que te sales del bucle en cuanto ADIF sea false... lo que no se es por que lo usas ya que usando read_adc() el programa no gestiona nada hasta terminar la lectura lo que no da pié a analizar si ha acabado ya que "siempre" ha acabado...
¿Necesitas controlar eso?
furri.