Forum: Mikrocontroller und Digitale Elektronik ADWandler Wert PIC18


von Martin M. (volleyballx)


Lesenswert?

Hey Leute,
Ich schaffe gerade projektmäßig mit einem PIC18F26K22 Controller mit der 
MPLAB IDE 5.10 und dem XC8 Compiler.
Ich will eine konstante Abfrage der Spannung eines Gerätes mithilfe 
einer AD-Wandlung, dabei habe ich bemerkt, dass der einzige Rückgabewert 
die 1023 sind...
Mithilfe eines einzelnen Code-Fetzens, habe ich dies herausgefunden, ich 
bin mir ziemlich sicher, dass die Hardware richtig sein sollte, da ich 
die Referenzspannung VDD auf 4,6V gemessen habe und Vss 0V sind. Der 
analoge Pin AN0/RA0 ist am Spannungsteiler angeschlossen und beträgt am 
Laptop (wie in diesem Beispiel) 0,75V. Mit einem anderen Gerät ist der 
Teiler so eingestellt, dass dieser immer unter der Ref-Spannung ist.
Ich bin mir ziemlich sicher, dass es bessere Wege gibt um mein Vorhaben 
zu realisieren, dennoch sollte es doch auf diese Weise auch möglich 
sein.
Bestimmt übersehe ich einfach das Offensichtliche, tschuldigung dafür 
schonmal und danke im Vorraus.  Ich glaube man kann sehen, dass ich 
nicht so erfahren auf diesem Gebiet bin:) habt erbarmen.
Hier, die relevanten Stellen:
Resultat: Alle LEDs leuchten - ADWandler Wert =1023, oder?
Obwohl AD=(1023*0,75V)/4,6V = 166

Ich krieg eine "implicit signed to unsigned conversion"-warning bei der 
Channel selection

und"

::: warning: (1311) missing configuration setting for config word 
0x30000C; using default
::: warning: (1311) missing configuration setting for config word 
0x30000D; using default "

auf dem Output Fenster.



https://pastebin.com/D1HAEmyq

Mit beste Grüßen.

von Matthias (Gast)


Lesenswert?

Hallo,

Die config bits werden in deinem Code nicht gesetzt. Diese können in 
mplab per Menü eingestellt werden (memory view?). Den erzeugten Code 
dann in ein source file (main.c) kopieren.

Die while(1) enthält eine return Anweisungen.

Was verbirgt sich hinter AN0? Den Channel 0 mit chs=0u auswählen lässt 
den implizieten Cast evtl. verschwinden.

Die sample time ACQT im ADCON2 ist nicht gesetzt?

Die Initialisierung der Interrupt flags macht in umgekehrter Reihenfolge 
mehr sin (flag löschen, Quellen einschalten, GIE setzen).

Funktioniert die Wandlung im polling Modus?
Also statt interrupts polling auf GO/Done?

Gruß Matthias

von Martin M. (volleyballx)


Lesenswert?

Hey Matthias,
ja du hattest Recht....

Der analoge Pin AN0 entspricht dem des RA0;
ich hätte einfach in dem ADCON0-Register nach der Pinbezeichnung gucken 
müssen,
in meinem Falle: "0b00000"
Sample time auch gesetzt, jetzt klappt es im Polling modus.
Vielen Dank!

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
Noch kein Account? Hier anmelden.