Forum: Mikrocontroller und Digitale Elektronik PIC12F617 Eingang soll Ab 1V high melden.


von Torsten R. (torsten_r674)


Lesenswert?

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

von Vanye R. (vanye_rijan)


Lesenswert?

> 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

von Peter D. (peda)


Lesenswert?

Torsten R. schrieb:
> Und welcher Eingang ist dafür am besten geeignet?

Ein ADC-Eingang.

: Bearbeitet durch User
von Dietrich L. (dietrichl)


Lesenswert?

Torsten R. schrieb:
> 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.

von Joe L. (joelisa)


Angehängte Dateien:

Lesenswert?

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 ...

: Bearbeitet durch User
von Frank E. (ffje)


Lesenswert?

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

: Bearbeitet durch User
von Torsten R. (torsten_r674)


Lesenswert?

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?

von Joe L. (joelisa)


Lesenswert?

Torsten R. schrieb:
> 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!

von Teo D. (teoderix)


Lesenswert?

Torsten R. schrieb:
> 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


Joe L. schrieb:
> Wenn ICH das richtig verstanden habe,

Haste nich.

von Rainer W. (rawi)


Lesenswert?

Torsten R. schrieb:
> 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

von Torsten R. (torsten_r674)


Lesenswert?

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.

von Torsten R. (torsten_r674)


Lesenswert?

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

    ORG     0x00        ; Reset vector
    GOTO    Main

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

    BSF     CMCON0, C2OE ; Enable Comparator 2
    BCF     CMCON0, C2OUT; Clear Comparator 2 output (C2OUT)

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

    END
```

In diesem  Code wird der Komparator 2 (C2) verwendet, um das 
Eingangssignal mit der fixen internen Referenzspannung von 1,024V 
verglichen.
Wenn der Ausgang des Komparators 2 hoch ist (das Eingangssignal höher 
als die Referenzspannung), wird der HighSignal-Abschnitt ausgeführt, 
andernfalls der LowSignal-Abschnitt.

Bitte beachte, dass der PIC12F617 eine feste Referenzspannung hat, die 
nicht geändert werden kann. Du kannst den Code verwenden, um den Zustand 
des Eingangssignals zu überwachen und entsprechend darauf zu reagieren."


Könnte das korrekt sein? Ich kann es noch nicht testen.

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Torsten R. schrieb:
> 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.

von Rainer W. (rawi)


Lesenswert?

Torsten R. schrieb:
> Ich habe die Specs nicht geändert.

Hast du wohl.

Torsten R. schrieb:
> ab >1V ein High meldet und <1V Low

mutiert zu

Torsten R. schrieb:
> Vergleichsregister Register FixedRef (???) zB auf 0,5V einstellen

Wo kommt plötzlich der Faktor 2 her?

von Rainer W. (rawi)


Lesenswert?

Peter D. schrieb:
> Typisch schaltet man daher Tasten gegen GND

Das wird die Uhrenbatterie nicht mögen - falsche Schaltung.

von Torsten R. (torsten_r674)


Lesenswert?

Du hast Recht, offener Eingang ist undefiniert. Aber ich könnte hinter 
dem Taster noch einen Pull down Widerstand an den Eingang legen. ?

von Torsten R. (torsten_r674)


Lesenswert?

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.

von Teo D. (teoderix)


Lesenswert?

Torsten R. schrieb:
> Könnte das korrekt sein?

Nein! Das ist eine dumme KI und kein Mensch... :DDD

Torsten R. schrieb:
> Ich kann es noch nicht testen.

Aber ins Dabla gugen, solltest du endlich!
1
 2010 Microchip Technology Inc. DS41302D-page 67
2
PIC12F609/615/617/12HV609/615
3
9.0 COMPARATOR MODULE
4
The comparator can be used to interface analog
5
circuits to a digital circuit by comparing two analog
6
voltages and providing a digital indication of their
7
relative magnitudes. The comparator is a very useful
8
mixed signal building block because it provides analog
9
functionality independent of the program execution.
10
The Analog Comparator module includes the following
11
features:
12
 Programmable input section
13
 Comparator output is available internally/externally
14
 Programmable output polarity
15
 Interrupt-on-change
16
 Wake-up from Sleep
17
 PWM shutdown
18
 Timer1 gate (count enable)
19
 Output synchronization to Timer1 clock input
20
 Programmable voltage reference
21
 User-enable Comparator Hysteresi

von Peter D. (peda)


Lesenswert?

Torsten R. schrieb:
> Aber ich könnte hinter
> dem Taster noch einen Pull down Widerstand an den Eingang legen. ?

Ja.

von Torsten R. (torsten_r674)


Lesenswert?

Teo D. schrieb:
> Nein! Das ist eine dumme KI und kein Mensch... :DDD

Was ist falsch an dem Code?

von Rainer W. (rawi)


Lesenswert?

Torsten R. schrieb:
> Was ist falsch an dem Code?

Die Zeile, in der Schaltschwelle und Hysterese festgelegt werden.

von Andreas B. (bitverdreher)


Lesenswert?

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.

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.