Hallo,
ich glaube ich verstehe den MAX7322 bzw. dessen Datenblatt nicht.
Das Datenblatt findet ihr hier: MAX7322
Zuerst schreibe ich 0xff über i2c, sodass ALLE Outputs auf high gehen
und alle inputs bei wechselndem Pegel einen Interrupt auslösen.
Drücke ich eine Taste, geht INT auf low und ich frage die Daten ab.
Wenn ich zwei Byte lese erwarte ich
1. Byte Zustand der Ports (Hier verunde ich das Ergebnis mit &
0b11000011 um die Inputs auszunehmen)
2. Byte Interrupt Flags der Inputs
Diese sind aber zufällig.
Beispiel: Drücken des Tasters an I2
[ Korrekt wäre: 0xC3 0x04 ]
1. Tastendruck
0xc3 0x04 (Taste drücken)
0x00 0x04 (Taste loslassen)
So wäre zumindest der Input korrekt... aber...
2. Tastendruck
0x01 0x00
0x81 0x04
3. Tastendruck
0x83 0x04
0x01 0x00
Taster sind alle angeschlossen und Hardware entprellt.
Outputs sind alle über 100kOhm auf GND gelegt.
Reset ist auf high mit 4k7
Int ist auf high mit 4k7
Spannung 5V
I2C Signale habe ich mir angesehen. Sowohl mit LA als auch mit Oszi.
Werte habe ich verglichen ob ggf. ein Signal nicht ausreichend ist dh.
Pegel zu niedrig/nicht ganz Null. Passt aber alles.
Adresspins habe ich beide auf GND um die Push Pulls beim Start auf 0V zu
haben.
Wie man sehen kann, ist das erste Byte am schwingen. Es ist ohne
jegliche logic. Das zweite Byte ist entweder 0 oder 4. Immer 4 wäre
korrekt.
Missverstehe ich das Datenblatt? Wo könnte ich den Fehler finden? Was
könnte falsch sein?
Verwunderlich ist, dass der MAX7322 immer korrekt den INT Pin auf low
zieht, aber die Daten, sowohl der Outputs als auch der Interrupt Flags,
nicht immer korrekt bzw. meist falsch sind.
Den IC habe ich mit Adapter auf dem Steckbrett. Tauschen würde ich den
erst, wenn hier keine Ideen reinkommen... Was ich nicht hoffe :)
Freue mich über Hinweise!
Agst schrieb:> Hat niemand Lust mal nach zu gucken? Ist der Fehler zu offensichtlich?> HILFE.... :)
Ich sage mal der Fehler ist dass wir uns vorstellen sollen
wie du den Schaltplan dir ausgedacht hast. Oder wir sollen
ihn sogar selbst malen. Merkst du was?
Wenn nicht, dann lies mal Netiquette.
Die Schaltung ist umgesetzt wie im Datenblatt (Seite 15), nur mit 100k
Widerständen an den Outputs und Schaltern an den Inputs, sowie PullUps
an INT RESET SCL / SDA. Die Komplexität hält sich also in Grenzen.
Der IC funktioniert ja in seiner Grundfunktionalität. Es geht im
wesentlichen um die Kommunikation über I2C.
Sollte trotzdem ein Schaltplan gewünscht sein, liefere ich diesen sehr
gern morgen nach.
Agst schrieb:> Sollte trotzdem ein Schaltplan gewünscht sein,
Ich wünsche gar nichts. Nur solltest du jetzt "die Verhältnisse"
hier verstanden haben und danach handeln was du dir wünschst.
Agst schrieb:> Die Schaltung ist umgesetzt wie im Datenblatt (Seite 15), nur mit 100k> Widerständen an den Outputs und Schaltern an den Inputs
Immer noch diese Schaltplan-Prosa. Gratuliere, sieht so aus als ob
du noch nichts verstanden hast.
Nichso Einfach schrieb:> Agst schrieb:>> Oder fehlt dem Schaltplan etwas?>> Ich schätze mal: das Programm das nicht funktioniert.
Die Frage ist, ob das Programm die richtigen Werte versendet. Was ich
erwarte, steht oben. Was zurück kommt ebenfalls. Im LA Bild sieht man,
dass "das Programm" schon korrekt arbeitet.
Hans B. schrieb:> ....möglicherweise funtioniert es mit niedrigerem I2C-Takt bzw.> geringeren Werten der Pullup-Widerstände?
Habe ich beides bereits versucht. Die Qualität des Signals habe ich
allerdings auch, wie oben geschrieben, mit dem Oszi geprüft. Das sollte
passen.
Die Output Kanäle funktionieren wunderbar. Es gibt überhaupt keine
Probleme.
Die Inputs funktioneiren aber nur dann, wenn alle OUtputs auf 1 stehen.
Nu habe ich die beiden Adresspins auf VCC gelegt... und nu geht es zu
100% korrekt. Ohne Fehlerkennung.
Ich verstehe es nicht. Der Unterschied ist, dass ich beim eine PullUps
(VCC an beiden Adresspins) aktiviert habe und beim anderen nicht.
..vielleicht könnte folgendes sein:
Beim Einschalten der 5V geht die Spannung an den I2....I5 durch den
100nF (neben dem Schalter) möglicherweise schneller hoch als die
Betriebsspannung.
Ist es besser, den 100nF nach Gnd zu schalten?
Wenn die internen Pull-Up aktiv sind, können deine 100kΩ Widerstände an
den Tastern die Eingänge nicht mehr auf Low ziehen. Das die Schaltung so
einwandfrei funktioniert, glaube ich daher nicht.
Da du gesagt hast, dass es mit Pull-Up funktioniert, kann eigentlich nur
sein, dass deine Taster genau umgekehrt angeschlossen sind: Sie ziehen
den Eingang auf GND und der 100kΩ Widerstand geht nach VCC.
Dazu passt das Diagramm im Eröffnungsbeitrag. Das Bit von I2 ist beim
Tastendruck auf Low gegangen!
Lass mich raten: Du hast auf deinem Steckbrett die beiden
Stromversorgung-Schienen verwechselt. Messe einfach mal die Spannungen
nach!
Was die Zufälligen Zustände der Ausgänge angeht: Kann ich mit den
verfügbaren Infos nicht erklären. Zeige mal, wie die Kommunikation auf
einem Oszilloskop aussieht (Timing, Spannungspegel, Signalflanken).
Wie sind denn die tatsächlichen Spannungen an den Ein- und Ausgängen?
Sind alle Spannungen eindeutig High/Low, und nicht vertauscht?
Hans B. schrieb:> ..vielleicht könnte folgendes sein:> Beim Einschalten der 5V geht die Spannung an den I2....I5 durch den> 100nF (neben dem Schalter) möglicherweise schneller hoch als die> Betriebsspannung.> Ist es besser, den 100nF nach Gnd zu schalten?
Meinst du vielleicht, dass die Spannung an I2...I5 langsamer hoch
geht?
Aber auch wenn dem so wäre: Wenn ich die Adresspins beide auf VCC lege,
funktioniert der IC perfekt. Der Unterschied liegt also in den PullUps.
Stefan ⛄ F. schrieb:> Wenn die internen Pull-Up aktiv sind, können deine 100kΩ Widerstände an> den Tastern die Eingänge nicht mehr auf Low ziehen. Das die Schaltung so> einwandfrei funktioniert, glaube ich daher nicht.
Das ist korrekt. Die Spannung fällt auf ca. 1,3V. Das sollte daran
liegen, dass über den 10k Widerstand Strom fließt. Auslösen sollte der
IC unter 1,5V laut Datenblatt (5V Betriebspannung) Wobei 1,5V das
maximium darstellt. Aber auch hier: Wenn ich die Adresspins auf 5V lege,
funktioniert es perfekt.
Stefan ⛄ F. schrieb:> Da du gesagt hast, dass es mit Pull-Up funktioniert, kann eigentlich nur> sein, dass deine Taster genau umgekehrt angeschlossen sind: Sie ziehen> den Eingang auf GND und der 100kΩ Widerstand geht nach VCC.
Wenn der Taster gedrückt ist, liegt 0V (bzw. 1,3V) am Input an. Wenn ich
loslasse, liegen 5V an. Passt soweit alles.
Stefan ⛄ F. schrieb:> Lass mich raten: Du hast auf deinem Steckbrett die beiden> Stromversorgung-Schienen verwechselt. Messe einfach mal die Spannungen> nach!
Das passt auch. Sonst wäre der IC nicht in der Lage zu funktionieren.
Zudem funktioniert er ja perfekt wenn ich die Adresspins auf 5V lege.
Agst schrieb:> Wenn der Taster gedrückt ist, liegt 0V (bzw. 1,3V) am Input an. Wenn ich> loslasse, liegen 5V an. Passt soweit alles.
Nein passt nicht. Vergleiche das mal mit deinem Schaltplan.