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.
Nein, musst du nicht PS: Errata lesen, der AD-Wandler hat nen Schuß
:
Bearbeitet durch User
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
:
Bearbeitet durch User
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."
:
Bearbeitet durch User
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
Du weißt aber schon, was 12bit Auflösung bedeuten? 5V = 0xFFF = 4096 :)
:
Bearbeitet durch User
Ich bin gerade selber drauf gekommen. 1 Tag verschwendet und den Fehler in den tiefen der Bithölle gesucht, dabei die "selbstverständlichen" Dinge vergessen ... Trotzdem Danke für die Unterstützung!!!!
Denk trotzdem an das Errata. Das hat mich auch 1 Tag gekostet bis ich wusste warum mein Meßergebnis derart daneben ist. Als Workaround einfach einen ungenutzten AINx auf GND legen und messen. Das ist dann dein Nulloffset den du von den anderen Meßergebnissen abziehst.
Werde ich! DANKE. Kannst du mir den Link zu dem Dokument posten?
http://www.digikey.de/product-detail/de/microchip-technology/PIC18F66K80-I%2FMR/PIC18F66K80-I%2FMR-ND/2601539 http://www.microchip.com/mymicrochip/NotificationDetails.aspx?pcn=SYST-16EQQX751&print=view
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.