Hallo, Für mein kleines Projekt brauche ich an einem ESP8266 viele Eingänge und da möchte ich gern mit einem MAX7313 arbeiten, da ich diesen noch auf "Lager" habe. Soweit so gut, ich kann die Ausgänge relativ einfach ansteuern, jedoch ist dies hier nicht von Nöten. Ganz im Gegenteil verhält sich das bei den Eingängen. Wenn ich einen Auslesen möchte bekomme ich den Zahlenwert 255 für HIGH und 254 für LOW, sofern keine anderen Taster gedrückt sind. Und genau da ist mein Problem, wenn ich parallel Taster drücke kann ich keine eineindeutige Zuordnung machen, da der ausgegebene Zahlenwert immer weiter sinkt. Zum Beispiel wenn 3 Taster gedrückt sind und ich gern den Wert von einem Taster auslese, steht dieser nun bei 244. Ich programmiere das Ganze in Arduino IDE mit der Library: https://github.com/eta-systems/MAX7313-Arduino Hier ist noch das Datenblatt von dem IC: https://datasheets.maximintegrated.com/en/ds/MAX7313.pdf Ich wäre sehr dankbar, wenn jemand ein Lösung für die Auswertung hat! Gruß Marcus
Ganz einfach, so wie es gedacht ist. Du musst die einzelnen Bits auswerten. Das geht mit Bitmasken oder Bitfields.
Marcus schrieb: > Wenn ich einen Auslesen möchte bekomme ich den Zahlenwert 255 für HIGH > und 254 für LOW Also binäre 11111111 und 11111110. > Zum Beispiel wenn 3 Taster gedrückt sind und ich gern den > Wert von einem Taster auslese, steht dieser nun bei 244. Also binäre 11110100 Was meinst du, welche 3 Taster sind somit betätigt? Marcus schrieb: > Hast du dafür eine gute Vorlage? Mach dich drüber schlau, wie die Darstellung im Dezimalsystem und im Binärsystem aussieht. Der Computer hat intern nur die binäre Variante mit 0 und 1. Aber rechnet sie dir für die Anzeige auf dein Dezimalsystem mit 0,1,..9 um. Du musst also nur zurückrechnen, damit du weißt, was der Computer intern sieht. Dann wird die Auswertung ganz einfach. Mein Tipp: das muss nicht soooo schnell gehen, denk ruhig mal ein, zwei Tage drüber nach... Und dann hängst du noch einen Tag für das Thema Bitmanipulation dran.
:
Bearbeitet durch Moderator
Marcus schrieb: > Hast du dafür eine gute Vorlage? Da gibt es millionen Möglichkeiten. z.B If-Abfragen mit Bitmasken
1 | if(data & 0x01){ |
2 | // tu etwas wenn Taste 1
|
3 | }
|
4 | if(data & 0x02){ |
5 | // tu etwas wenn Taste 2
|
6 | }
|
7 | if(data & 0x04){ |
8 | // tu etwas wenn Taste 3
|
9 | }
|
10 | if(data & 0x08){ |
11 | // tu etwas wenn Taste 4
|
12 | }
|
13 | ....
|
oder Bitfields
1 | typedef struct{ |
2 | uint8_t in1 :1; |
3 | uint8_t in2 :1; |
4 | uint8_t in3 :1; |
5 | uint8_t in4 :1; |
6 | uint8_t in5 :1; |
7 | uint8_t in6 :1; |
8 | uint8_t in7 :1; |
9 | uint8_t in8 :1; |
10 | }Bitfield; |
11 | |
12 | Bitfield Input; |
13 | |
14 | if(Input.in1){ |
15 | // tu etwas wenn Taste 1
|
16 | }
|
17 | if(Input.in2){ |
18 | // tu etwas wenn Taste 2
|
19 | }
|
20 | if(Input.in3){ |
21 | // tu etwas wenn Taste 3
|
22 | }
|
23 | if(Input.in4){ |
24 | // tu etwas wenn Taste 4
|
25 | }
|
26 | ....
|
Wenn die Bits invertiert sind also eine 0 da steht wenn der Taster gedrückt ist dann musst du die Abfragen eben invertieren also sowas wie:
1 | if(!Input.in1){ |
2 | // tu etwas wenn Taste 1
|
3 | }
|
:
Bearbeitet durch User
Marcus schrieb: > wenn ich parallel Taster drücke kann ich keine > eineindeutige Zuordnung machen Die Zuordnung ist sehr wohl eindeutig. Laß Dir mal den Wert als Binärzahl ausgeben. Dann sollte Dir ein Seifensieder aufgehen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.