mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Kann ein interner Pull-Up durchbrennen?


Autor: papa_of_t (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo allerseits, ich beobachte an meinem Mega8 ein seltsames Verhalten:
Alles funktioniert bestens, aber der interne Pull-Up-Widerstand an INT0
scheint nicht zu funktionieren - kann der durchbrennen? Ich benutze
Bascom und ein Programm, das INT0 und INT1 verwendet. Zum Auslösen
ziehe ich die Ports einfach mit einem Taster auf Masse. So
initialisiere ich:

Ddrd = &B11000000   'Ddrd = Bits(led_rot , Led_gruen)
Portd = &B00001100  'pullup auf int0 und int1

Es passiert manchmal, daß sofort nach Programmstart ode auch ohne
Tastendruck (natürlich nach Aktivierung der Interrupts etc.) INT0
ausgelöst wird. Wenn ich einen externen Pull-Up-Widerstand (10kOhm) auf
den Port lege, passiert das nicht. Die Initialisierung für die internen
Pull-Ups ist doch richtig so, oder? grübel

Autor: TravelRec. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die internen Pull-Ups können soo einfach nicht kaputt gehen. Sie sind
relativ hochohmig (so im 50k-Bereich), so daß bei viel Elektro-Dreck in
der Umgebung eine Störung auftreten kann, die genug Power liefert, um
den Pin auf 0 zu ziehen. Check doch mal Dein Layout (Oszi).

Autor: Ppp Mmm (sanic)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Problem hatte ich auch mit einem neuen AVR ( also nicht lange dran
rumgewurschtelt ).
Der externe Pullup hat dann geholfen. Deswegen verbaue ich den jetzt
immer bei interruptsensiblen Ports zur Sicherheit.

Grüße

Autor: Nicky (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
könnte es eventuell sein, dass du an irgendeiner stelle port d mit einem
wert beschreibst und dabei die bit für pull up löschst?

Autor: papa_of_t (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Nicky:
Das tue ich schon, aber nur bitweise meiner Meinung nach:

Portd.7 = 0
Portd.6 = 0

Das sollte die restlichen Ports nicht ändern, oder?

Aber gut zu wissen, daß Patrick das Problem auch hatte. Ich werde mal
einen langen Draht an INT0 anschließen und testen.

Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>>könnte es eventuell sein, dass du an irgendeiner stelle port d mit
einem wert beschreibst und dabei die bit für pull up löschst?

ein sehr beleibter "Trick" dafür ist

ldi TEMP2,0b11110000  ;nur höhere Bit setzen
in  TEMP1,PIND        ;Port lesen
or  TEMP1,TEMP2       ;"es werden ja nur Pins gesetzt"
out PORTD,TEMP1       ;Port schreiben

Wenn jetzt beim lesen int0 zufällig low war, wird er wieder mit low
zurückgeschrieben und der PullUp ist aus, obwohl Du Dir keiner Schuld
bewußt bist.

Sven

Autor: Peter Dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Pullups schaltest Du ja erst per Software ein, inzwischen kann aber
schon auf dem INT-Pin eine Flanke erkannt worden sein und das
Interrupt-Flag wurde gesetzt. Wenn nun der Interrupt enabled wird, dann
springt er auch sofort den Handler an.

Deshalb sollte man immer erst das Interrupt-Flag löschen (1
reinschreiben !), bevor man einen Interrupt freigibt.

Dem Interrupt ist es nämlich völlig egal, wann das Flag gesetzt wurde
(kann vor 10 Jahren gewesen sein). Sobald er freigegeben wird und das
Flag gesetzt war, löst er aus.


Peter

Autor: papa_of_t (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Peter, das klingt sehr plausibel und würde auch erklären, warum
der Effekt bei Programmstart häufiger auftrat! Ich werde es probieren.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.