Hi, ich wollte ein Programm schreiben an der ich ständig einen Pin überwache ob die Spannung dort größer ist als die eingestellte Referenzspannung. Nach einer gewissen Zeit soll eine LED angehen. Daher dachte ich, den Comparator des PICs zu benutzen (PIC12F683) und habe bisher folgendes geschrieben. Im Debugmodus allerdings komme ich nicht über die Abfrage hinaus ob die Spannung nun größer ist am Eingangspin. Dort habe ich auch bemerkt das er gar keinen Wert in das CMCON0 Register schreibt. Teil vom Programm: Leider als Foto, da die Textkonvertierung das zu unübersichtlich macht ___ Habt Ihr eine Idee was ich hier falsch gemacht hab?
Schau mal in das Errata sheet. Da steht was mit demkomperator
In dem 6-Seiten Dokument? Da würd ich jetzt nichts erkennen was mir hilft leider.
Markus B. schrieb: > Im Debugmodus allerdings komme ich nicht über die Abfrage hinaus ob die > Spannung nun größer ist am Eingangspin. Dort habe ich auch bemerkt das > er gar keinen Wert in das CMCON0 Register schreibt. Im Debug-Modus werden leider die Komparator-Pins zum Debuggen benötigt. Helfer
Meinte jetzt lediglich die Softwaredebug Methode. Die IOs sind doch richtig configuriert, den COUT nehm ich nicht vom Pin, sondern vom internen Register. Cin- ist meine Referenzspannung. Cin+ Pin als IO, da auf Cin+ für den Comparator die interne Referenzspannung von 1,88V anliegt (zumindest glaub ich das, so richtig eingestellt zu haben) aber wenn ich jetzt in den Softwaredebugmodus, also Simulator des MPLAB X gehe, schreibt er mir wenn er die Config durchläuft in jedes Register einen Wert, nur in das CMCON0 register nichts, das bleibt auf 00000000. Daher glaube ich, das er eventuell deshalb bei der Abfrage des Cout, des CMCON0 Registers nicht weiterkommt da er gar nicht Startet aufgrund der nicht Konfiguration. Oder muss ich den Vorab irgendwie aktivieren, bevor ich Konfigurieren kann?
Markus B. schrieb: > Leider als Foto, da die Textkonvertierung das zu unübersichtlich macht Was willst Du denn konvertieren, doch nicht etwa nach Word. Das ist ein ASM-File, also poste es als ein solches. Die blauen und roten Wellen braucht niemand. Code postet man grundsätzlich immer als plain Text (*.asm, *.c).
@Markus Schaden, dass Du nicht Dein gesamtes Programm als Anlage beigefuegt hast. So kann man halt nur raten. Im Debug-Modus sind nicht immer alle Funktionen verfuegbar, da musst Du dann schon mit dem Stimulus (vgl. Debugger-Menue MPLAB) arbeiten. Diese Configuration solltest Du beruecksichtigen: ;configure Comparator with Output and Internal Reference ;page 2 and page 53 datasheet ;GP0 comparator Input + (CIN+) configur as input ;GP1 " Vref (CIN-) " " ;GP2 " Output (COUT) " output ; banksel GPIO ;bank0 clrf GPIO ;clear output latches BANKSEL ANSEL ;bank1 ->page 33 clrf ANSEL ;b7:4 unused (ADC) bsf ANSEL,GP0 ;b3:0 = 0011 inputs bsf ANSEL,GP1 BANKSEL TRISIO clrf TRISIO bsf TRISIO,GP0 ;set Pin as Input CIN+ bsf TRISIO,GP1 ;" " " " CIN- (CVref) bcf TRISIO,GP2 ;" Output COUT ; banksel CMCON0 ;page 56 clrf CMCON0 ;b7,5 unimplemented b6=0 Output-flag (read only) ;b4=0 Output non inverted ;b3=1 CIN+connects to VIN- ;b2:0 =100 Vref connected to VIN+ movlw b'00001100' movwf CMCON0 ; banksel VRCON ;page 58 clrf VRCON bsf VRCON,VREN ;b7=1 Vref circuit powered ON bcf VRCON,VRR ;b5=0 High range bsf VRCON,VR3 ;Vref=(Vdd/4) + (15/32) *Vdd(5V) bsf VRCON,VR2 ; 3,75V bsf VRCON,VR1 bsf VRCON,VR0 banksel 0 mfG Ottmar
Ne habs da nur fix reinkopiert, da bloß die paar Zeilen mMn wichtig sind. Hab auch im Simulator mal den Wert den ich oben in das CMCON0 Register reinschreiben möchte, per Hand eingetippt und dann würde alles soweit wie geplant funktionieren. Daher ist momentan halt mein bisheriges einziges Problem, dass er den Wert nicht in das Register übernimmt. Sorry, die Codeeingabe vorher hatte nicht funktioniert ^^
1 | #include "p12F683.inc" |
2 | __CONFIG _FOSC_INTOSCIO & _WDTE_OFF & _PWRTE_ON & _MCLRE_ON & _CP_OFF |
3 | Errorlevel -302 |
4 | LIST |
5 | |
6 | |
7 | RES_VECT CODE 0x0000 ;Prozessor Vector Reset |
8 | GOTO Ini ;Gehe zur Initialisierung |
9 | |
10 | Ini |
11 | Banksel OSCCON ;500kHz Interne Frequenz |
12 | movlw B'00110111' |
13 | movwf OSCCON |
14 | Banksel ANSEL ;Analogsignal auf Interne Frequenz |
15 | movlw B'00110010' |
16 | movwf ANSEL |
17 | Banksel TRISIO ;Einstellung Input/Output |
18 | movlw B'00011111' |
19 | movwf TRISIO |
20 | Banksel CMCON0 ;Comparator aktiv und auf VRef Intern |
21 | movlw B'00010100' ;COUT invertiert |
22 | movlw CMCON0 ;Vin > Vref = COUT High |
23 | Banksel VRCON ;Comparatorreferenz 1,88V |
24 | movlw B'10101001' |
25 | movwf VRCON |
26 | Banksel GPIO |
27 | clrf GPIO ;Reset Aus-/Eingänge |
28 | goto Start |
29 | |
30 | |
31 | Start ;Abfrage Spannung zu hoch |
32 | btfss CMCON0,6 |
33 | goto Start |
Und wie änderst Du die "Eingangsspannung" am Pin? Wie sieht dein sazugehöriger Stimulus aus? Helfer
Im Simulator am PC kann ich doch die IO manuell verwalten. Wie gesagt, mein einziges Problem mit dem ich nicht zurecht komme oder es verstehe ist, dass ich alle Register ändern kann um meine Konfiguration durchzuführen - Nur das CMCON0 Register übernimmt nicht den Wert 00010100 den ich hineinschreiben will sondern bleibt stur auf 00000000 Wenn ich manuell in der Simulation den gewollten Wert in CMCON0 eintippe, funktioniert zumindest dort auch meine restliche Schaltung. Aber warum übernimmt er für dieses Register den Wert nicht?
Hab das Progblem nun anders lösen können, das Register nimmt keinen kompletten Wert an, jedoch wenn ich via BSF die 2 Bits setze übernimmt er sie. Komplett Posten kann ichs leider aus anderen Gründen nicht, da daraus vllt mehr als nur Private spielerei wird ^^
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.