Beiträge von zschunky im Thema „C64 Tastatur auslesen (ATMega16)“

    Eine gedrückte Taste ist ziemlich hochohmig, vor allem im fortgeschrittenen Alter. Die Teile haben immerhin 25 bis 35 Jahre auf dem Buckel! Möglicherweise sidn die Pull-Ups im AVR zu niederohmig und man bekommt den Port-Pin nicht weit genug runter gezogen für ein sicheres Low. Die CIA und VIA mit ihren NMOS-Pegeln und relativ schwachen Pull-Ups könnten da im Vorteil sein.

    Die Pullupps bei dem Atmega sind im Datenblatt als 20k ... 50k ohm spezifiziert. Das sollte normalerweise reichen. Da diese Pullup sehr hoch sind kann allerdings die Anstiegsflanke etwas langsam/träge werden, daher könnte eine kleine Wartezeit vor dem auslesen nicht schaden (zb 50us).

    Wenn man die ADCs nicht vorher aktiviert hat, muss man sie nicht zurücksetzen, da die reset-Werte der Register auf deaktiviert stehen. Das was ich meinte war schon JTAG/Clockout und solche Geschichten die per Fuse geschalten werden.

    Hast Du die Spannungsversorgung auch an AVCC angeschlossen? Diese wird für Port A benötigt.

    Ich hätte das am Ende so programmiert (wird mit LEDs nicht funktionieren):

    Das muss nicht unbedingt am auslessen liegen. Manche Ports vom Atmega haben doppelte-Belegungen und die müssen explizit deaktiviert sein sonst funktionieren die Ports an der Stelle nicht. Am besten wäre wenn Du mal ein Schaltplan hochlädst und sagst welche Kombination nicht funktioniert.

    Ausserdem sollte man beim auslesen die Spalten nicht mit High Pegel betreiben, sondern die Spallten dann auf Eingang (=hochohmig) schalten. Warum? Beim drücken von 2 Tasten wirst Du sonst so einen Kurzschluss provozieren da eine Spalte (welche auf einen Low Pegel liegt) mit einer Zeile per Tasten Druck verbunden wird und hier über eine zweite Taste auf der Zeile dies nun gegen eine Spalte mit High Pegel verbindet. Um dies zu vermeiden sollten die Spalten auf Eingang geschalten werden und sie somit hochohmig zu machen.