I have post a thread to check DAC problem of ADUC7061.
But it is hard. very hard.
Engineer of ADI can't give convincing proof.
I used this device for about 6 years. Recently, i find the DAC will not work correctly. when i change P0 from GPIO mode to ADC input MOD(port multiplex), The DAC is not linear. My device will generate abnormal vlotage to external inductor, for exaple transform, it will destroy something.
ADI's engiineer, don't have oscillator, even don't have voltage meter.
I deem that the way or method they used can't to be used to validate the DAC is ok, because engineer could operates wrongly. In fact, junior.
I upload the project and test result
The code is like this:
while (1) { if (SwapFlag == 0) { GP0KEY1 = 0x7; GP0CON1 = 0x0; GP0KEY2 = 0x13; } else { //adc input GP0KEY1 = 0x7; GP0CON1 = 0x1; GP0KEY2 = 0x13; } //for stable DelayMs(1); DACDAT = 0x8000000; //for stable DelayMs(20); bSendResultToUART = 0; // open interrupt ADCMSKI = BIT1; //Enable ADC1 result ready interrupt source //open ADC1 ADC1CON = BIT9 + BIT8 // ADC1 input channel 4 in Single-Ended mode. + BIT15; // Auxiliary-ADC Enabled // Also, Int reference, //read to clear ulADC0Result = ADC0DAT; // Read ADC0 conversion result ulADC1Result = ADC1DAT; // Read ADC1 conversion result //open ADC1 ADCMDE = 0 + BIT1; // single Conversion mode, Normal mode //wait for at least one sample while (bSendResultToUART == 0) { DelayMs(1); } if (bSendResultToUART == 1) // Is there an ADC1 result ready for UART transmission? { //if i receive one sample, then close ADC1 and interrupt for UART business. //if all uart send all text, then open them again ADC1CON = 0; ADCMSKI = 0; bSendResultToUART = 0; if (SwapFlag == 1) { sprintf ( (char*)szTemp, "%05.3f\r ADC1(Ch4) Result(ADC input)\r",ulADC1Result*lsb10r9/1000000000 );// Send the ADC1 Result to the UART } else { sprintf ( (char*)szTemp, "%05.3f\r ADC1(Ch4) Result(GPIO)\r",ulADC1Result*lsb10r9/1000000000 );// Send the ADC1 Result to the UART } nLen = strlen((char*)szTemp); for ( i = 0 ; i < nLen ; i++ ) // loop to send ADC1 result { COMTX = szTemp[i]; ucTxBufferEmpty = 0; while (ucTxBufferEmpty == 0) { } } } //swap for next test if (SwapFlag == 0) { DelayMs(50); SwapFlag = 1; } else { //adc input DelayMs(150); SwapFlag = 0; } } }
Because engiineer of ADI refuse to test code offer by me, (Perhaps, he is junior, he is hard to change the project to math his test tool, for example, he doesn't have voltagemeter )
The method he used is not convincing.
Of course, he refuse to admite the bug. But is not important. It is imortant to find out solution to fix it.
The engineer said there mybe something wrong with my board. but if i download with jtag, the board works correctly.
the problem is :
1. when P0 is configured as ADC input
2 and code is running from flash
3 Then: the DAC will work wrongly.
I assume factory ingore to initiate unknown registers which will be overwritten by jtag module.
If i run the code by debug mode, step by step or freely, it is ok.
This is the reason why we don't find the bug in R&D phase.
would any volunteers who have aduc7061 kit will help me to validate it ?
Recently, we are developmenting new solution, which are external ADC + STM32xxx to replace it.