Spannungsbereich AI PIC18F66K80

OP #4510807
Lesenswert?

Hallo Zusammen,

ich beschäftige mich gerade mit der analogen Messdatenaufnahme mit dem 
PIC18F66K80. Ich möchte Spannungswerte von 0 - 5 VDC über den AIß 
aufnehmen. Das Datenblatt verwirrt mich jedoch. Muss ich etwas am 
"COMPARATOR VOLTAGE
REFERENCE MODULE" einstellen um eine Eingangsspannung von 0 - 5V 
aufnehmen zu können oder ist das per default so eingestellt?

Vielen Dank.
OP #4510849
Lesenswert?

Hallo Torben,

Errata ???

Ich gebe gerade 4,979V auf den AI2 und bekomme über mein Display 3,840V 
angzeigt und habe einfach keine Ahnung warum. Ich messe die Spannung 
direkt am PIN des uC.
Mein Code sieht folgendermaßen aus:
1
#include <built_in.h>
2

3
// LCD module connections
4
sbit LCD_RS at LATD4_bit;
5
sbit LCD_EN at LATD6_bit;
6
sbit LCD_D4 at LATD0_bit;
7
sbit LCD_D5 at LATD1_bit;
8
sbit LCD_D6 at LATD2_bit;
9
sbit LCD_D7 at LATD3_bit;
10

11
sbit LCD_RS_Direction at TRISD4_bit;
12
sbit LCD_EN_Direction at TRISD6_bit;
13
sbit LCD_D4_Direction at TRISD0_bit;
14
sbit LCD_D5_Direction at TRISD1_bit;
15
sbit LCD_D6_Direction at TRISD2_bit;
16
sbit LCD_D7_Direction at TRISD3_bit;
17
// End LCD module connections
18

19
unsigned int adc_rd, rntc_rd;
20
char txt2[15], txt3[15];
21

22
void main() {
23
  ADCON0 = 0x24;                  //AN2, AN5 als Analog, Rest auf Digital gestellt
24
  ADCON1 = 0x00;                  //AN8 - AN14 auf Digital gestellt
25

26
  TRISA = 0xFF;              // Set PORTA as input
27
  TRISC = 0x00;              // Set PORTC as output
28
  TRISD = 0x00;              // Set PORTD as output
29

30
  ADC_Init();  // Initialize ADC module with default settings
31
  
32
  Lcd_Init();
33
  Lcd_Cmd(_LCD_CLEAR);               // Clear display
34
  Lcd_Cmd(_LCD_CURSOR_OFF);          // Cursor off
35
  Lcd_Out(1,1,"Spannungsfolgertest");
36
  
37
  while (1) 
38
  {
39
    LATC = 0x00;             // set MUX/I0
40
    adc_rd = ADC_Read(2);    // get ADC value from 1st channel
41
    sprintf(txt3, "V_AI2 = %u mV", adc_rd);                // Trim the string from leading spaces
42

43
    Lcd_Cmd(_LCD_CLEAR);               // Clear display
44
    Lcd_Cmd(_LCD_CURSOR_OFF);          // Cursor off
45
    Lcd_Out(3,1, txt3);
46
    Delay_ms(1000);
47

48
  }
49
}

Mein Compiler ist MicroCPro for PIC. Mache ich hier etwas falsch?

VG
#4510963
Lesenswert?

Du verwechselst ADCON mit ANCON. ADCON konfiguriert den Wandler, ANCON 
legt fest, was ist digital und was analog. Ausserdem bleibt ADC_Read() 
ein Geheimnis. Versorgungsspannung vom PIC ist 5V?

Auszug aus dem Errata:
"The 12-bit A/D performance is outside the data
sheet’s A/D Converter specifications. When used
as a 12-bit A/D, the possible issues are: high offset
error, up to a maximum of ±25 LSBs at 25°C,
±30 LSBs at 85°C, 125°C and -40°C; high DNL
error, up to a maximum of +6.0/-4.0 LSBs; and
multiple missing codes, up to a maximum of
twenty. Users should evaluate the 12-bit A/D
performance in their application using the
suggested work around below. See Table 3 for
guidance specifications."
OP #4510994
Lesenswert?

Hallo Torben,

ADCON <-> ANCON war falsch eingesetzt, danke für den Hinweis. Ich habe 
herausgefunden dass der Faktor zwischen meinem angezeigten Wert und dem 
Sollwert 0,819 beträgt. Ist also konstant über den Bereich von 0 - 5 V:

U_ist  U_disp  U_ist/U_disp
[mV]    [mV]    [-]
----------------------------
5000  4092  0,818
4000  3275  0,819
3000  2456  0,819
2000  1636  0,818
1000  815  0,815

-> Ist das Errata ein Zusatz zum Datenblatt des uC? 
(http://ww1.microchip.com/downloads/en/appnotes/00693a.pdf?). Ich werde 
daraus nicht schlau, aber denkst du der Faktor den ich errechnet habe 
kommt daraus Zustande?

VG

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren