interne Pull-Up's

Gast #3618466
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?
Gast #3618486
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'?
#3618493
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
Gast #3618499
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
}
#3618532
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'.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.