Hallo zusammen, ich habe das Problem zwar schon mal im uC Forum gepostet, aber ich glaube, ich habe da eher eher ein GCC und kein Hardware Problem: Anbei sehr Ihr, wie ich eine 3x4 Matrix Tastatur am Mega 128 abfrage.Wie das grundsätzlich geht ist ja schon vielfach erklärt worden. Das Bild und der Code sollte für mein Problem eigentlich selbsterklärend sein. Merkwürdigerweise wird die PORT Änderung erst nach einigen Zyklen aktiv ...! Die erste ausgegebene Zeile im Display hat noch den alten (unrichtigen) Wert, erst die zweite Zeile zeigt den richtigen Wert an. Woran kann das liegen ?? Compiler Optimierungsproblem ? Kann doch nicht -oder ? Vielen Dank im voraus!
Sorry, PDF ist für mich unpassend gewählt, um über Code zu diskutieren. Vielleicht stolperst du über dies: http://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen#Stolperfalle_bei_Matrixtastaturen_etc. Du könntest dir das Disassemblerlisting ansehen, ob zwischen OUT (PORTF) und INP (PINE) genügend Zeit vergeht. Was die Abfrage von PINF soll, verstehe ich nicht. Eine weitere Fehlerquelle könnte die Hardware der Tastatur sein.
Hallo zusammen, das (Newbie-) Problem ist identifiziert: In Bild 2 sieht man, was passiert, wenn ausreichend NOPs die Abfrage nach hinten schieben. 10 NOPs reichen ... 8 NOPs noch nicht. Aber das Problem ist "natürlich" nicht der Compiler, sondern die Hardware, der OSKAR hat's entlarvt: Da ich auf Nummer Sicher gehen wollte, habe ich ALLE Ports des MEGA mit Widerständen (2,5 / 1,0 Kohm) abgesichert .... (im Probier - und Bastelstadium ... habe schon einmal Ports durch Falschprogrammierung (Kurzschluss) zerstört - total ärgerlich). Da offensichtlich hierdurch unerwünschte Kapazitäten am Eingang auftreten, fällt die Spannung am Eingang zu flach ab (Bild 3) und nähert sich "zu asymptotisch" an die Grenze, wo der Wechsel HIGH auf LOW vom Eingang erkannt wird. In Bild 4 habe ich den Schutzwiderstand weggenommen, man sieht, die negative Steigung ist parallel zum schaltenden Port ... Im Code sind die NOPs nun obsolet, der Eingang ist "sofort" auf LOW. Sorry für den Trouble ... Habe zuvor nur mit "langsamer" C-Control experimentiert ... da ist ein solcher Fehler nicht zeitkritisch ... Danke für Eure Unterstützung. Hoffentlich hilfts ein wenig anderen Newbies ...! Grüsse
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.