Hallo. Ich arbeite mit dem PIC18F2431 und versuche momentan den A/D-Wandler zum gescheiten funktionieren zu bekommen. Das Problem ist, dass er zwar wandelt und das auch problemlos, jedoch nur bis Vdd/2. Dann sollte er ja aufs zehnte Bit umschalten, tut er aber nicht. Gibt es bei dem Ding so etwas, wie mit und ohne Vorzeichen zu messen oder irgendwelche anderen Späße, dass er nich höher kommt und bei 511 stehen bleibt. Ich suche jetzt schon den ganzen Tag und komme einfach nicht weiter. Vielleicht hat ja jemand einen einfachen Tipp für mich. Mit freundlichen Grüßen Marco
Wie hast du Vref beschaltet? woher weißt du, dass nur 9Bit gewandelt werden? Schaust du dir die SFR an? Rudi
Vref sind AVdd und AVss, hab erstmal nichts externes dran. Und ja ich schau mir die SFR an. Es ist auch egal ob ich links- oder rechtsbündig schreibe, mehr als 511 spuckt er nicht aus.
Was passiert denn, wenn du mehr als 50% der betriebsspannung an den AD-wandler sendet? Ändern sich denn die unteren Bits bei verschiedenen Spannungen oberhalb von 50%?
Nein. Er bleibt konstant bei 511, also dem maximalen was man aus 9 Bit rausholen kann.
kannst du mal deine Schaltung und den Softwareteil der der Initialisierung des AD-wandlers veröffentlichen? Ich habe seit Jahren den 4320 im Einsatz und auf den ersten Blick sieht der AD-Teil identisch aus.
Ja der sollte auch identisch sein. Schaltung veröffentliche ich jetzt einfach mal nicht, weil einfach eine Klemme vom Netzteil an dem PIN hängt und ich die Spannung damit zum Testen direkt vorgebe.
1 | |
2 | TRISA = 0xFF; //Trisa<0:4> als Eingänge |
3 | ANSEL0 = 0x07; //Analoge Eingänge RA<0:4> |
4 | ADCON0 = 0b00001001; //Single-Shot, Single Channel, GroupA, Start |
5 | ADCON1 = 0x00; |
6 | ADCON2 = 0x80; |
7 | ADCON3 = 0x00; //A/D all triggers disabled |
8 | ADCHS = 0x00; //AN0,AN1,AN2,AN3 |
9 | |
10 | ADCON0bits.ADON = 1; |
Abfragen tu ich das ganze dann über den Interrupt der durch den AD-Wandler ausgelöst wird. Ich hoffe das reicht an Informationen
>Schaltung veröffentliche ich jetzt einfach mal nicht, weil einfach eine >Klemme vom Netzteil an dem PIN hängt und ich die Spannung damit zum >Testen direkt vorgebe. ?? Zusammmen mit der Betriebsspannung? Regelst du beides gleichzeitig?
Nein, ich habe zwei seperate Netzteile hier. Eine Sache ist mir noch aufgefallen, die aber keinen Einfluss hatte als ich sie geändert habe. Bei ANSEL0 sollte ein ANSEL0 = 0xFF sein.
Ein Vorschlag: Lass doch zunächst den Interrupt weg. Dann frage den AD-Wandler im Polling ab. Etwa so: ADCON1 = bin(1000.0100); // PORTA.0, A.1 = analog, Vref = VDD // ADRESH = rechtsbuendig ADCON0 = bin(1000.0001);// AD-Wandler init, GO=0, conversion clock =Fosc/32 while (1) { GO = 1; #asm nop #endasm while (GO == 1) { } } .... So kannst du wunderbar die SFR beobachten...wenn soweit elektrisch alles passt, sollte es funktionieren..
Macht auch keinen Unterschied zu der Abfrage im Interrupt.
Hm, dann scheint doch vielleicht elektrisch etwas nicht zu passen.
Also ich wüsste nicht was an AVdd und AVss liegen die entsprechenden Pegel an, und die Massen der beiden Netzgeräte sind verbunden, also von daher kann ich mir nicht vorstellen, dass da irgendwas nicht passt.
>REGISTER 21-3: ADCON2: A/D CONTROL REGISTER 2 >bit 7 ADFM: A/D Result Format Select bit >1 = Right justified >0 = Left justified Steht das richtig? >bit 6-3 ACQT<3:0>: A/D Acquisition Time Select bits >0000 = No delay (conversion starts immediately when GO/DONE is set)(1) >0001 = ... Hier genug Zeit gelassen für 10 Bit conversion / S&H Cap. charging >bit 2-0 ADCS<2:0>: A/D Conversion Clock Select bits >000 = FOSC/2 >001 = FOSC/8 >002 ... Schnell genug bevor abgefragt wird?
mach mal testweise einen 0.1uF-kondensator vor den AD-wandlereingang; blockkondensatoren für den PIC hast du hoffentlich auch
@Snowman Blockkondensatoren um die Eingangsspannung zu glätten sind da. Am A/D Wandler hab ich leider noch keinen, kann ich aber mal versuchen. @Jens Er steht definitiv auf rechtsbündig. Das mit den DelayZeiten werd ich auch nochmal versuchen, hatte ich aber glaub ich gestern schonmal getestet. A/D Conversion Clock Select bits Hab ich noch incht verstellt, die machen mir den A/D-Wandler doch aber nur langsamer oder nicht?
So. Problem behoben, es lag wirklich an der Conversion Clock. Ich hatte sie auf Fosc/2 und jetzt geändert auf Fosc/4. Ich wüsste jetzt aber gerne noch, wie lange er für die Wandlung braucht. ist das Fosc, der extern angelegte Takt oder der Befehlstakt? Ich vergess das leider immer wieder.
Marco Schulze schrieb: > Problem behoben, es lag wirklich an der Conversion Clock. Ich hatte sie > auf Fosc/2 und jetzt geändert auf Fosc/4. Ich wüsste jetzt aber gerne > noch, wie lange er für die Wandlung braucht. ist das Fosc, der extern > angelegte Takt oder der Befehlstakt? Ich vergess das leider immer > wieder. RTFM 21.6 Selecting the A/D Conversion Clock The A/D conversion time per bit is defined as TAD. The A/D conversion requires 12 TAD per 10-bit conversion. The source of the A/D conversion clock is software selectable. There are eight possible options for TAD: • 2 TOSC • 4 TOSC • 8 TOSC • 16 TOSC • 32 TOSC • 64 TOSC • Internal RC Oscillator • Internal RC Oscillator/4 For correct A/D conversions, the A/D conversion clock (TAD) must be as short as possible, but greater than the minimum TAD (approximately 416 ns, see parameter A11 for more information). TABLE 21-2: TAD vs. DEVICE OPERATING FREQUENCIES EQUATION 21-3: CONVERSION TIME FOR MULTI-CHANNEL MODES
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.