Bueno aprovechando este topic , he decidido hacer mi primer aporte real a TODOPIC, he hecho un ejemplo para usar el generador de referencia interna del PIC como DAC.
El ejemplo es muy simple, utilizo el PIC16F627A, la salida del DAC es RA2 y conecto dos pulsadores, un pulsador a RB6 para incrementar el voltaje en RA2 y otro en RB7 para decrementar, RB6 y RB7 tienen sus PULL UPS habilitadas.
Segun la hoja de datos el modulo de referencia de voltaje puede trabajar en un rango alto y en un rango bajo, para variar el voltaje se utilizan los 4 primeros bits del registro VRCON segun las siguientes ecuaciones:
Para el rango bajo:
Vref = (Vr<3:0>)*Vdd/24
Para el rango alto:
Vref =(0,25*Vdd) + (Vr<3:0>)*Vdd/32
Viendo la ecuacion para el rango alto vemos que el voltaje minimo que saca es 0,25*Vdd Si Vdd = 5 , el voltaje minimo del rango alto es 1,25 V. y valor maximo seria 3,59 V
1,25 V en el rango bajo equivalen a un Vr<3:0> = 6 , a partir de aqui los pasos que se dan en el rango bajo son mayores que los que se dan con el rango alto , por ejemplo:
Si Vr<3:0> = 7 , en el rango bajo tenemos Vref = 1,458 , para esta misma condicion tenemos que:
Vr<3:0> = 1, en el rango alto Vref = 1,406
Si Vr<3:0> = 8 , en el rango bajo tenemos Vref = 1,666 , para esta misma condicion tenemos que:
Vr<3:0> = 2, en el rango alto Vref = 1,562
El programa hace esta distincion, es decir que , al incrementar comenzamos en el rango bajo y cuando Vr<3:0> llega a 6 cambiamos al rango alto, esto nos permite tener pasos mas pequeños a partir de 1,25 V si Vdd = 5.
Como conlusion decir que no hay que fiarse del todo del proteus, bueno aunque ya lo sabia ultimamente no me fallaba, en la version que estoy usando del proteus la 7.2 toma el Vdd como si valiera 0,05 V y valor que sale por RA2 esta en el rango de los mV, yo lo corregi haciendo que Vdd=500 y esto hace que el valor por RA2 sea el correcto.
Bueno creo que eso es todo.
Saludos