theres more to than i first thought.
i tried the microchip example in mplabx , guess what both pins are exactly equal and produce the exact predicted output by the datasheet,
we are missing something
Code:
#CONFIG ; 16F1705 __config _CONFIG1, _FOSC_INTOSC & _WDTE_ON & _PWRTE_ON & _MCLRE_ON & _CP_OFF & _BOREN_ON & _CLKOUTEN_OFF
__config _CONFIG2, _WRT_OFF & _PPS1WAY_OFF & _ZCDDIS_OFF & _PLLEN_OFF & _STVREN_ON & _BORV_LO & _LPBOR_OFF & _LVP_OFF
#ENDCONFIG
counts var byte ' Loop counter.
DEFINE OSC 4 ' Adjust to suit design.
OSCCON = $68 ' Internal 4MHz osc.
ANSELA = 0
ANSELC = 0
' ####### RA2 Sits at 2.277V with RA0 selected and running correctly.
DAC1CON0 = %10110000 ' Vref from FVRb2, DAC1out2 (RA2).
First:
for counts= 0 to 250
DAC1CON1 = counts
pause 5 ' Let the DMM settle.
next
goto first
end
Code:
void main(void){
// initialize the device
SYSTEM_Initialize();
// When using interrupts, you need to set the Global and Peripheral Interrupt Enable bits
// Use the following macros to:
// Enable the Global Interrupts
//INTERRUPT_GlobalInterruptEnable();
// Enable the Peripheral Interrupts
//INTERRUPT_PeripheralInterruptEnable();
// Disable the Global Interrupts
//INTERRUPT_GlobalInterruptDisable();
// Disable the Peripheral Interrupts
//INTERRUPT_PeripheralInterruptDisable();
uint8_t count=0;
while (1)
{
for(count=0; count<=250; count++)
{
DAC_SetOutput(count);
__delay_ms(5);
}
}
}
/**
End of File
void DAC_Initialize(void)
{
// DAC1EN enabled; DAC1NSS VSS; DAC1PSS VDD; DAC1OE1 enabled; DAC1OE2 enabled;
DAC1CON0 = 0xB0;
// DAC1R 51;
DAC1CON1 = 0x33;
}
void DAC_SetOutput(uint8_t inputData)
{
DAC1CON1 = inputData;
}
uint8_t DAC_GetOutput(void)
{
return DAC1CON1;
}
// CONFIG1
#pragma config FOSC = INTOSC // Oscillator Selection Bits->INTOSC oscillator: I/O function on CLKIN pin
#pragma config WDTE = OFF // Watchdog Timer Enable->WDT disabled
#pragma config PWRTE = OFF // Power-up Timer Enable->PWRT disabled
#pragma config MCLRE = ON // MCLR Pin Function Select->MCLR/VPP pin function is MCLR
#pragma config CP = OFF // Flash Program Memory Code Protection->Program memory code protection is disabled
#pragma config BOREN = ON // Brown-out Reset Enable->Brown-out Reset enabled
#pragma config CLKOUTEN = OFF // Clock Out Enable->CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin
#pragma config IESO = ON // Internal/External Switchover Mode->Internal/External Switchover Mode is enabled
#pragma config FCMEN = ON // Fail-Safe Clock Monitor Enable->Fail-Safe Clock Monitor is enabled
// CONFIG2
#pragma config WRT = OFF // Flash Memory Self-Write Protection->Write protection off
#pragma config PPS1WAY = ON // Peripheral Pin Select one-way control->The PPSLOCK bit cannot be cleared once it is set by software
#pragma config ZCDDIS = ON // Zero-cross detect disable->Zero-cross detect circuit is disabled at POR the culprit
#pragma config PLLEN = OFF // Phase Lock Loop enable->4x PLL is enabled when software sets the SPLLEN bit
#pragma config STVREN = ON // Stack Overflow/Underflow Reset Enable->Stack Overflow or Underflow will cause a Reset
#pragma config BORV = LO // Brown-out Reset Voltage Selection->Brown-out Reset Voltage (Vbor), low trip point selected.
#pragma config LPBOR = OFF // Low-Power Brown Out Reset->Low-Power BOR is disabled
#pragma config LVP = ON // Low-Voltage Programming Enable->Low-voltage programming enabled
void PIN_MANAGER_Initialize(void)
{
/**
LATx registers
*/
LATA = 0x00;
LATC = 0x00;
/**
TRISx registers
*/
TRISA = 0x37;
TRISC = 0x3F;
/**
ANSELx registers
*/
ANSELC = 0x3F;
ANSELA = 0;//0x17;
/**
WPUx registers
*/
WPUA = 0x00;
WPUC = 0x00;
OPTION_REGbits.nWPUEN = 1;
/**
ODx registers
*/
ODCONA = 0x00;
ODCONC = 0x00;
/**
SLRCONx registers
*/
SLRCONA = 0x37;
SLRCONC = 0x3F;
/**
INLVLx registers
*/
INLVLA = 0x3F;
INLVLC = 0x3F;
}
void SYSTEM_Initialize(void)
{
PIN_MANAGER_Initialize();
OSCILLATOR_Initialize();
WDT_Initialize();
DAC_Initialize();
}
void OSCILLATOR_Initialize(void)
{
// SCS FOSC; SPLLEN disabled; IRCF 4MHz_HF;
OSCCON = 0x68;
// SOSCR disabled;
OSCSTAT = 0x00;
// TUN 0;
OSCTUNE = 0x00;
// SBOREN disabled; BORFS disabled;
BORCON = 0x00;
}
void WDT_Initialize(void)
{
// WDTPS 1:65536; SWDTEN OFF;
WDTCON = 0x16;
}
Bookmarks