i2ctools gehört zu lmsensors-Projekt.
Doku : http://www.lm-sensors.org/wiki/i2cToolsDocumentation
Btw. man i2c-tools hilft eventuell.
Auch nett : http://www.e-reflexes.de/oxy_blog/?tag=i2c-scanner
i2ctools gehört zu lmsensors-Projekt.
Doku : http://www.lm-sensors.org/wiki/i2cToolsDocumentation
Btw. man i2c-tools hilft eventuell.
Auch nett : http://www.e-reflexes.de/oxy_blog/?tag=i2c-scanner
Grüße,
Daniel
Aber die Doku erklärt immer noch nicht so richtig warum ich keinen Zugriff auf meinen PSoC habe (also via I²C).
Bei meinem RN-Control geht das problemlos nur das Raspberry zickt bisschen. Da kommt sowohl beim lesen als auch beim schreiben der selbe Fehler obwohl das Device bei i2cdetect auftaucht.
Schaut ruhig mal auf meiner Homepage vorbei:
http://kampis-elektroecke.de
Oder folge mir auf Google+:
Daniel Kampert
Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.
Gruß
Daniel
Das mag daran liegen, dass die ursprüngliche Frage auf den PCF8574 bzw. die Verwendung der R/W-Adressen zielte und nicht auf deinen PSoC. Des Weiteren habe ich gerade den Thread von vorn bis hintern noch einmal gelesen und keine Frage dies bezüglich finden können. (Ist noch früh daher kann es auch sein, dass ich etwas übersehen habe).
Von daher kann man ein Problem nicht lösen, wenn man es nicht kennt.
Grüße,
Daniel
Auf Seite 4 ganz oben wird es erwähnt
Also das Problem ist dieses (nochmal zusammengefasst):
Ich habe einen I²C Bus aus einem Raspberry Pi als Master, einem 24C128 EEPROM, einem PCF8574 und einem PSoC als I²C Slave (benutze das EzI²C Modul http://www.cypress.com/?docID=34801).
Per i2cdetect werden ALLE Geräte am Bus erkannt, aber das Schreiben und Lesen klappt nur beim PCF8574 richtig. Beim EEPROM lese ich was anderes aus als ich rein geschrieben habe und beim PSoC schlägt das Lesen und das Schreiben fehl.
Den PSoC als I²C Slave habe ich aber bereits mit einem Mega32 als Master ausprobiert und da klappte sowohl das Lesen als auch das Schreiben des Mega32 von dem PSoC problemlos.
Hier ist mal der Testcode vom Mega32:
Und vom PSoC:Code:'Mikrocontroller $regfile = "m32def.dat" $crystal = 16000000 $baud = 19200 'Stacks $hwstack = 200 $swstack = 200 $framesize = 400 'TWI konfigurieren Config Sda = Portc.1 Config Scl = Portc.0 Config Twi = 100000 'TWI Frequenz 'Adresse des PCF Const Psocw = &H80 Const Psocr = &H81 'Adresse vom PSoC. Der PSoC hat softwareseitig die '0x40 als 7-Bit Adresse bekommen. Mit R/W Bit ergibt 'Variablen 'dies 0x80 Dim Bitmuster As Byte Dim Buffer As Byte Bitmuster = 0 Buffer = 0 'I²C initialisieren I2cinit Do 'PSoC beschreiben I2cstart 'TWI Startkondition I2cwbyte Psocw I2cwbyte 0 'Startadresse des I²C Buffers vom PSoC I2cwbyte Bitmuster 'Daten übertragen I2cstop 'PSoC auslesen I2cstart I2cwbyte Psocr I2crbyte Buffer , Nack Print "Wert: " ; Buffer 'Ausgabe der Daten Incr Bitmuster 'Bitmuster um eins erhöhen Wait 1 Loop End
Hoffe das Problem ist dadurch etwas klarer gewordenCode://---------------------------------------------------------------------------- // C main line //---------------------------------------------------------------------------- #include <m8c.h> // Part specific constants and macros #include "PSoCAPI.h" // PSoC API definitions for all User Modules // Variablen char Wert = 100; // Funktionen void I2C_Init(void); void main(void) { M8C_EnableGInt; LCD_Start(); // LCD Modul aktivieren LCD_Position(0,0); LCD_PrCString("PSoC I2C Slave"); EzI2Cs_SetRamBuffer(1, 1, (char *)&Wert); // I²C Buffer setzen, 1 Byte Größe, 1 Byte Schreib/Lesbar I2C_Init(); while(1) { LCD_Position(1,0); LCD_PrCString("Wert:"); LCD_Position(2,0); LCD_PrHexInt(Wert); } } void I2C_Init(void) { EzI2Cs_Start(); // I²C Modul starten EzI2Cs_EnableInt(); // I²C Interrupts aktivieren }
Edit:
Den PSoC betreibe ich mit 5V. Da das Raspberry Pi nur 3,3V Pegel verwendet, nutze ich die Pull-Ups vom Raspberry Pi und habe damit einen 3,3V I²C Pegel.
Laut dem Datenblatt von dem Chip
http://www.datasheetcatalog.org/data...j2lq6ps83y.pdf
reichen 2,1V für einen High Pegel aus. Es kann also auch nicht sein das er die Pegel nicht erkennt.
Geändert von Kampi (08.10.2012 um 08:34 Uhr)
Schaut ruhig mal auf meiner Homepage vorbei:
http://kampis-elektroecke.de
Oder folge mir auf Google+:
Daniel Kampert
Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.
Gruß
Daniel
Hallo Daniel,
Laut I2C Spezifikation müssten es für HIGH Pegel VCC*0.7 sein. Bei 5V VCC wären das 3.5V, bei 3.3V VCC 2.31V. Die 2.1V beziehen sich demnach auf 3V VCC. Wenn du den Chip mit 5V betreibst, gilt 3.5V.
Dass manche Bauteile trotzdem noch gehen, mag Zufall sein. Du brauchst wohl einen Level Shifter für I2C oder du betriebst den PSOC auch mit 3.3V.
Erstmal danke für den Hinweis.
Wieso muss ich den für die Pegel die Betriebsspannung des Chips nehmen?
Der Bus läuft doch auf 3,3V und I²C ist doch Open Collector von daher sollte da doch die Betriebsspannung des Chips egal sein (oder habe ich da einen Denkfehler?)
Weil ich bin bisher immer von der Busspannung ausgegangen.
Ansonsten kennt jemand einen Levelshifter im DIP Gehäuse? Weil das Board mit 3,3V betreiben geht (glaube ich) nicht.
Schaut ruhig mal auf meiner Homepage vorbei:
http://kampis-elektroecke.de
Oder folge mir auf Google+:
Daniel Kampert
Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.
Gruß
Daniel
So ist es.
Mindestens bedeutet, daß es auch weniger sein kann. Und wenn das Datenblatt des Chips sagt, 2,1V ist das voll in den Specs. Da die Chips erkannt werden, liegt das Problem woanders. Jetzt noch eine zweite Baustelle mit Pegelwandlern aufzumachen ist nicht zielführend.Laut I2C Spezifikation müssten es für HIGH Pegel VCC*0.7 sein.
MfG Klebwax
Strom fließt auch durch krumme Drähte !
Im PSOC Datenblatt steht nur was von 2.1V für GPIO. Ob damit auch I2C gemeint ist, würde ich nicht von ausgehen. Mindestens 0.7*VCC für HIGH Pegel heisst gleich oder größer, aber nicht weniger. Wenn es mit dem Mega32 (ich nehme an unter 5V) geklappt hat und mit dem Raspberry Pi unter 3.3V nicht, dann spricht das für Pegelprobleme. Es kann natürlich auch ein Software Fehler im RasPi Code sein.
5V zu 3V Pegelwandler gibt es von AdaFruit oder Sparkfun.
Ja der Mega32 wurde mit 5V betrieben.
Im Grunde hat der PSoC nur GPIOs. Die Pins werden erst in der Software konfiguriert. Da kann man sich aussuchen wo man den I²C hinlegen will (gibt glaube ich P1.0 und 1.1 sowie 1.5 und 1.7 zur Auswahl). Von daher vermute ich das diese Spezifikationen egal für welches Protokoll/Anwendung sind.
Sicher bin ich mir da aber nicht.
Der Pegelwandler von Sparkfun eignet sich aber nicht für I²C soweit ich sehe. I²C ist bidirektional und der ist nur für eine Richtung. Oder sehe ich das falsch?
Schaut ruhig mal auf meiner Homepage vorbei:
http://kampis-elektroecke.de
Oder folge mir auf Google+:
Daniel Kampert
Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.
Gruß
Daniel
Haette ich was gefunden wuerde ich nicht gross dumm fragen...
Genau nach sowas hatte ich gesucht.
War zwar schon auf lm-sensors, hatte aber nur ne Doku ueber I2C generell gefunden.
Besten Dank![]()
Nam et ipsa scientia potestas est..
Lesezeichen