Forum: PC-Programmierung Raspberry Pi 3 + Windows 10 ioT + I2C


von Oliver G. (olliver010)


Angehängte Dateien:

Lesenswert?

Hallo liebe Mikrocontroller Gemeinde,

Ich baue derzeit für mein Vater seine Gartenbahn ein Neues 
Touch-Schaltpult. Als Grundlage hierzu dient ein Raspberry Pi3 mit 
Windows 10 IoT Core, es sollen über I2C 8 MCP23017 angesteuert werden, 
die die Relais für die Weichen und Schienen-Stromversorgung schalten 
sollen.

Zum entwickeln habe Ich mich für C# entschieden aufgrund der einfachen 
Handhabung der GUI. Die GUI (Taster / Wechselschalter mit Farbwechsel) 
funktionieren soweit.

Allerdings bekomme Ich es nicht hin die MCP23017 anzusteuern.
Ich habe mich hierzu an das Offizielle Microsoft beispiel zum Thema 
gehalten, doch Ich bekomme immer eine "System.NullReferenceException" 
und die Variable die für die Connection steht hat im Debugger immer den 
Wert "Null".

Muss für I2C unter Windows 10 IOT Core noch Irgendetwas aktiviert 
werden?

Anbei auch der etwas Verschandelte Code durch viel zu viel Try and 
Error.

Schon mal danke für eure Unterstützung.
Beste Grüße Olli.

von Drahtverhau (Gast)


Lesenswert?

Hallo Olli!

Wenn ich mich recht erinnere, musst Du einen Verweis für die 
IoT-funktion hinzufügen. Dafür auf Verweis->Hinzufügen. Im dem Dialog 
denke ich musst Du auf Kernspeicher und dort irgendwo sollte sich eine 
Liste mit diversen funktionalitäten finden lassen, unter anderem 
IoT-Funktion. Diese musst Du hinzufügen. Ansonsten müssen noch die 
I2C-Adressen der MCP-Controller passen und es sollte klappen.

von Johannes S. (Gast)


Lesenswert?

google liefert das hier:
https://docs.microsoft.com/de-de/windows/uwp/devices-sensors/enable-usermode-access
was aber verdammt kompliziert aussieht...

von Dirk K. (merciless)


Lesenswert?

Oliver G. schrieb:
> Allerdings bekomme Ich es nicht hin die MCP23017 anzusteuern.
> Ich habe mich hierzu an das Offizielle Microsoft beispiel zum Thema
> gehalten, doch Ich bekomme immer eine "System.NullReferenceException"
> und die Variable die für die Connection steht hat im Debugger immer den
> Wert "Null".

In welcher Codezeile?

merciless

von Honk (Gast)


Lesenswert?

Oliver G. schrieb:
> Windows 10 IoT Core

Oliver G. schrieb:
> für C# entschieden

Sag mal, stehst du auf Folter? Ich kann mir sonst keinen anderen Grund 
vorstellen, warum man auf einem praktischen RPi so eine Bloatware nutzt.


Eines der einfachsten Möglichkeiten für I²C wäre übrigens Python.

von PittyJ (Gast)


Lesenswert?

Ich habe Raspbian auf meinen Raspis. Damit spreche ich auch verschiedene 
I2C Chips an. Das ist ein Kinderspiel.
Warum man ausgerechnet das am schlechtesten supportete OS nehmen muss, 
kann ich nicht verstehen.
Es soll sogar C# mit mono unter Raspbian gehen. Einfaches googlen 
liefert:
https://developer-blog.net/raspberry-pi-c-csharp/

von Oliver G. (olliver010)


Lesenswert?

schon mal danke für eure Zahlreichen und schnellen Antworten.

@Drahtverhau
Ist alles im Verweis "Universal Windows" enthalten. Ich habe allerdings 
nocheinmal das appxmanifest.xml angepasst und dort entsprechende 
Verweise für IoT hinterlegt.


@Johannes S.
Das habe Ich auch gefunden, allerdings ist das ganze in keinem Tutorial 
von Microsoft erklärt das hier "Registry" einträge gesetzt werden 
Müssen.
Zusätzlich werden im Iot Web-Dashboard 2 Treiber von Broadcom für I2C 
angezeigt.


@Dirk K.
In Zeile 374 ist die Variable i2cPortExpander_0 immer mit dem wert 
"NULL" belegt nach dem Klicken des Buttons.


@Honk
leider bin Ich bei Python viel zu wenig in der Sprache drinnen.

@PittyJ
Mono hatte Ich auch schon entdeckt allerdings scheint es nicht so 
einfach zu sein die GUI in XAML mit umziehen zu lassen auf einen unix.

von Dirk K. (merciless)


Lesenswert?

Oliver G. schrieb:
> @Dirk K.
> In Zeile 374 ist die Variable i2cPortExpander_0 immer mit dem wert
> "NULL" belegt nach dem Klicken des Buttons.

Ich gehe davon aus, dass in Zeile 268 die Initialisierung erfolgt:
1
i2cPortExpander_0 = await I2cDevice.FromIdAsync( i2cDeviceControllers[0].Id, mcp0_i2cSettings );
Das wird wohl fehlschlagen. Kannst du da reindebuggen?

merciless

von Oliver G. (olliver010)


Lesenswert?

Habe den Fehler gefunden, die Funktion "InitializeSystem();" wurde nicht 
nochmal beim Laden der App aufgerufen.

Allerdings stehe Ich nun vor der Meldung: "Slave address was not 
acknowledged."

Aber die Adressen der MCPs sind doch immer:
0x20, 0x21... usw.
So sind sie ja hinterlegt. Oder liege Ich da falsch?

Grüße Olli

von Drahtverhau (Gast)


Lesenswert?

Du müsstest ins Datenblatt schauen... Die Adressen werden manchmal über 
pullup oder pulldown Widerstände eingestellt

von Zeno (Gast)


Lesenswert?

Oliver G. schrieb:
> Ist alles im Verweis "Universal Windows" enthalten. Ich habe allerdings
> nocheinmal das appxmanifest.xml angepasst und dort entsprechende
> Verweise für IoT hinterlegt.

Das reicht bei dem bekloppten C# im Allgemeinen nicht. D.h., Du brauchst 
einen Verweis der direkt zu dem Assembly führt, welches die gewünschte 
Funktion bereit stellt. Der Verweis auf das übergeordnete Assembly 
reicht nicht aus.

So ganz nebenbei, der MS Kram wäre das Letzte was ich dem armen Pi und 
mir antun würde. Da würde ich mich dann doch lieber lernen wie man eine 
GUI mit Phyton macht.
Raspian und Lazarus sollte auch funktionieren.

von Oliver G. (olliver010)


Lesenswert?

Habe nun die "Windows IoT Extensions for the UWP" als Verweis 
eingehängt.
Bringt leider auch nichts.

Grüße Olli

von Johannes S. (Gast)


Lesenswert?

Oliver G. schrieb:
> Allerdings stehe Ich nun vor der Meldung: "Slave address was not
> acknowledged."

das hört sich aber schon danach an das es funktioniert, nur die I2C 
Adresse nicht gefunden wird. Das uralte Problem: 7 oder 8 Bit Adresse? 
Probier mal die 0x40.

Edit:
Obwohl, die Doku sagt 7 Bit Adressierung, da müsste 0x20 richtig sein 
wenn A0 .. A2 offen sind.

von PittyJ (Gast)


Lesenswert?

2te SD-karte nehmen. Raspbian drauf.
apt-get i2c-tools
i2cdetect
und du siehst, was auf dem Bus ist.

von Johannes S. (Gast)


Lesenswert?


von Oliver G. (olliver010)


Lesenswert?

Hey zusammen,

es liegt nicht an der Software soweit vorab.
Laut Web-Dashboard sind die Treiber da.

Und um meinem Code und dem Default-User zu Misstrauen habe Ich folgendes 
getestet:
http://www.photoatomic.com/post/2016/05/16/Turning-on-a-led-from-powershell-over-wi-fi-i2c.aspx

Da man dort via PowerShell-Remoting im Admin Modus ausführen kann.
Und da wieder mit der gleichen Fehlermeldung wie in Visual Studio.

Ich werde nochmal mit meinem Vater die Hardware durchchecken und mal nen 
test mit nem einzelnen MCP23017 durchführen.

Trotzdem danke für eure Tatkräftige Unterstützung.

Grüße Olli.

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.