MAX7313 Input Auswertung

Gast #6806136
Lesenswert?

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
Moderator (Firma: Titel) Persönliche Seite #6806153
Lesenswert?

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.
#6806160
Lesenswert?

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
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren