Alle Taster einer Tastenmatrix gleichzeitig abfragen und ausgeben können

Du kannst auch 1000 MCP einsetzen, jedoch bekommst du niemals 2 Tasten gleichzeitig gelesen, das kann nur Spezielle Hardware.
Auch wen die Finger Jucken ist angesagt Gehirn einschalten.

Und warum nicht. ???

Lt. diesen Bericht geht das.

Und warum auch nicht. Ich lese die X-Achse aus und danach die Y Achse. Dann habe ich eine Bitmatrix die ich nur noch analysieren muss.

Sehe ich echt kein Problem.

Oder willst du mir gerade erklären das ich an einen Port-expander keine 2 Pins HIGH schalten kann gleichzeitig. ????

Gruß

Pucki

Schreib kein Unsinn, das ist mehr als peinlich was du hier abkippst.

Auch hier gilt das gleich nach der Reihe ja, aber nicht Gleichzeitig, lese mall wie eine MCU was wir hier nutzen arbeitet.

Wate wate wate.... Also Du führst einen MCP23017 an bringst dann einen PCF 8574 als Refferenz ???
Und ja mit einem PCF ist es möglich bis zum Auslesen oder Beschreiben auch mehrere Eingänge zu erfassen. Den MCP kenne ich nicht genau, aber ich meine Berichtigt mich gerne der sollte sich entsprechend programieren lassen.

Wenn juckt die MCU.

Ich drückt eine Taste , der Port-Expander reagiert. Ich lese die Bit-Seq. aus den Port-Expander aus und analysiere sie. Ich verstehe dein Problem nicht.

Gruß

Pucki

Wieso?
Die Tastaturmatrix mit Dioden auf jeder Taste ist bereits vorhanden.
Der Rest sind nur 8 Widerstände und programmiererei.

Ok wenn Du Gleichzeitigkeit mit Zeiten unter 1µS meinst dann stimmt das.

Grüße Uwe

DANKE

Gruß

Pucki

Dreh die Katze nicht mit Schwanz um !!!
Schreibst ganze zeit GLEICHZEITIG und jetzt kommst mit so was, wist mich veräppeln oder wie?

GLEICHZEITIG verstehe ich bei Tasten daß 2 Tasten gedrückt werden können und von der Ausleseelektronik/Software als 2 getrennte Tasten erkannt werden.
Bei einer Tastatur-Matrix ohne Dioden ist das nicht möglich. Da tauchen auch Tasten auf , die gar nicht gedrückt wurden.
Bei einer Tastatur-Matrix bei der in Reihe zu jedem Taster eine Diode gelötet ist, ist das erkennen mehrerer Tastaturbetätigungen möglich.

Grüße Uwe

Du denkst falsch herum. Die Bits werden durch die Taste gesetzt und von den MC ausgelesen.

Genau, und muss die Bit-Reihenfolge dann analysieren.

Das ist alles.

Da kannst du es sogar nachlesen.

Gruß

Pucki

Auch wen Du das schreibst,

ine Pikosekunde dauert, ist das nicht gleichzeitig.
Hier geht um Prinzip.
Unserer @pucki007 will doch klar machen das eine MCU kann gleichzeitig tasten auslesen was nicht der Wahrheit entspricht.

Das stimmt.

Nein hier geht es darum sich raus zu reden, weil man wieder grundlos über mich hergefallen ist :frowning:

Alles was unter 3 Nano-Sekunden ist, ist bei einen Teil wie einen Arduino/ESP eh vernachlässigbar meiner Meinung nach. Dafür hat das ganze eh grundsätzlich zuviel Toleranz.
Und auf Diskusionen über Takt-Genauigkeit etc. habe ich keinen Bock.

Wenn ich so präzisen Arbeiten muss, nehme ich kein Arduino-Zeug. Es hat schon ein Grund warum ich das Teil selten in Profi-Anlagen sehe.

Gruß

Pucki

Sehr wohl kann ein µC 2 Tasten gleichzeitig auslesen. Er kann einen Port mit 8 Bit auf einen Schlag lesen (tatsächlich parallel aka gleichzeitig). Die hat er dann im Puffer. Die Auswertung dann ist dann aber ggf. seriell, kann aber auch parallel erfolgen.

Auch ein PCF hat intern eine parallele Verarbeitung:

Bis zum Shift Register, aber um das ginge nicht.

Doch, ab da sind die Werte gepuffert und ich kann mir mit der Auswertung Zeit lassen. Ich habe sie gleichzeitig gelesen.

1 Like

Richtig Kleines Beispiel :slight_smile:


#include "Wire.h"

// EXPANDER (PCF8574A)----------------------------------------------------------------------------------------------
#define PCF1 0x38
uint8_t IN;

void setup() {
  Wire.begin();
  Wire.setClock(400000);
}

void loop() {
IN =read8(PCF1);
 // Viel Arbeit in der Loop
 // z.B Zeiten über 800 ms.
 delay (800);
 // In dieser Zeit werden mehrere Tasten betätigt. Diese werden dann am PCF erkannt wenn dieser Zustand über 4 uSec. ist
}

uint8_t read8(uint8_t adr) {
  Wire.requestFrom(adr, 1);
  uint8_t wert = Wire.read(); 
  return wert;
}

Ich persönlich opfer noch ein Eingangspin am Arduino und benutze den /INT als geber zum Auslesen.


#include "Wire.h"

// EXPANDER (PCF8574A)
#define PCF1 0x38
uint8_t IN;
const byte IntPin = 8;
void setup() {
  Wire.begin();
  Wire.setClock(400000);
  pinMode(IntPin, INPUT);  // Externer PullUp
}

void loop() {
  if (digitalRead(!IntPin)) {
    IN = read8(PCF1);
  }
  // Viel Arbeit in der Loop
  // z.B Zeiten über 800 ms.
  delay(800);
  // In dieser Zeit werden mehrere Tasten betätigt. Diese werden dann am PCF erkannt wenn dieser Zustand über 4 uSec. ist
}

uint8_t read8(uint8_t adr) {
  Wire.requestFrom(adr, 1);
  uint8_t wert = Wire.read();
  return wert;
}

Also so wie ich das jetzt herausgelesen habe ist die HW nicht das Problem. Das beruhigt mich schonmal ein bisschen.
Gleichzeitig ist für mich einfach dann der Fall, wenn ich 2 oder mehrere Tasten drücke und die für das menschliche Gehör "gleichzeitig" einen Ton von sich geben.
Kann mir jemand einen Tipp oder einen Gedankenstoß geben, wie ich die Taster "gleichzeitig" abfragen kann. Bin noch nicht so lang im Programmierthema aktiv

Du hast die Tasten in einer Matrix von 8x8 Leitungen (Reihen und Spalten).
Jetzt weiß ich nicht die Polung der Dioden an den Tasten. Eventuell sind da HIGH und LOW und Pullup -Pulldown zu tauschen.

Du hast zB 8 Pins die Eingänge für das Auslesen der Tasten (zB Spalten). An diesen hängen 8 Pullup-Widerstände
Du hast andere 8 Pins für die Ansteuerung der Reihen, von denen abwechselnd 7 als Eingang und einer als Ausgang LOW geschalten. Die Taster schalten die entsprechenden Spalten auf LOW. Nach dem Ansteuerung einer Reihe kommt die nächste bis alle 8 Reihen durch sind.

Grüße Uwe