mikrocontroller.net

Forum: Compiler & IDEs Pull-Up-Problem: Falscher Code?


Autor: AVR-Beginner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich bin ziemlich unerfahren auf dem Gebiet der MC-Programmierung. 
Momementan wollte ich ganz einfach mit ner Matrixtastatur anfangen. 
Eigentlich kann das ja nicht so schwer sein. Mein (Spaghetti)Code 
funktioniert sogar, aber so toll das auch alles ist, mir scheint es, als 
würden die Eingangspinne ohne Pegel liegen: Zwar nicht, wenn ich mit dem 
Finger an den Kontakt komme, aber immerhin wenn ich ein Kabel in der 
Hand halte und einen Eingangspin berühre, reagiert der ATmega16.
Sicherheitshalber frage ich lieber noch: Das passiert nur, wenn der 
interne Pull-Up aus ist, oder?

Ich missbrauche den Port A meines ATmega16 für diesen Zweck. Dazu habe 
ich das untere Nibble, die unteren 4 Pins, als Ausgänge geschaltet, 
während die restlichen Pins Eingänge sind:
DDRA = 0x0F;
In einer Schleife verwende ich folgendes Konstrukt:
PORTA = 0xFF & ~(1<<mtx_row);
Damit soll erreicht werden, dass bei allen Eingängen der Pull-Up 
aktiviert wird und alle Ausgänge auf High geschaltet werden sollen, bis 
auf den Ausgang mit dem Offset mtx_row.
Ist das falsch?

Vielen Dank!

Autor: Günter R. (galileo14)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
AVR-Beginner wrote:
> Ich missbrauche den Port A meines ATmega16 für diesen Zweck.

Mißbrauch würde ich das nicht nennen. Diese Verwendung akzeptiert der 
Prozessor jederzeit.

> Dazu habe
> ich das untere Nibble, die unteren 4 Pins, als Ausgänge geschaltet,
> während die restlichen Pins Eingänge sind:
> DDRA = 0x0F;
> In einer Schleife verwende ich folgendes Konstrukt:
> PORTA = 0xFF & ~(1<<mtx_row);
> Damit soll erreicht werden, dass bei allen Eingängen der Pull-Up
> aktiviert wird und alle Ausgänge auf High geschaltet werden sollen, bis
> auf den Ausgang mit dem Offset mtx_row.
> Ist das falsch?

Ich denke mal, das ist richtig so und müßte funktionieren. Die Pullups 
sind recht schwach, ca. 50 kOhm, und somit könnten die Eingänge auf 
Störsignale von außen reagieren (immerhin bist Du eine große Antenne); 
ich würde daher mit den Fingern keine Eingangspins berühren, außer, ich 
habe mich an der System-Masse geerdet.

Ein Gesichtspunkt vielleicht noch: wenn Du alle unteren Ausgangspins 
gleichzeitig als Ausgänge programmierst, könnte es passieren, daß ein 
Benutzer gleichzeitig mehrere Tasten drückt; das könnte zu einem 
Kurzschluß zwischen Ausgangspins führen. Ich würde daher immer nur den 
Ausgangspin wirklich auf Ausgang programmieren, der gerade low wird, 
alle anderen jedoch auf Eingang, aber auch mit Pullup. So kanns keine 
Kurzschlüsse geben.

Autor: Skua (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Deshalb entkoppelt man klassischerweise mit Dioden.

Autor: Günter R. (galileo14)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die kann man sich aber sparen, wenn man es so macht, wie ich es 
beschrieben habe.

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.