www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mega 128: Wieviel Cycles notwendig, bis Port umgeschaltet (MATRIX TASTATUR)


Autor: John Schmitz (student)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Datenblatt, der Zustand wird mit dem nächsten Takt nach dem Befehl 
übernommen.

Gruß aus Berlin
Michael

Autor: John Schmitz (student)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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!

Autor: John Schmitz (student)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Problem erkannt - Gefahr gebannt ...

Hier habe ich die Lösung gepostet:

Beitrag "Neuer Port Wert wird erst verzögert angezeigt."

Danke für Eure Aufmerksamkeit - sorry für das Trivialproblem!

Man lernt nie aus!

Grüsse

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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:
    PORTC |= (1 << 0);  // Abfrage Spalte 0
    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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.