Forum: Mikrocontroller und Digitale Elektronik PIC12C508 GP state 1 oder 0


von Conrad P. (conrad_p)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich beschäftige mich mit Elektronik schon seit Jahre, mit 
Mikrocontroller habe ich aber noch gar keine Erfahrung und deshalb würde 
ich um eure Hilfe bitten. Es ist eine reine total-Anfänger Frage, also 
ich bitte auch um Verständnis...
So, ich möchte mir ein Timer (Zeitschaltuhr) bauen und habe mich für die 
beigefügte, einfache Schaltung entschieden. Mir ist nur eins nicht klar: 
um   die "Shut-off" Zeit einzustellen, muss man die GP A,B,C,D 
entsprechen umschalten -> 1 oder 0 states... Wie kann ich bei ein GP 
state 0 oder 1 auswählen? Wenn ich, z.B., A mit Masse (Ground) verbinde, 
produziere ich state 1 oder 0? Oder soll ich mir vorstellen, dass ich 
für state 1, A mit "+" verbinden soll und für 0 mit "ground"? Ich frage 
lieber, bevor ich etwas falsch mache und den PIC12C508 zerstöre...
Ich bedanke mich im Voraus für eure Hilfe.

Conrad

von Volker S. (vloki)


Lesenswert?

Ist das ein Bausatz und das Programm ist schon im uC drin?

Zerstören kannst du eigentlich nichts, nur die Zeit wird nicht dem 
entsprechen, was du wolltest.

Mit A-B-C-D kann man wohl 16 verschiedene Zeiten einstellen. Entweder 
ist die längste Zeit bei Verbindung von Allen mit GND (0) oder eben bei 
Verbindung mit VDD (1).

Gibt es da keine Beschreibung?

von hinz (Gast)


Lesenswert?

Volker S. schrieb:
> Ist das ein Bausatz und das Programm ist schon im uC drin?

https://m.eet.com/media/1148324/21975-81700di.pdf

von Conrad P. (conrad_p)


Lesenswert?

Das ist eine Schaltung, die ich hier gefunden habe (ich hoffe ich darf 
Links einfügen):

https://www.edn.com/design/analog/4359064/Timer-automatically-shuts-off

Das Programm wird reingeschrieben (ist auch auf der Seite vorhanden).

Also verstehe ich richtig, "0" state wird "erzeugt" wenn ich die GPs mit 
(-) verbinde und "1" wenn ich sie mit (+) verbinde?

von Volker S. (vloki)


Lesenswert?

Conrad P. schrieb:
> Also verstehe ich richtig, "0" state wird "erzeugt" wenn ich die GPs mit
> (-) verbinde und "1" wenn ich sie mit (+) verbinde?
Würde ich jetzt mal so annehmen.

Du hast ein Programmiergerät zum "Reinschreiben" des Programms?

von Conrad P. (conrad_p)


Lesenswert?

Volker S. schrieb:
> Du hast ein Programmiergerät zum "Reinschreiben" des Programms?

Ja, ich habe ein K150 USB Programmiergerät.

von Mekerle (Gast)


Lesenswert?

Die Schaltung ist Käse, keine Antiparaleldiode am Relais, der GPIO wird 
sich sicher freuen.

Besser wäre es das Relais mit einem Transistor (BC547C) über nur einen 
GPIO zu Schalten.

von Conrad P. (conrad_p)


Lesenswert?

Volker S. schrieb:
> Würde ich jetzt mal so annehmen.

Kann noch jemand das so bestätigen?

von Conrad P. (conrad_p)


Lesenswert?

Mekerle schrieb:
> Die Schaltung ist Käse, keine Antiparaleldiode am Relais, der GPIO wird
> sich sicher freuen.
>
> Besser wäre es das Relais mit einem Transistor (BC547C) über nur einen
> GPIO zu Schalten.

Hättest Du einen entsprechenden Schaltungsvorschlag?

von hinz (Gast)


Lesenswert?

Mekerle schrieb:
> Die Schaltung ist Käse, keine Antiparaleldiode am Relais, der GPIO
> wird
> sich sicher freuen.

Die Dioden sind im µC schon drin.

von hinz (Gast)


Lesenswert?

Conrad P. schrieb:
> Volker S. schrieb:
>> Du hast ein Programmiergerät zum "Reinschreiben" des Programms?
>
> Ja, ich habe ein K150 USB Programmiergerät.

Nimm dennoch einen 12F508, der lässt sich nicht nur einmal 
programmieren.

von Conrad P. (conrad_p)


Lesenswert?

hinz schrieb:
> Nimm dennoch einen 12F508, der lässt sich nicht nur einmal
> programmieren.

Habe ich zum Glück auch gleich mitbestellt, sollen die Tage da sein. 
Muss ich aber nicht das Programm "adaptieren", oder ist kompatibel?

von Noch einer (Gast)


Lesenswert?

> Also verstehe ich richtig, "0" state wird "erzeugt" wenn ich die GPs mit
> (-) verbinde und "1" wenn ich sie mit (+) verbinde?

Anscheinend hat der PIC12C508 keine internen Pull-up Widerstände für die 
Eingänge. Somit musst du die Pins auf jeden Fall verbinden. Die Eingänge 
fangen sonst Störungen ein. Du kannst dich nicht darauf verlassen, dass 
ein offener Eingang 0 oder 1 hat.

Programm auf 12F508 adaptieren? Meistens ein paar Stunden Aufwand. Die 
moderneren haben mehr Peripherie und mehr Möglichkeiten. Deine 
Initialisierung muss das Neue zuerst abschalten, damit das Alte wieder 
funktioniert. Die Datenblätter nebeneinander halten und jeden 
Unterschied genau kontrollieren. Nervtötende Arbeit.

Normalerweise nimmt man für 0 eine Drahtbrücke nach Masse. Und für 1 
einen 1k Widerstand an die Versorgungsspannung. Wahrscheinlich nehmen da 
alle einen Widerstand, weil man da schon immer einen Widerstand genommen 
hat.

Direkt am Ausgangspin kannst du nur Relais nehmen, die mit 20mA 
auskommen. Freilaufdiode parallel zur Spule brauchst du auf jeden Fall. 
Gibt auch Relais mit eingebauter Freilaufdiode.
https://www.reichelt.de/Reedrelais/DIP-7212-D-5V/3/index.html?ARTICLE=27651

von Volker S. (vloki)


Lesenswert?

Conrad P. schrieb:
> hinz schrieb:
>> Nimm dennoch einen 12F508, der lässt sich nicht nur einmal
>> programmieren.
>
> Habe ich zum Glück auch gleich mitbestellt, sollen die Tage da sein.
> Muss ich aber nicht das Programm "adaptieren", oder ist kompatibel?

Bei dem Programm hast du vermutlich Glück und es läuft einfach so ;-)



Mekerle schrieb:
> Die Schaltung ist Käse...

Ich hätte ja eher gesagt, das Programmiergerät ist Käse ;-)
Ein PICkit3 Klon inklusive des Programmiersockels hätte es vermutlich 
für's gleiche Geld auch gegeben. Damit kann man eigentlich alle 
aktuellen PICs direkt aus der IDE raus programmieren.
Die meisten kann man auch debuggen. Die ganz kleinen  wie den 12F508 
nicht, weil das bei so wenigen Pins wenig Sinn macht, wenn der Debugger 
noch 3 Pins belegt...

von hinz (Gast)


Lesenswert?

Noch einer schrieb:
> Anscheinend hat der PIC12C508 keine internen Pull-up Widerstände für die
> Eingänge.

Ach wo, die hat der drin.


> Programm auf 12F508 adaptieren? Meistens ein paar Stunden Aufwand.

Nicht mal ein paar Sekunden.

von Noch einer (Gast)


Lesenswert?

> Die ganz kleinen wie den 12F508 nicht

Na ja, für 50€ bekommst du einen Debug Header.

von Volker S. (vloki)


Lesenswert?

hinz schrieb:
> Ach wo, die (pull-ups) hat der drin.
Nur zwei :-(

Noch einer schrieb:
>> Die ganz kleinen wie den 12F508 nicht
>
> Na ja, für 50€ bekommst du einen Debug Header.
Eher für die Hälfte, aber das lohnt sich trotzdem nur für Profis ;-)

von hinz (Gast)


Lesenswert?

Volker S. schrieb:
> hinz schrieb:
>> Ach wo, die (pull-ups) hat der drin.
> Nur zwei :-(

Nö, nur an GP2 nicht.

von HildeK (Gast)


Lesenswert?

Mekerle schrieb:
> Die Schaltung ist Käse, keine Antiparaleldiode am Relais, der GPIO wird
> sich sicher freuen.
Ja, Dioden wären sinnvoll. Trotzdem ist die Schaltung kein Käse.

> Besser wäre es das Relais mit einem Transistor (BC547C) über nur einen
> GPIO zu Schalten.
Das ist ein bistabiles Relais, dass im Ein- oder Aus-Zustand keinen 
Strom verbraucht.

von Volker S. (vloki)


Lesenswert?

> Nö, nur an GP2 nicht.

OK, dann 3. (GP4 und GP5 auch nicht, aber die sind ja hier Ausgang)

von Hmm (Gast)


Lesenswert?

hinz schrieb:
> Mekerle schrieb:
>> Die Schaltung ist Käse, keine Antiparaleldiode am Relais, der GPIO
>> wird
>> sich sicher freuen.
>
> Die Dioden sind im µC schon drin.

Jaja, das ist aber nur für "Notfälle".
Wundee dich nicht, wenn der PIC also selstame Dinge tut, wenn du das im 
Normalbetrieb machst ;-)

Das ist der Unterschid zwischen "Absolut Maximum Ratings" und 
"Recommendet operating conditions".
Beim Ersten wird der PIC nicht kaputt, kann aber komische Sachen tun. 
Beim zweiten garantiert Microchip die Funktion.

--> Wer nicht gerne sehr seltsame Fehler sucht, lässt das besser bleiben 
;-)

Der Tipp mit dem Transistor ist gut. Mein Tipp ist: ein 2N7002 zum 
Schalten des Relais, ein Pulldown, und dazu z.B. eine LL4148 als 
Freilaufdiode.
Der Port des PIC kann außerdem nicht beliebig Strom liefern. Mehr als 
ein paar zig mA kommen da nicht heraus. Das ist ein weiterer Grund für 
den 2N7002.

von Peter D. (peda)


Lesenswert?

Mekerle schrieb:
> Die Schaltung ist Käse

Stimmt.
Zum Ausschalten die VCC über 220µF kurzzuschließen ist völliger Mumpitz.
Je nach Power der 5V kann es die 1N4148 zerstören oder den Relaiskontakt 
verschweißen.
Diese Schaltung hat sich definitiv ein Maker ausgedacht.

Moderne MCs haben einen Power-Down-Mode, wo sie nur <1µA verbrauchen. 
Der MC kann also einfach ständig an der Batterie verbleiben und die Last 
schaltet man dann über einen MOSFET zu.

: Bearbeitet durch User
von Conrad P. (conrad_p)


Lesenswert?

Ok, jetzt bin ich mir nicht mehr sicher, dass diese Schaltung auch 
(zuverlässig) funktioniert ...
Wegen Relais steuerung, ich habe mir eine ziemlich ähnliche Schaltung 
bei Conrad angeguckt (siehe Bestell-Nr.: 409654 - 62), da könnte ich 
doch auch ein BD139 davor schalten und zus. eine Diode parallel mit 
Relais, oder sehe ich das falsch?
Mir hat sehr gut gefallen, dass ein bistabiles Relais benutzt wurde, um 
keinen Strom in den beiden Zustände zu verbrauchen, aber, wie ich sehe, 
man hält auch die Lösung mit dem Elko für "Käse"... Gibt es da auch eine 
(einfache) bessere Lösung?

von Jens G. (jensg)


Lesenswert?

Folgt man ein wenig den Links so kommt man auf folgende Idee. Die aus 
meiner Sicht schon viel besser aussieht. (Wenn es ein Relais sein soll)

https://www.edn.com/design/analog/4363545/Circuit-extends-battery-life

Auch ein Taster währe möglich -- im ausgeschalteten Zustand ist der 
Strom I=0µA.

: Bearbeitet durch User
von Ottmar K. (wil1)


Lesenswert?

@Conrad Pelt (conrad_p)

Hallo, habe mir mal einige Gedanken gemacht und kurz recherchiert.

Ich fasse mal zusammen:
Der PIC12C508 ist ein uralter Typ und kann nur einmal programmiert 
werden. Fuer einen Anfaenger absolut ungeeignet.

Der PIC12F508 hingegen hat die gleichen Eigenschaften wie der 12C508, 
ist aber moderner und kann einige tausend Mal programmiert werden.

Wenn Du weiterhin MCU der PIC-Serie programmieren moechtes, vergiss all 
die anderen Programmiergeraete und besorg Dir ein PICkit3 und Du bist in 
dieser Hinsicht voll geruestet.

Das Programm kann auch fuer den PIC12F508 verwendet werden, es brauchen 
nur die Zeilen
    LIST     p=12c508
    #include <p12c508.inc>
gegen
    LIST     p=12F508
    #include <p12F508.inc>
ausgetauscht zu werden. Beim Test im MPLAB-Simulator laeuft es 
fehlerfrei durch.

Die Daten zum Relais AGN2104H (AGN2104N war nicht auffindbar)
findet man hier:
https://www.digikey.com/product-detail/en/panasonic-electric-works/AGN2104H/255-1857-ND/644786
Kontaktbelastung (nur resistiv) 125V AC/0,3A bzw. 30V DC/1A

Zu beachten ist, dass der maximale Strom (Grenzwert) in/aus einem 
Portpin des 12F508 20mA betragen darf.
Die Relaisspule zieht jedoch den Nennstrom von 22,5mA bei U=4,5V

Der Betrieb an einem GPIO-Pin ist also grenzwertig.

Beim Relais (single coil) erfolgt der Schaltvorgang durch Umpolen der 
Speisespannung. Intern wird da ein Permanentmagnet bewegt, der den 
magnetischen Fluss aufrecht erhaelt, um den Kontakt in der aktuellen 
Position stromlos angezogen zu halten) Also darf als Freilaufdiode keine 
normale Diode, z.B.1N4148 verwendet werden. Zwei gegensinnig in Reihe 
geschaltete Z-Dioden z.B 4,7V muessten dann Verwendung finden werden.

Zum Schalten der GPIO A B C D verwendest Du am einfachsten einen 
Codierschalter, der 16 Schalterstellungen in den entsprechenden HEX-Code 
an seinen Anschluessen 1 2 3 4 ausgibt. Beisspielsweise hier:

https://www.reichelt.de/Dip-Kodierschalter/RND-210-00250/3/index.html?ACTION=3&LA=446&ARTICLE=209561&GROUPID=7598&artnr=RND+210-00250&SEARCH=Codierschalter

Vielleicht bringt Dich das ein wenig weiter.

mfG Ottmar

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.