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


von Robert S. (razer) Benutzerseite


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:
1
  /* Nächste Zeile aktivieren */
2
    MATRIX_PORT = 0xFF;    
3
    MATRIX_DDR = row[i];
4
    MATRIX_PORT = ~row[i];
5
    
6
    /*  Einen Takt warten, da der Ausgang erst einen Takt später gesetzt wird
7
      (für 16MHz sind 2 Takte erforderlich) */
8
    asm volatile("nop");
9
    asm volatile("nop");
10
    
11
    /* Nächste Zeile einlesen */
12
    column = MATRIX_PIN & 0x0F;  
13
14
    sendstr1("Read ");
15
    sendchar1(column);
16
    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:
1
  while(1)
2
  {
3
      MATRIX_PORT = 0xFF;
4
  MATRIX_DDR = row[0];
5
  MATRIX_PORT = ~row[0];
6
    
7
/*  Einen Takt warten, da der Ausgang erst einen Takt später gesetzt wird
8
    (für 16MHz sind 2 Takte erforderlich) */
9
  asm volatile("nop");
10
  asm volatile("nop");
11
  
12
  /* Nächste Zeile einlesen */
13
14
    uint8_t column = MATRIX_PIN & 0x0F;  
15
    rprintf("Column: %d\n", column);
16
    _delay_ms(10);
17
  }

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

von Gast (Gast)


Lesenswert?

Etwas compilierbares wäre nicht schlecht.

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

Mehr Code.

von Robert S. (razer) Benutzerseite


Lesenswert?

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

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
Noch kein Account? Hier anmelden.