Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: Auslesen porterweiterung Kategorie: Programmierung (von Werner - 27.07.2008 19:51)
Als Antwort auf Auslesen porterweiterung von Jens - 27.07.2008 13:25
Ich nutze:
C-Control II Station, OSOPT V3.1
Hallo Jens,

ich frage mit dem MAX7311 die Zustände von Tastern ab und habe sinngemä� folgende
Routine bei mit eingebaut:


int In;

if ports.getcount(0) != 0     // Testen ob Interrupt erfolgt ist
{
  sleep 50;                   // 50ms zum Tastenentprellen
  In = not (max7311.getw(MAX));
  if (In & 0x0001)  {
    // Taste 1 gedrĂĽckt
  }
  if (In & 0x0002)  {
    // Taste 2 gedrĂĽckt
  }
  if (In & 0x0004)  {
    // Taste 3 gedrĂĽckt
  }
  if (In & 0x0008)  {
    // Taste 4 gedrĂĽckt
  }
}



Erklärung:
Der Interrupt vom MAX7311 habe ich auf P 0 gelegt, welcher nicht als
Interrupt, sondern als Counter genutzt wird. Durch das Abfragen mittels
getcount() wird der Zähler zurück geliefert und intern wieder bei null begonnen.
Diese Routine läuft bei mir in einer Hauptschleife.
Zum Tastenabfragen habe ich einen sleep von 50ms eingebaut um die Tasten zu
entprellen. Dann werden die Daten Invertiert um einen Taster, der gegen Masse
schaltet als 1 zu erhalten. (geht aber auch mit einem einmaligen invertieren im
Baustein siehe Hilfe zu max7311.setPIw() war bei mit aber aus anderen GrĂĽnden
nicht sinnvoll.)

Dann prĂĽfe ich ob die einzelnen Bits gesetzt sind. Im Beispiel nur bis Taster 4.
Die folgenden Werte fĂĽr die Taster 5-16 sind dann:
0x0010, 0x0020, 0x0040. 0x0080,
0x0100, 0x0200, 0x0400. 0x0800,
0x1000, 0x2000, 0x4000. 0x8000

Das sollte dein Problem wohl lösen.

Mfg
  Werner


    Antwort schreiben


Antworten: