Estoy intentando que el DAC del PIC16F1704 funcione, específicamente quiero que salga en el pin RA2 / DAC1OUT2. No hay nada conectado a ese pin, y he reducido el código de prueba a esto:
#define _XTAL_FREQ 4000000
#define FCY 4000000ULL
#include <htc.h>
__CONFIG (FOSC_INTOSC & CP_OFF & MCLRE_OFF & BOREN_OFF & WDTE_OFF);
__CONFIG (PLLEN_OFF & LVP_OFF & ZCDDIS_ON);
void main(void)
{
WPUA = WPUC = 0; // disable weak pull-ups
nWPUEN = 1;
ZCD1CON = 0; // disable Zero-cross detect module
SLRCONA = SLRCONC = 0; // disable slew-rate limiting
ANSELA = 0xff; // all analog
TRISA = 0b00111111; // all inputs
OSCCON = 0b01101011; // 4 MHz internal oscillator, no PLL
DAC1CON0 = 0b10010000; // DAC on, Vref+ = Vdd, Vref- = Vss, output on DAC1OUT2
DAC1CON1 = 0; // Tap #0: output 0.0V on DAC1OUT2
while (1) {
__delay_ms(10);
DAC1CON1++;
}
}
Esto debería generar una rampa 0..Vdd en aproximadamente 2.56 segundos, pero en cambio, lo que veo es esto:
MiVddes3.3V.Larampainclinadaeinvertidaesde1.0a0.4V,conunamesetaalrededorde0.8V.
Elproblemapareceestarenesepinenparticular,noenelDACensí.SicambiolaconfiguraciónDACa
DAC1CON0=0b10100000;
Esdecir,lasalidaenDAC1OUT1ensulugar(RA0),puedoleerlarampaenesepin,esperfectamentelinealynoestáinvertida.
ParecequehayalgúnperiféricoqueintentamantenerelpinRA2a0,8voltios,ylohacedeunamaneraextrañaynolineal.
¿Algunaideadequépodríaseresto?Paracompletar,aquíestáelmultiplexadodeestepin:
El circuito de detección de cruce por cero se ajusta bastante bien, pero como puede ver, lo deshabilité explícitamente (el cambio de ZCDDIS_ON a ZCDDIS_OFF no cambia nada).
El compilador es XC8 (1.31 creo) y estoy programando el chip con PicKit2.