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?
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
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).
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.
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!
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).
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.
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.
... "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
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.
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!
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?
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