mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ADWandler Wert PIC18


Autor: Martin M. (volleyballx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Martin M. (volleyballx)
Datum:

Bewertung
0 lesenswert
nicht 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!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.