Gracias por contestar!
la verdad es que como siempre programé en C no conozco como consultar los valores de adcon
como envidio sanamente a la gente que programa en assembler
respecto de los 5 volts a la entrada del A0.. si tengo una impedancia interna de 10k , por que habría de pasarse de corriente ? 5v/10kohm = 0.5 mA
coloco el programa por si alguien quiere ojearlo...
este es el archivo .C
include "C:\Documents and Settings\clo\Escritorio\voltimetro penta ok\voltimetro.h"
#ZERO_RAM
void main()
{
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_INTERNAL);
///setup_adc(ADC_CLOCK_DIV_2);
///setup_psp(PSP_DISABLED);
///setup_spi(FALSE);
///setup_wdt(WDT_OFF);
///setup_timer_0(RTCC_INTERNAL);
///setup_timer_1(T1_DISABLED);
///setup_timer_2(T2_DISABLED,0,1);
///setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
///set_adc_channel(0);
porta = 0b00000000 ; trisa = 0b11100000 ; //aqui A0 esta declarado como entrada
portb = 0b00000000 ; trisb = 0b00000000 ;
portc = 0b00000000 ; trisc = 0b00000000 ;
portd = 0b00000000 ; trisd = 0b00000000 ;
porte = 0b00000000 ; trise = 0b00000000 ;
while (true)
{
int x;
set_adc_channel(0);delay_us ( 50 ) ; //esta es una redundancia ( elegir el chanel permanentemente)que la coloqué por las dudas...
x ++ ;
if ( x == 50 ) x = 0 ;
if ( x == 5 ) //con esto elijo el momento en que quiero que tome el valor ( frec de muestreo)
{
volt = read_adc () ; delay_us ( 50 ) ; //uso un valor de 1000 como maximo para limitar el int16 que es volt
if ( volt > 999 ) volt = 999 ;
}
{
unidad = volt/100 ;
decena = (volt/10 )-(unidad*10 ) ;
centena = volt - ( unidad* 100 ) - ( decena * 10 ) ;
}
//aqui tuve que desarrollar las funciones ya que esta version de ccs no me deja colocar el nombre e invocarla
{
if ( unidad == 0 ) { null ;cero ;}
else if ( unidad == 1 ) { null ;uno ;}
else if ( unidad == 2 ) { null ;dos ;}
else if ( unidad == 3 ) { null ;tres ;}
else if ( unidad == 4 ) { null ;cuatro ;}
else if ( unidad == 5 ) { null ;cinco ;}
else if ( unidad == 6 ) { null ;seis ;}
else if ( unidad == 7 ) { null ;siete ;}
else if ( unidad == 8 ) { null ;ocho ;}
else if ( unidad == 9 ) { null ;nueve ;}
}
on_uni = 1; delay_ms ( 2) ;
on_uni = 0 ;
{
if ( decena == 0 ) { null ;cero ;}
else if ( decena == 1 ) { null ;uno ;}
else if ( decena == 2 ) { null ;dos ;}
else if ( decena == 3 ) { null ;tres ;}
else if ( decena == 4 ) { null ;cuatro ;}
else if ( decena == 5 ) { null ;cinco ;}
else if ( decena == 6 ) { null ;seis ;}
else if ( decena == 7 ) { null ;siete ;}
else if ( decena == 8 ) { null ;ocho ;}
else if ( decena == 9 ) { null ;nueve ;}
};
on_dec = 1 ; delay_ms ( 2 ) ;
on_dec = 0 ;
{
if ( centena == 0 ) { null ;cero ;}
else if ( centena == 1 ) { null ;uno ;}
else if ( centena == 2 ) { null ;dos ;}
else if ( centena == 3 ) { null ;tres ;}
else if ( centena == 4 ) { null ;cuatro ;}
else if ( centena == 5 ) { null ;cinco ;}
else if ( centena == 6 ) { null ;seis ;}
else if ( centena == 7 ) { null ;siete ;}
else if ( centena == 8 ) { null ;ocho ;}
else if ( centena == 9 ) { null ;nueve ;}
}
on_cent = 1 ; delay_ms ( 2 ) ;
on_cent = 0 ;
///printf ( "Volt es:%lu\n\n\r" , volt ) ; delay_ms ( 500 ) ;
///printf ( "unidad es:%lu\n\r" , unidad ) ; delay_ms ( 500 ) ;
///printf ( "decena es:%lu\n\r" , decena ) ; delay_ms ( 500 ) ;
///printf ( "centena es:%lu\n\r" , centena ) ; delay_ms ( 500 ) ;
///printf ( "metros es:%lu,%lu%lu\n\n\n\n\r" , unidad,decena,centena ) ; delay_ms ( 2000 ) ;
}
}
y este es el archivo .h
include <18F452.h>
#device adc=10
#fuses NOWDT,WDT128,HS, NOPROTECT, NOOSCSEN, NOBROWNOUT, BORV20, PUT, NOSTVREN, NODEBUG, NOLVP, NOWRT, NOWRTD, NOWRTB, NOWRTC, NOCPD, NOCPB, NOEBTR, NOEBTRB
#use delay(crystal= 10000000) //lo cambié por las dudas ...nada
///#use delay(clock=10000000)
///#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#include "ini18Fx.h"
#ZERO_RAM
int8 x ;
float mt ;
int16 volt , unidad , decena , centena ;
#bit a = portd.7
#bit b = portb.1
#bit c = portb.2
#bit d = portb.3
#bit e = portb.4
#bit f = portb.5
#bit g = portd.6
#bit on_uni = portc.0 // port c0 c1 y c2 son los multiplexores del display
#bit on_dec = portc.1
#bit on_cent = portc.2
//el decimal va fijo
#define cero a = b = g = f = e = c = 1
#define uno b = g = 1
#define dos a = b = d = f = e = 1
#define tres a = b = d = g = f = 1
#define cuatro c = d = b = g = 1
#define cinco a = c = d = g = f = 1
#define seis a = c = d = g = f = e = 1
#define siete a = b = g = 1
#define ocho a = b = g = f = e = c = d = 1
#define nueve a = b = g = d = c = 1
#define null a = b = g = f = e = c = d = 0
void unid ( ) ;
void decen ( ) ;
void cent ( ) ;
void convert ( ) ;
unid ()
{
if ( unidad == 0 ) { null ;cero ;}
else if ( unidad == 1 ) { null ;uno ;}
else if ( unidad == 2 ) { null ;dos ;}
else if ( unidad == 3 ) { null ;tres ;}
else if ( unidad == 4 ) { null ;cuatro ;}
else if ( unidad == 5 ) { null ;cinco ;}
else if ( unidad == 6 ) { null ;seis ;}
else if ( unidad == 7 ) { null ;siete ;}
else if ( unidad == 8 ) { null ;ocho ;}
else if ( unidad == 9 ) { null ;nueve ;}
}
decen ()
{
if ( decena == 0 ) { null ;cero ;}
else if ( decena == 1 ) { null ;uno ;}
else if ( decena == 2 ) { null ;dos ;}
else if ( decena == 3 ) { null ;tres ;}
else if ( decena == 4 ) { null ;cuatro ;}
else if ( decena == 5 ) { null ;cinco ;}
else if ( decena == 6 ) { null ;seis ;}
else if ( decena == 7 ) { null ;siete ;}
else if ( decena == 8 ) { null ;ocho ;}
else if ( decena == 9 ) { null ;nueve ;}
}
cent ()
{
if ( centena == 0 ) { null ;cero ;}
else if ( centena == 1 ) { null ;uno ;}
else if ( centena == 2 ) { null ;dos ;}
else if ( centena == 3 ) { null ;tres ;}
else if ( centena == 4 ) { null ;cuatro ;}
else if ( centena == 5 ) { null ;cinco ;}
else if ( centena == 6 ) { null ;seis ;}
else if ( centena == 7 ) { null ;siete ;}
else if ( centena == 8 ) { null ;ocho ;}
else if ( centena == 9 ) { null ;nueve ;}
}
convert ( )
{
unidad = volt/100 ;
decena = (volt/10 )-(unidad*10 ) ;
centena = volt - ( unidad* 100 ) - ( decena * 10 ) ;
}