Forum: Mikrocontroller und Digitale Elektronik Problem mit SoftWire auf Raspi Pico 2W unter Arduino


von Frank S. (whugnit)


Angehängte Dateien:

Lesenswert?

Ich würde gerne die SoftWire Library auf einem Raspi Pico 2W unter 
Arduino verwenden um einen SHT45 Temperatur- und Feuchtesensor 
auszulesen. Die SoftWire weil ich HW-unabhängig sein möchte und die Pins 
flexibel zuzuordnen sein sollen. Außerdem könnten mehr als die in HW 
vorhandenen I2C Interfaces benötigt werden.

Dabei kommt es immer wieder zu fehlenden Acknowledges. Wenn ich mir die 
Signale mit dem Oszi anschaue sehe ich immer wieder Phasen in denen SCL 
oder auch SDA auf Low sind und dann offensichtlich für 400ns getristated 
werden bevor sie wieder auf Low geschaltet werden. Der 4k7 Pullup zieht 
die Pegel dann bis auf ca. 2,2V hoch was natürlich Probleme verursachen 
kann

In der SoftWire sind solche kurzen Intervalle nicht vorhanden da bei 
meinen Einstellungen nach jedem Pinwechsel 10us gewartet wird was ich 
zusätzlich durch Traces in der Lib überprüft habe.

Die SoftWire verwendet digitalWrite, digitalRead und pinMode. Wenn ich 
die GPIO-Zugriffe durch eigene Funktionen ersetze die gpio_set_dir, 
gpio_get und gpio_put verwenden funktioniert alles.

pinMode scheint etwas unsauber implementiert zu sein, da zuerst der GPIO 
zurückgesetzt wird (und damit auch auf Input gestellt wird) und erst 
danach die Richtung eingestellt wird. Allerdings erklärt das nicht das 
Problem, da pinMode nur dann aufgerufen wird wenn ohnehin eine Änderung 
der Richtung erforderlich ist. Das beschriebene unsaubere Verhalten 
würde aber nur Probleme verursachen wenn man mehrmals hintereinander auf 
Output konfiguriert.

Kennt jemand solche oder ähnliche Probleme mit den Pico 2 GPIOs?

von Falk B. (falk)


Lesenswert?

Das mit dem Screenshot auf einem Digitaloszi üben wir dann besser noch 
mal . . .

Die Quelltexte der Methoden für digitalWrite etc. liegen in einem Ordner 
in der Arduino-Installation, dort kannst du nachsehen, was da verzapft 
wird. Und ja, die ist teilweise sehr akademisch und sicher nicht für 
sauberes Umschalten für I2C gedacht.

: Bearbeitet durch User
von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

Liegt bei mir hier

C:\Users\FalkB\AppData\Local\Arduino15\packages\rp2040\hardware\rp2040\2 
.4.0\cores\rp2040

von Rainer W. (rawi)


Lesenswert?

Frank S. schrieb:
> Der 4k7 Pullup zieht die Pegel dann bis auf ca. 2,2V hoch was natürlich
> Probleme verursachen kann

Wieso soll das Probleme machen können? Im entscheidenden Zeitfenster ist 
SDA doch stabil. Guck dir die I2C-Spezifikation noch einmal an.

von Frank S. (whugnit)


Lesenswert?

Falk B. schrieb:
> Das mit dem Screenshot auf einem Digitaloszi üben wir dann besser noch
> mal . . . [...]
Ich wollte das Bild halt nicht abmalen und werde mir das nächste Mal 
mehr Mühe geben weniger zu verwackeln und besser zu fokussieren und 
statt dem Mobiltelefon die Spiegelreflexkamera verwenden ;-)

Rainer W. schrieb:
> Frank S. schrieb:
>> Der 4k7 Pullup zieht die Pegel dann bis auf ca. 2,2V hoch was natürlich
>> Probleme verursachen kann
>
> Wieso soll das Probleme machen können? Im entscheidenden Zeitfenster ist
> SDA doch stabil. Guck dir die I2C-Spezifikation noch einmal an.
Das passiert nicht nur beim SDA sondern auch beim SCL und sieht dort 
genau so aus.

von Andreas M. (amesser)


Lesenswert?

Frank S. schrieb:
> Ich wollte das Bild halt nicht abmalen und werde mir das nächste Mal
> mehr Mühe geben weniger zu verwackeln und besser zu fokussieren und
> statt dem Mobiltelefon die Spiegelreflexkamera verwenden ;-)

Hmm, ich denke Falk wollte Dich auf den USB Port links unter dem Display 
aufmerksam machen.

von Helmut -. (dc3yc)


Lesenswert?

Frank S. schrieb:
> Der 4k7 Pullup zieht
> die Pegel dann bis auf ca. 2,2V hoch was natürlich Probleme verursachen
> kann

Wenn das ein 3.3V-System ist, sind 4k7 schon extrem hoch. Du darfst bis 
auf 1k8 runter gehen.

von Norbert (der_norbert)


Lesenswert?

Frank S. schrieb:
> Die SoftWire weil ich HW-unabhängig sein möchte und die Pins
> flexibel zuzuordnen sein sollen. Außerdem könnten mehr als die in HW
> vorhandenen I2C Interfaces benötigt werden.

Das ist mit großem Abstand der schlechteste Grund für irgend etwas 
›Soft‹
Wenn du deine Software auf einem µC laufen lässt welcher dir mit vollen 
Händen Hardware Schnittstellen zur Verfügung stellt, dann nimm sie.

Schlechter machen für andere µC kannst du die Software immer noch (mit 
erschreckend wenig Aufwand).

Die Picos stellen zwei fertige I2C zur Verfügung (auf GPIO 0…27), 
brauchst du mehr, dann mittels PIOs. Acht bis zwölf weitere sollten wohl 
gehen. Und zwar ebenfalls auf allen dir zur Verfügung stehenden GPIO.

Frank S. schrieb:
> Kennt jemand solche oder ähnliche Probleme mit den Pico 2 GPIOs?

Nein! Diese üblen Spikes, das sieht nach einer schlampig programmierten 
Library aus. Als wenn bei jedem Bit die IOs umkonfiguriert werden.

von Falk B. (falk)


Lesenswert?

Norbert schrieb:
> Nein! Diese üblen Spikes, das sieht nach einer schlampig programmierten
> Library aus. Als wenn bei jedem Bit die IOs umkonfiguriert werden.

Du bist ja ein Blitzmerker! Was wäre dieses Forum nur ohne dich?

von Falk B. (falk)


Lesenswert?

Helmut -. schrieb:

> Wenn das ein 3.3V-System ist, sind 4k7 schon extrem hoch.

Nö, das ist ein ganz normaler Wert, bei dem man bei halbwegs kurzen 
Leitungen sogar bis 400kbit/s gehen kann.

> Du darfst bis
> auf 1k8 runter gehen.

Ist hier gar nicht das Problem.

von Rainer W. (rawi)


Lesenswert?

Helmut -. schrieb:
> Wenn das ein 3.3V-System ist, sind 4k7 schon extrem hoch. Du darfst bis
> auf 1k8 runter gehen.

Was gefällt dir an den Signalen nicht?
Die steigenden Flanke sind doch steil genug, d.h. das Signal ist dicke 
schnell genug oberhalb von max V_IH.

: Bearbeitet durch User
von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Frank S. schrieb:
> Außerdem könnten mehr als die in HW
> vorhandenen I2C Interfaces benötigt werden.

Wieviel hundert I2C Dinger willst du anschließen?
Und I2C Multiplexer sind auch nicht deins?

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
Noch kein Account? Hier anmelden.