INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
4x16 Tastermatrix Problem
11.07.2016, 09:40
Beitrag #9
RE: 4x16 Tastermatrix Problem
Hallo,
das meine ich mit entkoppeln (Bild).

Die IRO-Routine weiß sofort welcher Taster gedrückt
ist.Da kannst Du dann mit nur einer Schleife die Taster abfragen.
Dann springst Du in eine Funktion die das Ergebnis auswertet.

Die Tasterabfrage könnte man in ein PinMuster (B00000001) ablegen und dann nur auf
Änderung abfragen. Dann muß man nicht jedesmal das ganze Matrix durchgehen.
Dieses Zeug´s im Setup würde ich rauswerfen. Dort nur die Pin´s definieren.

Dann gibt es da noch etwas, was mich stört. Das sind Taster!. Prellen die? Vielleicht
funktioniert Dein Sketch ja- aber das Prellen bringt den Arduino aus dem Tritt.
Gruß und Spaß
Andreas


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.07.2016, 17:59 (Dieser Beitrag wurde zuletzt bearbeitet: 11.07.2016 18:03 von Michel.)
Beitrag #10
RE: 4x16 Tastermatrix Problem
Hi Andreas,

Würde das mit der Pin Belegung (siehe Bild) auch gehen?

Ich denke nicht das die Tasten prellen.

Gruß Michel


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.07.2016, 19:14 (Dieser Beitrag wurde zuletzt bearbeitet: 11.07.2016 19:15 von Scheams.)
Beitrag #11
RE: 4x16 Tastermatrix Problem
Hey!

Selbst wenn die Taster prellen sollte theoretisch das Serial.print() im 1. Sketch funktionieren.

Warum so kompliziert alles an INT0 hängen? Wie schon geschrieben PCINTx nutzen.

Code:
#define inputPin DDB7 // z.B.

ISR(PCINT0_vect)
{
    uint8_t inputMask = PINB; // 8 Eingänge auslesen

    // Verarbeiten z.B.
    if (inputMask & (1 << inputPin)) {
        // blabla...
    }
    // evtl. Entprellen, nächster Wurf muss 100ms "abgewartet" werden
    delay(100);
}

ISR(PCINT1_vect)
{
    uint8_t inputMask = PINC;
    // ....
}

ISR(PCINT2_vect)
{
    uint8_t inputMask = PIND;
    // ....
}

3*8 Eingänge als Interrupts verwenden, also mehr als du brauchst.

mfg Scheams

INFO-EDIT: Ist jetzt für Uno, vergessen dass ein Mega verwendet wird, funktioniert dann aber fast gleich nur dass evtl die Ports unterschiedlich sind.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.07.2016, 21:40 (Dieser Beitrag wurde zuletzt bearbeitet: 11.07.2016 21:43 von SkobyMobil.)
Beitrag #12
RE: 4x16 Tastermatrix Problem
Hallo,
"Ich denke nicht das die Tasten prellen"

Das sollte mich wundern… aber na-ja.

Du kannst auch 4 IRQ´s nehmen, könnte schneller sein, müßte man probieren.
Theoretisch wäre das so, weil ja nur 1/4 verarbeitet werden muss.

Die Zeichnung ist ja nur ein Vorschlag gewesen, so könnte man es machen.
Probiere doch einmal den Schnipsel von Scheams aus, vielleicht funktioniert
das ja.
Wichtig ist, das Du die Zustände nur einmal liest.

Mache doch einmal etwas ganz einfaches. Nehme 1x16 Tasten.

while
if 1x16 tasten high
Zähler++

Mit "while" wird auf ein bestimmtes Ereignis gewartet, der Sketch macht also
nichts anderes.
Dieser "Zähler" fängt ja bei 0 (null) an. D.h. Bei Kontakt darf der nur auf
1 erhöhen- und nicht höher durchzählen.
Gruß und Spaß
Andreas
P.S. dieses delay() hat da nichts zu suchen, hält nur den Betrieb auf
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.07.2016, 22:13 (Dieser Beitrag wurde zuletzt bearbeitet: 11.07.2016 23:10 von Michel.)
Beitrag #13
RE: 4x16 Tastermatrix Problem
Hi Scheams,

Danke, habe meinen Code schon auf Interrupts umgebaut, und konnte ihn auf dem Breadboard testen und da läuft es ganz gut, muss leider 2 Wochen warten um es Live am Automat zu testen.

Danke Andreas ;-)

P.S. Ist es dem Interrupt egal ob es ein Delay gibt? der Interrupt wird auch im Delay ausgelöst wenn man es nicht ausschaltet, so hatte ich das soeben gelesen.

Gruß Michel
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.07.2016, 18:06
Beitrag #14
RE: 4x16 Tastermatrix Problem
Hey!

(11.07.2016 21:40)SkobyMobil schrieb:  ...
P.S. dieses delay() hat da nichts zu suchen, hält nur den Betrieb auf
Hast du recht, das war nur eine Minimal-Lösung um klarzustellen, dass Entprellen trotzdem vorhanden sein sollte, ansonsten löst der Interrupt zu oft auf.

(11.07.2016 22:13)Michel schrieb:  ...
P.S. Ist es dem Interrupt egal ob es ein Delay gibt? der Interrupt wird auch im Delay ausgelöst wenn man es nicht ausschaltet, so hatte ich das soeben gelesen.
...
Kommt darauf an ob Interrupts erlaub sind oder nicht. Generell werden während einer ISR keine anderen ISR's aufgerufen da sie deaktiviert werden sobald die ISR aufgerufen wird. Man könnte Interrupts aber auch in einer ISR aktivieren mit sei() und Interrupts während einer ISR sind möglich. Aber grundsätzlich heißt das, dass delay() in der ISR fast alles stoppt.
Wenn delay() in einer Funktion z.B. loop() aktiv ist und eine Interrupt löst aus, wird dieser bearbeitet (solange Interrupts nicht deaktiviert sind mit cli()).

mfg Scheams
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.07.2016, 12:36
Beitrag #15
RE: 4x16 Tastermatrix Problem
Hallo Michel,

wäre es nicht einfacher an die Matrix zwei PCA9555 oder MCP 23017 zu hängen und dann diese via i2c auszulesen.

Wenn ich es recht im Kopf habe speichern die Inputs den letzten Status in einem Register. Wenn Du dann noch die Interrupts auswertest solltest Du keine Probleme mit dem Auslesen haben.

Gruß
Stephan
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.07.2016, 21:58
Beitrag #16
RE: 4x16 Tastermatrix Problem
Hallo Stephan,

Danke, den MCP23S17 hatte ich schon mit dem Nano getestet, habe mich dann aber doch für den Mega entschieden wegen den vielen Pins.

Gruß Michel
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Problem mit SD Card Library BennIY 4 193 06.10.2016 18:38
Letzter Beitrag: Bitklopfer
  Problem mit SD.remove Eichner 6 212 22.08.2016 19:42
Letzter Beitrag: Eichner
  Problem mit Delay und Millis funnyzocker 1 459 26.06.2016 09:54
Letzter Beitrag: hotsystems
  Problem mit ESP8266 und EMail senden torsten_156 1 602 13.06.2016 21:14
Letzter Beitrag: torsten_156
  ESP8266_01 flashen - Problem torsten_156 12 1.052 30.05.2016 20:12
Letzter Beitrag: torsten_156
  Hardwareserial/Softserial: Problem mit Superklasse tuxedo0801 10 482 19.05.2016 12:25
Letzter Beitrag: amithlon
  ESP8266 HTML Problem arduino_weatherstation 1 497 25.04.2016 21:52
Letzter Beitrag: rkuehle
  Problem mit OLED 0.96" Display torsten_156 3 542 03.04.2016 15:10
Letzter Beitrag: hotsystems
  Problem: SDFat - Das Ende einer Datei finden und Schleife beenden MartinK 4 490 01.04.2016 05:49
Letzter Beitrag: MartinK
  Problem: RFID code mit Inhalt einer Textdatei auf einer SD Karte vergleichen MartinK 6 512 29.03.2016 16:45
Letzter Beitrag: MartinK

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste