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