Hallo, Ist mein erstes Projekt habe also keine Erfahrung. Wie kann ich einen Eingang des PIC12F617 so konfigurieren das er ab >1V ein High meldet und <1V Low)? Die Betriebsspannung des PIC ist 4,5V. Und welcher Eingang ist dafür am besten geeignet? Vielen Dank
Und welcher Eingang ist dafür am besten geeignet?
Es gibt manche Mikrocontroller die haben einen eingebauten Komparator wo du dann an den anderen Vergleicheingang eventuell 1V zur verfuegung stellen kannst. Ob das so ist darfst du selber rausfinden indem du das Datenblatt deines Controllers selber liesst und dabei mal nach Komparator suchst.
Viele Controller koennen das aber nicht, da musst du dann einen externen Komparator bereitstellen der dein Signal mit 1V vergleicht. Beachte dabei das viele Komparatoren einen Opencollektorausgang haben. Ein sehr alter Comparator den schon unsere Grosseltern verwendet haben ist dabei der LM393, deutlich moderner, aber auch schon 10Jahre alt, waere ein LMC7211.
Vanye
das er ab >1V ein High meldet und <1V Low)
Genau bei 1V geht sowieso nicht. Du musst schon angeben, welche Toleranzen du bei der Schaltschwelle erlaubst.
Vanye hat eigentlich schon alles gesagt - aber in der Praxis gibt es meist ein paar Stolperfallen. Zur Verdeutlichung hab ich dir mal einen Auszug aus dem Datenblatt angehängt.
FIGURE 9-1 zeigt gleich in der Fußnote in mögliches erstes Problem: "The black areas of the output of the comparator represents the uncertainty due to input offsets and response time." Deine Aufgabe wäre hier, die bei deiner Anwendung zulässige "uncertainty" zu bestimmen und abzuprüfen.
FIGURE 9-2 zeigt dir zunächst, dass sowohl GP1/CIN0- als auch GP4/CIN0- als Messeingang möglich sind, und welche Möglichkeiten du hast, um den Vergleichswert (1V) bereit zu stellen. Dein uC bietet hier GP0/CIN+, FixedRef, CVREF oder CMVREN. Deine Aufgabe wäre hier zu prüfen, ob das für dich so hin haut.
Bei der ganzen Geschichte solltest du aber auch "9.2 Analog Input Connection Considerations" beachten ...
Genau, da steht's geschrieben. Noch wichtig, das Kapitel 5, der/die Eing[a/ä]ng(e) müssen auf Analog- bzw. Digital-Funktion konfiguriert werden.
Wenn Du es abschreiben willst, dort:
http://www.f-w-eppers.homepage.t-online.de/BigC_Dir/big_C8.X.zip
werden, wenn ich richtig erinnere, 2* Komparatoren genutzt.
Was mir noch einfällt: Web-Site von Sprut, er läßt sich auch gründlich zu Comparator aus.
mfG fE
Vielen Dank erstmal. Wenn ich das richtig verstanden habe sollte ich mein 1V Signal (was im wahren Leben entweder 1V = H oder 0V = L hat) an den Eingang GP1/CIN0- anschließen und ein Vergleichsregister Register FixedRef (???) zB auf 0,5V einstellen. Richtig?
Wenn ich das richtig verstanden habe ...
Wenn ICH das richtig verstanden habe, dann hast Du eben die Specs geändert -- oder es Dir anders überlegt -- oder Du verfolgst nun eine neue Häkelei.
Über unausgegorene Pläne debattieren, da hab ich jetzt auch nicht den Gieper drauf. Und drum bin ich erst mal raus!
Vergleichsregister Register FixedRef (???) zB auf 0,5V einstellen. Richtig?
Aber die Hysterese nich vergessen! Sonst zappelt das evtl. rum. Gut das der Pic eine hat. ;) Dabla Punkt 9. ff
Wenn ICH das richtig verstanden habe,
Haste nich.
Wie kann ich einen Eingang des PIC12F617 so konfigurieren das er ab >1V ein High meldet und <1V Low)?
Der Eingang kann dir keine Analogsignale melden. Hast du dir das Kapitel 9 im Datenblatt schon einmal zu Gemüte geführt? Das dürfte dein Problem lösen. Deine Meldung kannst du dann z.B. im Register CMCON0 im COUT Bit ablesen. https://ww1.microchip.com/downloads/aemDocuments/documents/OTH/ProductDocuments/DataSheets/41302D.pdf
Ich habe die Specs nicht geändert. Dann hast du mich nur falsch verstanden, oder ich mich zu dämlich ausgedrückt. Hier der genaue Hintergrund, der macht die Aufgabe vielleicht verständlicher.
Der PIC selbst läuft mit 4,5V Betriebsspannung. An einem Eingang ist über einen Taster aber nur die Spannung einer Uhrenbatterie, also je nach Füllstand noch ca. 1- 1-5V. Ich will nun wissen ob der Taster gedrückt ist (=1 - 1,5V am Eingang) oder eben nicht gedrückt ist (=0V am Eingang), mehr nicht.
Ich habe dazu mal ChatGPT befragt und da kam folgende Antwort:
"Der PIC12F617 hat eine feste interne Referenzspannung von 1,024 V, die nicht programmierbar ist. Du musst die Referenzspannung nicht manuell festlegen, da sie bereits intern festgelegt ist. Hier ist der Code:
LIST P=12F617 INCLUDE <P12F617.INC> __CONFIG _CP_OFF & _WDT_OFF & _MCLRE_OFF & _IOSCFS_4MHZ
1 |
|
2 |
|
Main: BSF STATUS,RP0 ; Select register bank 1 MOVLW B'00000001' ; Set GP0 as input (Channel 0) TRIS GPIO ; Configure GPIO as input BCF STATUS,RP0 ; Select register bank 0
1 |
|
2 |
|
Loop: BTFSS CMCON0, C2OUT ; Check the Comparator 2 output GOTO LowSignal ; If C2OUT is low, jump to LowSignal GOTO HighSignal ; If C2OUT is high, jump to HighSignal
LowSignal: ; Hier kannst du den Code ausführen, wenn das Signal niedrig (0V) ist. GOTO Loop
HighSignal: ; Hier kannst du den Code ausführen, wenn das Signal hoch (1V) ist. GOTO Loop
1 |
|
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
Ich will nun wissen ob der Taster gedrückt ist (=1 - 1,5V am Eingang) oder eben nicht gedrückt ist (=0V am Eingang), mehr nicht.
Wo kommen dann die 0V her? Taste nicht gedrückt sorgt erstmal nur für "Spannung undefiniert". Typisch schaltet man daher Tasten gegen GND und enabled den internen Pullup. Der Pullup legt dann High an bei Taste nicht gedrückt.
Ich habe die Specs nicht geändert.
Hast du wohl.
ab >1V ein High meldet und <1V Low
mutiert zu
Vergleichsregister Register FixedRef (???) zB auf 0,5V einstellen
Wo kommt plötzlich der Faktor 2 her?
Typisch schaltet man daher Tasten gegen GND
Das wird die Uhrenbatterie nicht mögen - falsche Schaltung.
Du hast Recht, offener Eingang ist undefiniert. Aber ich könnte hinter dem Taster noch einen Pull down Widerstand an den Eingang legen. ?
Die 0,5V des Vergleichsregisters habe ich gedacht ist ein guter Wert als Schaltschwelle genau auf der Hälfte zwischen 1V und 0V an meinem Eingang. Wie gesagt ich will wissen ob der Taster gedrückt ist oder nicht, mehr nicht. Hab mich anfangs wohl unglücklich ausgedrückt.
Könnte das korrekt sein?
Nein! Das ist eine dumme KI und kein Mensch... :DDD
Ich kann es noch nicht testen.
Aber ins Dabla gugen, solltest du endlich!
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
Aber ich könnte hinter dem Taster noch einen Pull down Widerstand an den Eingang legen. ?
Ja.
Was ist falsch an dem Code?
Die Zeile, in der Schaltschwelle und Hysterese festgelegt werden.
Ich wuerde dazu einen npn Transistor nehmen. Basis ueber ca. 10k an besagten Taster zur Batterie. Ebenfalls ca. 100k von Basis zu GND. C an Eingang des uC, E an GND. Dann noch den internen Pullup des uC Eingangs einschalten. Das Ganze ist jetzt invertiert, aber das sollte ja kein Problem sein.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.