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


von AVR-Beginner (Gast)


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!

von Günter R. (galileo14)


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.

von Skua (Gast)


Lesenswert?

Deshalb entkoppelt man klassischerweise mit Dioden.

von Günter R. (galileo14)


Lesenswert?

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

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.