PIC16F628a - interne Pull-Ups und Sleep-Mode?

Gast #5495714
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?
#5495838
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.
Gast #5495866
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).
#5495929
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.
Gast #5497317
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.
(Firma: @home) #5497396
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
#5497403
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.
#5508778
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!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren