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.
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.
google liefert das hier: https://docs.microsoft.com/de-de/windows/uwp/devices-sensors/enable-usermode-access was aber verdammt kompliziert aussieht...
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
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.
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/
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.
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
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
Du müsstest ins Datenblatt schauen... Die Adressen werden manchmal über pullup oder pulldown Widerstände eingestellt
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.
Habe nun die "Windows IoT Extensions for the UWP" als Verweis eingehängt. Bringt leider auch nichts. Grüße Olli
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.
2te SD-karte nehmen. Raspbian drauf. apt-get i2c-tools i2cdetect und du siehst, was auf dem Bus ist.
https://www.hackster.io/porrey/discover-i2c-devices-on-the-raspberry-pi-84bc8b und da wäre ein I2Cscanner unter Windows.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.