Added doc

This commit is contained in:
2026-03-30 19:52:37 +02:00
parent 0b3c5f3217
commit 9079fefad8
9 changed files with 567 additions and 0 deletions
+45
View File
@@ -0,0 +1,45 @@
# Tasten-Matrix
**Dateien:** `hal/matrix.h`, `hal/matrix.cpp`, `config/pins.h`
## Hardware
5×5-Matrix mit externer 10-kΩ-Pullup-Beschaltung auf den COL-Leitungen (immer HIGH im Ruhezustand). Dioden zwischen Schalter-DO und ROW-Leitung (Anode = Schalter, Kathode = ROW) verhindern Geistertasten bei Mehrfachdrücken.
Scan-Prinzip: ROW LOW treiben → gedrückter Schalter zieht zugehörige COL durch Diode auf LOW.
## Scan-Logik
```
für jede ROW r:
ROW r → OUTPUT LOW
warte 10 µs (Einschwingen)
für jede COL c:
raw = (digitalRead(COL[c]) == LOW)
Debounce prüfen
ROW r → INPUT (hochohmig, Pullup-Freigabe)
```
ROW-Pins wechseln zwischen OUTPUT-LOW (während Scan) und INPUT (hochohmig) kein dauerhaftes LOW.
## Debounce
- **10 ms**, Software-seitig pro Taste
- Flanken-Erkennung: Zustandsänderung (raw) wird mit Timestamp notiert
- Erst nach 10 ms stabiler neuer Zustand wird `s_debounced` aktualisiert und der Callback aufgerufen
- Callback: `matrix_cb(key_id, pressed)``CEventQueue::push(KEY_DOWN / KEY_UP)`
## Key-ID-Berechnung
```cpp
key_id = col * MATRIX_ROWS + row
// col 04, row 04
// key_id 04: Encoder-SW (COL_0)
// key_id 524: MX-Buttons (COL_14)
```
## Kontext
- Läuft im Loop-Kontext (kein ISR)
- Encoder-SW-Tasten gehen durch denselben Matrix-Pfad (COL_0)
- `matrix_scan()` wird einmal pro `loop()` aufgerufen