voltage de referencia para pic18f2550 (Proton)

Hola, sacar un voltage de referencia en un pic 16f628a es sumamente sencillo por ejemplo:
'*******usando proton******************Device [/SIZE]16F628A[/SIZE]XTAL [/SIZE]20
TRISB[/SIZE]=0PORTB=0TRISA=255VRCON=%11000001end'*************************************si mulamos en proteus y Listo tenemos un vref en RA2

pero con un pic18f2550 no puedo, podria alguien ayudarme con un ejemplo? tengo que conectar de alguna manera "RA2 (-vref) y RA3 (vref)"? o tambien tengo que modificar adcon0,adcon1,adcon2?, todo el puerto esta como entradas analogicas
 

Adjuntos

  • verf.jpg
    verf.jpg
    86 KB · Visitas: 7
Hola Cesarin, los registros ADCON0,ADCON1y ADCON2 son necesarios para cualquier funcion del ADC, en el ADCON0 solo seleccionaras el canal que vas a leer (CHS3:CHS0), el momento en que iniciara la lectura (GO/DONE) y si el convertidor esta activo (ADON), lo que mas te interesa esta en el ADCON1, debes poner un 1 en los bits VCFG0 para configurarlos como referencias, tu referencia menor del ADC sera tomada del pin RA2 y la referencia mayor de RA3, la verdad no se hasta que valores pueden ser leidos, seria necesario leer el data, para el ADCON2 es muy necesario saber la velocidad a la que estas trabajando, si estas trabajando a 48 MHz, el bit ADFM es la justificacion, la resolucion del ADC es de 10 bits, pero la estructura del PIC es de 8 bits, por lo tanto no se podra guardar el resultado en un solo bit, es por eso que debemos seleccionar hacia que registro se guardara, ADRESH para la derecha y ADRESL para la izquierda, para juntarlos puedes hacer un corrimiento de los bits de uno de los registros y guardarla en una variable con mas bits, lo siguiente es ACQT2:ACQT0 que es el tiempo de adquisicion, para leer el valor de voltaje el pic carga un capacitor, dependiendo del tiempo de carga es el valor que tomara, este tiempo se llama tiempo de adquisicion (TAD), en el apartado del ADC de la hoja de datos existe la TABLA 28-29 en la cual especifica que para el 18FXXXX es necesario minimo 0.8us siempre y cuando tu voltaje de referencia sea mayor o igual a 3v. entoncs el minimo TAD es de 0.8us si Tosc=1/Fosc, Fosc es la frecuencia a la que esta corriendo nuestro PIC es decir despues de PLL no el valor de nuestro cristal en caso de utilizarlo, por lo tanto Fosc es 48Mhz y Tosc es 20.833 ns, si dividimos 0.8us entre 20.833 ns tenemos un resultado de 38.4, lo que significa que para que el TDA sea mayor al minimo, se necesita al menos 38.4 Tosc, pero las opciones que tenemos son de 32Tosc y 64 Tosc, no te confundas esto es para ADCS2:ADCS0, de todos modos existe una tabla en la cual te puedes guiar mas facilmente es la TABLA 21-1, finalmente para el TDA en necesario saber que se necesitan 2.5us para ser leido, ahora que el TDA es 64Tosc es 64*20.833ns= 1.33 us se necesitan al menos 2TAD 2*1.33us=2.66 us para cumplir el tiempo minimo. Perdon si te cause confusion por ultimo los bits quedarian asi ACQT2:ACQT0 (001) y ADCS2:ADCS0 (110)
Espero haberte ayudado Cesarin cualquier duda que pueda ayudarte no dudes en preguntar..
 
si, mira basicamente necesito sacar un voltaje de referencia atraves de RA2 del pic18f2550 (modificando el cvrcon) asi que en teoria si :CVRCON[/SIZE]=%11101111 cvrcon.7=1 'se habilita el voltage de referencia de los comparadorescvrcon.6=1 ' se indica que el nivel de voltage sea la salida de RA2cvrcon.5=1 'seleccion de rangocvrcon.4=0cvrcon.3=0 'de aqui para bajo son los bit para escoger el nivel de voltaje a si que por locvrcon.2=1 'tanto tengo 16 niveles, pero en la simulacion en proteus no da ninguncvrcon.1=1 'voltagecvrcon.0=1 algo me falta, trisa esta todo como entradas analogicas,sera un registro que este pasando por alto talves adcon0, adcon1 o adcon2?:confused: a el pic corre a 48 mhz
en cambio en un pic16f628a al poner solamente VRCON=%11000001 y trisa=255 ya tengo un voltage por RA2, alguna idea
 
pues fisicamente ya funciono pero no se porque en proteus No, si a alguien le interesa aqui esta el codigo, es muy sencillo y va subiendo de nivel cada 2 segundos ahora si a seguir con el limitador de corriente de mi proyecto, muchas gracias camarada @tnxhawks
ADCON0[/SIZE]=0
ADCON1[/SIZE]=0
ADCON2[/SIZE]=0
TRISA[/SIZE]=255
CVRCON[/SIZE]=%11101111
DelayUS 100
MM:
CVRCON=%11100000
DelayMS 2000
CVRCON=%11100001
DelayMS 2000
CVRCON=%11100010
DelayMS 2000
CVRCON=%11100011
DelayMS 2000
CVRCON=%11100100
DelayMS 2000
CVRCON=%11100101
DelayMS 2000
CVRCON=%11100110
DelayMS 2000
CVRCON=%11100111
DelayMS 2000
CVRCON=%11101000
DelayMS 2000
CVRCON=%11101001
DelayMS 2000
CVRCON=%11101010
DelayMS 2000
CVRCON=%11101011
DelayMS 2000
CVRCON=%11101100
DelayMS 2000
CVRCON=%11101101
DelayMS 2000
CVRCON=%11101110
DelayMS 2000
CVRCON=%11101111
DelayMS 2000
GoTo MM
end
 
Atrás
Arriba