www.mikrocontroller.net

Forum: Compiler & IDEs Matrixtastatur: Auslesen liefert falsche Werte in ISR


Autor: Robert S. (razer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo an alle,

Ich habe eine Matrixtastatur an PortF eines Atmegas1281 angeschlossen. 
Ich verwende einen modififizierten Code von Peter Danegger. Bei einer 
Taste wird jedoch der falsche Wert gelesen.

Ich habe das komplette Programm schon soweit minimiert:
  /* Nächste Zeile aktivieren */
    MATRIX_PORT = 0xFF;    
    MATRIX_DDR = row[i];
    MATRIX_PORT = ~row[i];
    
    /*  Einen Takt warten, da der Ausgang erst einen Takt später gesetzt wird
      (für 16MHz sind 2 Takte erforderlich) */
    asm volatile("nop");
    asm volatile("nop");
    
    /* Nächste Zeile einlesen */
    column = MATRIX_PIN & 0x0F;  

    sendstr1("Read ");
    sendchar1(column);
    sendchar1('\n');

Dieser Code wird im 10ms im Timer Interrupt ausgeführt.

Nun zum Problem: Drücke ich die Taste 0, wird 0x03 ausgelesen was falsch 
ist. Richtig ist 0x0B.

Teste ich diesen Code im Hauptprogramm:
  while(1)
  {
      MATRIX_PORT = 0xFF;
  MATRIX_DDR = row[0];
  MATRIX_PORT = ~row[0];
    
/*  Einen Takt warten, da der Ausgang erst einen Takt später gesetzt wird
    (für 16MHz sind 2 Takte erforderlich) */
  asm volatile("nop");
  asm volatile("nop");
  
  /* Nächste Zeile einlesen */

    uint8_t column = MATRIX_PIN & 0x0F;  
    rprintf("Column: %d\n", column);
    _delay_ms(10);
  }

Wird der richtige Wert eingelesen, nämlich 0x0B.

woran kann das liegen? Ich habe keine Ahnung mehr.

Ich hoffe es kann mir wer helfen.
Danke!

lg Robert

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Etwas compilierbares wäre nicht schlecht.

Was ist "i" wo kommt es her, ...

Mehr Code.

Autor: Robert S. (razer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nun i ist eine Schleifenvariable. An der soll es nicht scheitern. Sie 
ist auf 0 gesetzt.

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.