Forum: Mikrocontroller und Digitale Elektronik PIC16F628a - interne Pull-Ups und Sleep-Mode?


von Dominik (Gast)


Lesenswert?

Hallo,

ich möchte gerne dem PIC über einen 4pol DIP-Schalter gegen GND 
kodieren. Dazu würde ich die Pullups PortB einschalten und RB0-RB3 
auswerten. Der Pic soll die größte Zeit im Sleep-Mode sein und nur durch 
RB4-Tastendruck geweckt werden, seine codierte Funktion ausführen und 
wieder in den Sleep-Mode gehen.
Ich gehe davon aus, dass die Pull-Ups auch im Sleep-Mode aktiv sind? 
Sonst könnte ich den Pic kaum über RB4 Taster gegen GND wecken. Wenn ich 
über den Dip-Schalter jetzt aber einzelne PINs auf Masse habe, 
verbraucht der PIC Strom über die Pullups? (laut Datenblatt 200uA pro 
Pin).
Da ich das ganze über eine 3V Knopfzelle betreiben möchte, wäre das 
nicht gut. Die Pull-Ups kann man laut Datenblatt auch nicht einzeln 
abschalten, außer man schaltet den jeweiligen Pin auf Output um (was 
jeweils vor sleep ja möglich ẅare). Allerdings wäre es sicher eine 
schlechte Idee, wenn ein Pin, der niederohmig gegen GND gezogen ist, auf 
Output umgeschaltet wird?

von Anja (Gast)


Lesenswert?

Hallo,

Ich würde die DIL-Schalter am anderen Ende gegen den Taster hängen.
(sind dann natürlich nur auswertbar solange der Taster gedrückt ist).

Gruß Anja

von John (Gast)


Lesenswert?

Für den Taster einen externen Pull-Up verwenden: dann kannst du die 
internen Pull-Ups abschalten bevor du Sleep aktivierst (und nach den 
Aufwecken wieder einschalten).

von Kastanie (Gast)


Lesenswert?

oder falls du noch einen Pin frei hast, diesen als geschalteten GND für 
die DIL-Schalter während der Aktivzeit verwenden.

von Thomas E. (picalic)


Lesenswert?

Dominik schrieb:
> Allerdings wäre es sicher eine
> schlechte Idee, wenn ein Pin, der niederohmig gegen GND gezogen ist, auf
> Output umgeschaltet wird?

Wieso?
Wenn der Pin auf "Out-Low" geschaltet ist, sehe ich da kein Problem!
D.h. erst 0 ins PORTB-Register schreiben (per "write" operation - keine 
"read-modify-write" verwenden, also auch nicht BCF), dann mit TRISB auf 
Ausgang, und dann in Sleep.

von Dominik (Gast)


Lesenswert?

Kastanie schrieb:
> oder falls du noch einen Pin frei hast, diesen als geschalteten
> GND für
> die DIL-Schalter während der Aktivzeit verwenden.

Danke für den Tipp! Die Idee gefällt mir am besten und so werde ich es 
machen!

von Dominik (Gast)


Lesenswert?

Thomas E. schrieb:
> Dominik schrieb:
>> Allerdings wäre es sicher eine
>> schlechte Idee, wenn ein Pin, der niederohmig gegen GND gezogen ist, auf
>> Output umgeschaltet wird?
>
> Wieso?
> Wenn der Pin auf "Out-Low" geschaltet ist, sehe ich da kein Problem!
> D.h. erst 0 ins PORTB-Register schreiben (per "write" operation - keine
> "read-modify-write" verwenden, also auch nicht BCF), dann mit TRISB auf
> Ausgang, und dann in Sleep.

Sehen das alle so? Der PIC könnte aus irgendeinen Grund ja mal 
durcheinander kommen (leere Batterie an der Spannungsgrenze, bzw. 
Spannungseinbruch durch Verbraucher) bzw. ein Programmierfehler 
passieren (falsches Programm reingeladen).

von Thomas E. (picalic)


Lesenswert?

Dominik schrieb:
> Der PIC könnte aus irgendeinen Grund ja mal
> durcheinander kommen

Selbst wenn das mal passieren sollte, dann spricht viel dafür (u.A. auch 
praktische Erfahrung ;)), daß der Ausgang davon nicht gleich kaputt 
geht.
Die Highside FETs der Port-Ausgänge sind nicht besonders kräftig, bei 3V 
VCC erst recht nicht. Da wird der Ausgangsstrom selbst bei Kurzschluss 
gegen GND keine extremen Werte annehmen und Du wirst den damit kaum 
kaputt kriegen. Zudem liefert so eine Li-Knopfzelle sowieso nur ein paar 
mA.
Sonst könntest Du notfalls auch noch einen Angst-Widerstand in die 
GND-Leitung der DIP-Schalter oder in die Versorgungsspannung zum PIC 
legen (z.B. 100 Ohm). Im Normalbetrieb ist der Spannungsabfall am 
Widerstand vernachlässigbar, im Kurzschlussfall aber der Strom auf 
unschädliche Werte begrenzt oder führt sofort zum Brownout-Reset. Zudem 
ist so ein Widerstand in der VCC-Leitung recht praktisch, um schnell mal 
mit dem Multimeter im Millivolt-Bereich die Stromaufnahme des µC zu 
kontrollieren (ist er wirklich im Sleep? Nimmt er evtl. mehr Strom auf, 
als erwartet? usw.)
Aber ich halte das nicht für notwendig - durch Kurzschluss nach GND 
hatte ich noch nie einen defekten Ausgang, ESD ist da für den Port 
sicher um Größenordnungen gefährlicher.

: Bearbeitet durch User
von jemand (Gast)


Lesenswert?

Thomas E. schrieb:
> Die Highside FETs der Port-Ausgänge sind nicht besonders kräftig, bei 3V
> VCC erst recht nicht. Da wird der Ausgangsstrom selbst bei Kurzschluss
> gegen GND keine extremen Werte annehmen und Du wirst den damit kaum
> kaputt kriegen.

Falsch.
Ich habe das schon geschafft, mehrfach. Insebesondere bei 5V macht es 
schnell "patsch" wenn man einen PIC (in meinem konkreten Fall 
PIC24FV32KA301) gegen GND treiben lässt.

Hab das so zweimal auf dem Breadboard hinbekommen. Es mag 
Exemplarabhängig sein, möglich ist es aber.

Also Vorsicht.

Mein "Trick" dagegen: Serienwiderstand zu Ports, die auf Stiftleisten 
gehen.
z.B. für 5V 470Ohm, für 3V3 220Ohm.

von Apollo M. (Firma: @home) (majortom)


Lesenswert?

... "schlau" ist das alles nicht im sinne von low current im sleep mode.

weil best wäre im sleep mode immer port pins als analog input (100mohm) 
zu setzen und externe mohm pull-up/downs! daher hier port-a pins 
verwenden, wo das geht.

interne pull-ups (so max 50k) verwendet man nicht, wenn ua zählen, 
sondern externe im mohm bereich.


mt

von Thomas E. (picalic)


Lesenswert?

Apollo M. schrieb:
> interne pull-ups (so max 50k) verwendet man nicht, wenn ua zählen,
> sondern externe im mohm bereich.

Ist Deine Shift-Taste kaputt? Hat wohl zu hochohmige Pull-Ups 
eingebaut... :D
Milliohm-Widerstände bei Strömen in µA Bereich wären auch nicht so 
schlau!

Nein, Megaohms wären mir zu störanfällig. Für Schaltkontakte/Taster ist 
oft 20-30k schon zuviel, weil die Kontakte evtl. einen gewissen 
Mindeststrom haben wollen. Und es ist gar nicht notwendig, im 
Sleep-Modus Strom durch die Pull-Ups zu schicken, wenn man die Ports vor 
dem Sleep-Modus entsprechend umschaltet. Man kann auch z.B. einen 5k 
PullUp nehmen und zum Stromsparen nur 10µs pro Sekunde zum Auswerten des 
Schalters bestromen, dann ist der effektive Wert des Widerstands 500 
Megaohm! Das scheint mir schlauer zu sein, als eine Schaltung zu haben, 
die bei ein wenig Feuchtigkeit aussteigt, aber die Batterie trotzdem 
ständig mit mehreren µA leersaugt.

: Bearbeitet durch User
von picfan (Gast)


Lesenswert?

Hallo,
wäre nicht ein PORTB - change on interrupt (IOC) eine sehr stromsparende 
Möglichkeit?
gruss Jochen-Paul

von Thomas E. (picalic)


Lesenswert?

picfan schrieb:
> wäre nicht ein PORTB - change on interrupt (IOC) eine sehr stromsparende
> Möglichkeit?

Für was? Es geht doch in erster Linie um DIP-Switches. IOC erkennt 
Änderungen des Input-Levels, kann aber das Grundproblem, daß man Strom 
über einen Pullup-Widerstand durch den ggf. geschlossenen Schalter 
schicken muss, um seine Schalterstellung zu erkennen, nicht lösen!

von picfan (Gast)


Lesenswert?

mit einem Umschalter d.h. von Z.b. +5v zu GND pro PIN sollte das ohne 
nennenswerten Strom und ohne Pullups funktionieren.
Gruss Jochen-Paul

von Dominik (Gast)


Lesenswert?

picfan schrieb:
> mit einem Umschalter d.h. von Z.b. +5v zu GND pro PIN sollte das
> ohne
> nennenswerten Strom und ohne Pullups funktionieren.
> Gruss Jochen-Paul

Gibt es denn DIP-Switches mit Umschalter?

von picfan (Gast)


Lesenswert?

Dominik schrieb:
> Gibt es denn DIP-Switches mit Umschalter?
Ich habe jedenfalls welche, allerdings weiss ich nicht mehr 
woher(wahrscheinlich aus China, ebay).
Gruss Picfan

von Picfan (Gast)


Lesenswert?


von Thomas E. (picalic)


Lesenswert?

Das verstehst Du unter DIP-Switch?
Üblicherweise meint man mit DIP-Switches sog. "Mäuseklaviere", wie die 
hier:
https://www.ebay.de/itm/DIP-Schalter-Kodierschalter-Switch-2-4-6-8-10-und-12-fach-polig-Codier-Mini/271245120238?hash=item3f277812ee:m:mylU4G0B17BZMzY_QgqATkg
Die sind als Umschalter äußerst unüblich...

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.