Hallo zusammen Projektbeschrieb: Ich habe eine I2C Kommunikation zwischen einem Arduino Uno (Master) & PIC16F1787 (Slave) aufgebaut, welche Daten vom Master an den Slave sendet (write) und Daten vom Slave per Anfrage vom Master an den Master sendet (read). Alles funktioniert einwandfrei, die Daten werden richtig übertragen & empfangen. Abfolge Programm Master: 1.) Master scannt alle verfügbaren Slaves auf dem Bus 2.) Master sendet ein Datarequest an Slave (read) 3.) Master sendet Daten an den Slave (write) Problem: Sobald ich die I2C Kommunikation mit dem Oszilloskop messen will, funktioniert der I2C Bus nicht mehr. Beim Schritt 1 der Programmabfolge vom Master bleibt das Programm stehen. Wenn ich die Messsonden nicht mit dem I2C Bus verbinde funktioniert die Kommunikation jedoch einwandfrei ohne Probleme. Angaben: - Slave: PIC16F1787 - Master: Arduino Uno - Oszilloskop: RTB2002 (RHODE&SCHWARZ) - Messonden: PM9011/001 (1MOhm / 130pF) - Pullup Widerstände SDA & SCL = 4.7kOhm - VCC = 5V (Slave & Master) Frage: Was vermutet ihr, verursacht das Problem? Die Kapazität vom I2C Bus sollte 430pF (Laut Internet max Kapazität) ja nicht überschreiten (siehe Angaben Messsonden). Ich bin über jeden kleinen Hinweis froh. Bis jetzt habe ich noch nichts relevantes im Internet gefunden. Ich bin für eure Hilfe & Zeit äußerst Dankbar. Lg Ray
Da wirst du wohl einige I2C-Treiber/Expander verbauen muessen. Fuer jede > PM9011/001 (1MOhm / 130pF) einen Treiber/Expander. Oder (c-hater-Semantik): Dreh den verschissenen I2C-Takt runter. > RTB2002 (RHODE&SCHWARZ) Das Problem sitzt ueberwiegend vor dem Scope.
Vielen Dank für die rasche Antwort Pittiplatsch schrieb: > Dreh den verschissenen I2C-Takt runter. Ich verwende eine Taktrate von 100kHz. Die Taktrate darf ich nicht ändern. Pittiplatsch schrieb: > Das Problem sitzt ueberwiegend vor dem Scope. Ich bin mir nun sicher, dass die Kapazität das Problem ist. Sobald ich 100pF Konensatoren von SDA & SCL auf GND dazuschalte, ergibt sich das gleiche Problem. Ich versuchte auch schon mit einem kleineren Rp der Leitungskapazität entgegenzuwirken, jedoch ohne Erfolg. Verwende ich als Master einen Raspberry Pi 3B, kann ich ohne Problem die Kommunikation am Oszilloskop aufzeigen + Funktion ist gewährleistet. Das Problem muss also vom Arduino Uno hervorgerufen werden. Pittiplatsch schrieb: > Da wirst du wohl einige I2C-Treiber/Expander verbauen muessen. > Fuer jede >> PM9011/001 (1MOhm / 130pF) Gibt es noch andere Lösungsansätze? Könnte das Programm aus irgend einem Grund eine solche Auswirkung hervorrufen? Lg & Danke
Ray schrieb: > Könnte das Programm aus irgend einem Grund eine solche Auswirkung > hervorrufen? Da wir deinen Sketch nicht kennen, können wir dazu nichts schreiben.
Auch wenn ein Datenbus gestört ist, dann sollte das Programm weiter laufen. Bau ein paar Timeouts ein, und warte nicht ewig auf irgendwelche Flanken, die evtl nicht kommen.
Ray schrieb: > Ich bin mir nun sicher, dass die Kapazität das Problem ist. Sobald ich > 100pF Konensatoren von SDA & SCL auf GND dazuschalte, ergibt sich das > gleiche Problem. Jedes I2C Device muß mindestens 400pf treiben können, siehe Spec. Hat der Uno keine Pullups? MfG Klaus
Besorg Dir 1:10 Tastköpfe. Oder wenn die umschaltbar sind, stell sie auf 1:10. 1:1 ist nur für Gleichstrom und Audio brauchbar. Tritt das Problem schon auf wenn Du nur die Massekabel der Tastköpfe anklemmst und die Spitzen noch gar nicht dranhältst? Du hast die Massekabel ja angeklemmt, und zwar nahe bei der Messtelle? Nicht etwa eine Verbindung über ein langes Laborkabel? Das was Du beim Messen siehst, ungeachtet ob es nun funktioniert oder nicht, sieht das wie ein vernünftiges I2C-Signal aus? Anstiegszeit, Pegel, etc.
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.