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!
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.