Hallo Leute,
ich habe ein kleines Problem mit dem internen AD-Wandler auf meinem
STR711-EvalBoard (PDFs zum Controller:
http://www.st.com/mcu/devicedocs-STR711FR2.html).
Ein Satz zur Hardware: AVDD habe ich mit 3,3V verbunden, AVSS mit GND
und ich nutze die Kanäle 0-2 des internen 12-Bit AD-Wandlers.
Den PCLK2 habe ich folgendermaßen initialisiert:
1 | RCCU_Div2Config(DISABLE);
|
2 | RCCU_PLL1Config( RCCU_PLL1_Mul_16, RCCU_Div_1);
|
3 | RCCU_RCLKSourceConfig( RCCU_PLL1_Output );
|
4 | RCCU_MCLKConfig( RCCU_DEFAULT);
|
5 | RCCU_FCLKConfig( RCCU_RCLK_4);
|
6 | RCCU_PCLKConfig( RCCU_RCLK_4);
|
Da ich ein 4Mhz Quarz angeschlossen habe, sollte der PCLK2-Takt bei
16Mhz liegen.
So habe ich meinen AD-Wandler initialisiert:
1 | ADC12_Init()
|
2 | ADC12_PrescalerConfig(100);
|
3 | ADC12_ModeConfig(ADC12_ROUND);
|
4 | ADC12_ConversionStart();
|
Und so lese ich die aktuellen Messwerte aus und schicke ihn per UART an
den PC:
1 | ADC_Value = ADC12_ConversionValue(ADC12_CHANNEL0);
|
2 | sprintf(Buffer, "Ch 0: %i", ADC_Value);
|
3 | UART_StringSend(UART0, Buffer);
|
4 |
|
5 | ADC_Value = ADC12_ConversionValue(ADC12_CHANNEL1);
|
6 | sprintf(Buffer, "Ch 1: %i", ADC_Value);
|
7 | UART_StringSend(UART0, Buffer);
|
8 |
|
9 | ADC_Value = ADC12_ConversionValue(ADC12_CHANNEL2);
|
10 | sprintf(Buffer, "Ch 2: %i", ADC_Value);
|
11 | UART_StringSend(UART0, Buffer);
|
Folgendes Problem stellt sich nun ein: Obwohl man am Eingangspin 1,65V
messen kann, kommt auf dem PC immer ein Wert von etwa 410 an, was nach
meiner Rechnung falsch ist:
12-Bit: 0 - 4095
Range: 0 - 2,5V
Also: 2,5V / 4096 * 410 = 0,25V
Woran kann das liegen? In der Firmware-Library von ST habe ich auch
nichts zur Kalibrierung des ADC gefunden!