Mega 128: Wieviel Cycles notwendig, bis Port umgeschaltet (MATRIX TASTATUR)

OP #814876
Lesenswert?
• ▲
▼
Hallo zusammen,

ich will an meinem Mega128 eine 3x4 Matrix Tastatur auf Tastendruck 
abfragen.

Dazu muss man bekannterweise 3 Ports als  Ausgang (4 auf Eingang) 
schalten und prüft dann durch wechselseitiges Ein / Ausschalten dieser 3 
Ports durch, wann der Eingangs Port der zugehörigen Tastenreihe 
durchschaltet. Die logische Kreuzung ergibt dann die Taste ...!

Soweit so gut. Ich hatte vor, die Ports in einer 8 Bit Timer Interrupt 
Routine zu tun, habe dann aber festgestellt (so meine ich ...!) dass die 
Ausgangsports einige Zeit brauchen, bis sie von 0 auf 1 oder umgekeht 
schalten. Jedenfalls sieht es so aus, als ob man dies in der Timer 
Interrupt Routine besser nicht macht, um danach noch die Abfrage for 
(I=1 ..3) zu tätigen ???!

Kann mir jemand hierzu etwas sagen, z.B. wieviel Zyklen (üs) man warten 
muss, bevor der Ausgangsport seinen Zusatnd gewechselt hat ???

Meinen Mega betreibe ich mit 14, ... Mhz!

Vielen Dank und Grüsse
OP #815246
Lesenswert?
• ▲
▼
Michael U. wrote:
> Hallo,
>
> Datenblatt, der Zustand wird mit dem nächsten Takt nach dem Befehl
> übernommen.
>
> Gruß aus Berlin
> Michael

Hallo,

Vielen Dank für die schnelle Antwort !

Aber ich habe folgendes Problem (siehe ScreenShot)

Man erkennt, dass der Port offensichtlich verzögert geschaltet wird.

Im "for -loop" sieht man, dass auf dem Display die erste Zeile noch den 
alten Wert 255 anzeigt, obwohl der Finger die Taste definitiv gedrückt 
hält.
Erst nach einigen weiteren Cyclen erfolgt ein UpDate.

Woran kann das wohl liegen ???

Vielen Dank im voraus!
Angehängte Dateien:
Moderator Persönliche Seite #815595
Lesenswert?
• ▲
▼
Wenn du schnelle Hardware hast, immer dran denken: das Sampeln der
Eingänge für den nächsten Befehl erfolgt noch vor dem Setzen der
Ausgänge des aktuellen Befehls.  Also was nicht geht ist:
1
    PORTC |= (1 << 0);  // Abfrage Spalte 0
2
    colvalue = PINB;    // Wert von PINB hängt von PORTC ab

Wenn du nichts anderes zwischenzeitlich erledigen kannst, dann brauchst
du wenigstens einen NOP dazwischen.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.