Forum: Mikrocontroller und Digitale Elektronik interne Pull-Up's


von mike (Gast)


Lesenswert?

Tach Gemeinde,

Folgende Frage zu den internen Pull-Up's:

Habe diese via
1
DDRC = 0x00;
2
PORTC = 0b00111111;
aktiviert. An den 6 Pins hängen momentan Drähtchen, die ich bei Bedarf 
auf Masse halte um mein Programm zu testen. Was ja nichts anderes ist, 
als wenn die in einem Taster angeklemmt wären.
Jetzt ist es aber so, das wenn ich das Drahtende mit dem Finer berühre 
die programmierte Aktion (Pin 'low' -> state=!state) ausgeführt wird. 
Sollten die internen Pull-Up's nicht genau soetwas verhindern? Der 
Simulator im AVR-Studio sagt mir auch das die Pins gestzt sind.
Sollte ich zur Sicherheit (zusätzliche) externe R's verwenden?

von mike (Gast)


Lesenswert?

Ich würde es ja verstehen, wenn die Pull-Up's NICHT aktiv wären - dann 
hätte ich ja 'fliegende' Pin's. Aber so...?

von Falk B. (falk)


Lesenswert?

Naja, die internen Pull Ups haben so 30-60kOhm, das it schon recht 
hochohmig und kann im Zweifelsfall durch den Körperwiderstand soweit 
runtergezogen werden, dass ein LOW erkannt wird.

von mon (Gast)


Lesenswert?

Nunja, die haben aber schon so 50..80kOhm. Und die Störungen, die du mit 
dem Finger einkoppelst, sind nicht zu unterschätzen.

von mike (Gast)


Lesenswert?

Die Ausgänge schalten sogar wenn ich mit dem Tastkopf (1:1) ran gehe. 
Bei 10:1 bleit alles wie es ist. Na toll, wieder Schaltung und 
Leiterplatte ändern... ;-)

Was meint Ihr sind 10k immer noch zu 'hochohmig'?

von René B. (reneb)


Lesenswert?

PORTC = 0b00111111;

Schau mal ob dein Compiler nicht doch Probleme mit dem 0b.. hat und gib 
mal direkt in Hex oder Dezimal den Wert vor.

Schnapp dir mal nen 47k Widerstand und zieh darüber den Pin gegen Masse. 
Dann mit dem Multimeter mal am Pin messen und in relation zu 
Betriebsspannung den tatsächlichen PullUp-Wert ermitteln. Sollte in etwa 
bei halber Betriebsspannung rauskommen, da die PullUps so bei 50k 
unterwegs sind (Genaugenommen sind es auch keine PullUps, sondern Vcc 
Konstantstromquellen mit 100µA)

Ich vermute aber, dass du bei Berührung nur kurzzeitig und nicht 
dauerhaft den Pin gegen Masse zeihen kannst. Wie ein Kondensator eben. 
Pack also mal eine Entprellung drauf  und schau ob der Effekt dann 
verschwindet.

Nachtrag: Die Nummer mit dem Tastkopf bestätigt die Vermutung, wenn du 
tatsächlich die PullUps aktiv hast, dann unbedingt mal entprellen. Auch 
der Tastkopf hat einen C-Charakter

: Bearbeitet durch User
von mike (Gast)


Lesenswert?

Ich dachte eigentlich das das Entprellung genug wär:
1
if(!(PINC&(1<<Button[i]))){
2
        _delay_ms(250);
3
  if ((PINC&(1<<Button[i]))){
4
    states[i]=!states[i];
5
  }
6
  while (!(PINC&(1<<Button[i]))){
7
    dimm(i);
8
  }        
9
}

von mike (Gast)


Lesenswert?

Aber ich merk's selber gerade....

Der PORT ist für nen winzigen Augenblick low und dann gleich wieder high 
und somit wird natürlich der status gewechselt...

von Falk B. (falk)


Lesenswert?

Also RICHTIGE Entprellung.

von Karl H. (kbuchegg)


Lesenswert?

mike schrieb:
> Aber ich merk's selber gerade....
>
> Der PORT ist für nen winzigen Augenblick low und dann gleich wieder high
> und somit wird natürlich der status gewechselt...

Und was viel schlimmer ist: du koppelst höchst wahrscheinlich mit deinem 
Finger (und deinem Körper) eine 50Hz Wechselspannung ein. D.h. du hast 
es nicht mit einem einzelnen Fehlpuls zu tun, sondern mit einer 
'Dauerstörung'.

von Cyblord -. (cyblord)


Lesenswert?

Und Achtung, einige neuere AVRs haben separate Register für die Pullups. 
Da geht das so wie oben nicht mehr. Tiny841 z.B.

gruß cyblord

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.