Hola huntergti
anoche revisé tu programa, aquí van mis comentarios:
- está bien si quieres usar asm incrustado en c, (es la libertad que ofrece el compilador) pero no es necesario en el ejemplo. Según veo tus requerimientos son los siguientes:
// justif. derecha, Tadq=2Tad, clock conversión osc RC
// Vref- = Vss, Vref+ = Vdd, AN0 analog resto digital
// selección AN0
-justificación a la derecha nop, es justificación a la izquierda para 8 bits, es decir, ADFM=0 y se hace con la directiva #DEVICE ADC=8
- las Vref y configuración del canal lo hace: setup_adc_ports( AN0 || VSS_VDD );
- el reloj de conversión lo hace: setup_adc( ADC_CLOCK_INTERNAL );
- la selección del canal lo hace: set_adc_channel( 0 );
como podras notar es lo mismo que el ejemplo que colgué mas arriba, ahora veamos su listado en asm
tanto adcon0 como adcon1 estan corregidos, falta cambiar el tiempo de adquisición a 2Tad (que no se como hacerlo en c entonces hay que irse a asm)
el programa queda:
#include <18f4550.h>
#fuses XTPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,NOVREGEN,NOPBADEN
#use delay(clock=48000000)
#byte ADCON2 = 0xFC0
void main() {
int value;
set_tris_b(0);
setup_adc_ports( AN0 || VSS_VDD );
setup_adc( ADC_CLOCK_INTERNAL );
set_adc_channel( 0 );
#asm
BSF ADCON2, 3 //ACQT0
#endasm
while(TRUE){
delay_us(30);
value = Read_ADC();
output_b(value);
value=0;
}
}
hay una cosa que hay que aclarar, a lo mejor ya lo sabes, pero por si las moscas
al justificar a la izquierda desplazas 8 posiciones los 10 bits del CAD, entonces tomas los 8 MSB y el cálculo es como se saca para un CAD de 8 bits, es decir, para este programa 5/255*value
ejemplo, en los estimulos usé
A0
AA
3FF
estos son resultados de 10 bits
A0*5/1023 = 0,782V
AA*5/1023 = 0,83V
3FF*5/1023 = 5V
el resultado en mplab-sim para value = Read_ADC()
0x28 *5/255 = 0,784V
2A *5/255 = 0,823V
FF *5/255 = 5V