Hallo zusammen,
ich habe ein komisches Verhalten des MCP23S17 festgestellt.
Entweder übersehe ich etwas oder meine beiden MCP23S17 sind defekt!
(wäre etwas komisch, da sie beide NEU sind)
Ich habe einen Testaufbau mit einem Raspberry aufgebaut (um mir das
Testen etwas leichter zu ermöglichen).
Das Test-Programm ist recht simpel gestaltet (python).
-> Der Eingangs-Zustand von PortA soll auf PortB dargestellt werden.
-> Wenn ich mein Programm teste, bekomme ich aber folgendes Verhalten...
Port A = Eingänge
Port B = Ausgänge
Eingang Ausgang
00000000 11111111
00000001 11111101
00000010 11111011
00000100 11110111
00001000 11101111
00010000 11011111
00100000 10111110
01000000 01111101
10000000 01111110
Wenn ich die Ports untereinander tausche (Software und Hardware),
funktioniert alles problemlos! -> (B = Eingänge & A = Ausgänge)
Habe das ganze mit zwei Stück MCP23S17 getestet -> das Verhalten ist
identisch!
Hinweis:
Ich habe es auch nicht hin bekommen die Pullups auf "255" zu setzen.
Wenn ich die Pullups auf 255 setze (überprüft mit Oszilloskop) und dann
den Wert der Pullups wieder auslese, bekomme ich 254 zurück!
1
#!/usr/bin/python
2
3
importspidev
4
importtime
5
6
spi=spidev.SpiDev()
7
spi.open(0,0)
8
spi.max_speed_hz=7629
9
10
r=0x41
11
w=0x40
12
13
spi.xfer([w,0x01,0x00])#PORTBaufAusgangschalten
14
time.sleep(0.2)
15
spi.xfer([w,0x0C,0xFF])#PORTAPullupsaktivieren
16
time.sleep(0.2)
17
18
19
while1:
20
data=spi.xfer([r,0x12,0x00])#PORTAEingangabfragen
21
time.sleep(0.01)
22
spi.xfer([w,0x13,data[2]])#PORTBsetzen
23
time.sleep(0.01)
Hat jemand eine Idee an was es liegen könnte? (was ich übersehen habe)
Gruß
René
René P. schrieb:> Hat jemand eine Idee an was es liegen könnte? (was ich übersehen habe)
Fehlerhafte config!?
3.5.2 INPUT POLARITY REGISTER
René P. schrieb:> Wenn ich die Pullups auf 255 setze (überprüft mit Oszilloskop) und dann> den Wert der Pullups wieder auslese, bekomme ich 254 zurück!
0-254?!
Teo D. schrieb:> Fehlerhafte config!?> 3.5.2 INPUT POLARITY REGISTER
Das IPOLA bzw B sollte nach einem Reset den Status ‚00000000‘ haben
(reset wurde durchgeführt)
Teo D. schrieb:> 0-254?!
Für mich hat der Port 8 Bit, somit muss ich um alle Pullups zu
aktivieren, das Register mit 255 bzw. 0xFF beschreiben oder liege ich da
etwa falsch?
Maxim B. schrieb:> PCB unsauber gemacht, mit Kurzschluß?
Die Schaltung ist auf einem nahezu neuen Steckboard aufgebaut!
Habe auch schon die Position auf dem Steckboard verändert um Fehlerhafte
Kontakte auszuschließen.
René P. schrieb:> Für mich hat der Port 8 Bit, somit muss ich um alle Pullups zu> aktivieren, das Register mit 255 bzw. 0xFF beschreiben oder liege ich da> etwa falsch?
Das war nur ein Schnellschuss (push) auf die üblichen Fehlerquellen.
Also NÖ. :/
Zu meinem ersten Hinweis, steh ich aber noch, wenn nicht sowas in frage
kommt:
Maxim B. schrieb:> PCB unsauber gemacht, mit Kurzschluß?
Naja, was bleib dann noch...
Teo D. schrieb:> Naja, was bleib dann noch...
Speisung und Kondensatoren.
> Die Schaltung ist auf einem nahezu neuen Steckboard aufgebaut!
Steckboard ist nicht besonders gut für manche IC, da Speiseleitungen zu
lange (und zu induktiv) sind. Manchmal können Keramik-Kondensatoren
helfen. Es kann auch sein, daß die Erde derart hochinduktiv ist, daß
SPI nicht mehr korrekt arbeiten kann.
Man kann versuchen, Keramik-Kondensator so ca. 100n direkt an Pins
einzulöten (Pin 9 und 10 ). Manchmal hilft aber nur PCB mit guter
Speisung.
Hallo,
sorry für die späte Antwort...
Es scheint tatsächlich ein Problem mit der Verwendung des Steckboards zu
sein. (habe ich bei der sehr niedrigen SPI Geschwindigkeit nicht
erwartet)
Habe die Schaltung nun nochmals (auf dem gleichen Steckboard) aufgebaut
und siehe da... auf einmal hat es funktioniert.
Ist also mehr ein Zufall ob es auf einem Steckboard funktioniert oder
nicht.
Somit habe ich wieder etwas dazugelernt. (vertraue nie einem Steckboard)
Danke an alle für die Tipps.
Gruß
René