Ich denke mal, das I2CDevice.Configuration eine 7-Bit I2C Adresse erwartet. Probier mal 0x6F anstelle von 0xDE.
Hi
Ich versuche Daten per I2C, von Netduino aus, zu senden.
Nur meldet das Visual Studio immer folgenden Fehler:
Hier mein Code:Eine nicht behandelte Ausnahme des Typs "System.ArgumentException" ist in Microsoft.SPOT.Hardware.dll aufgetreten.
Woran kanns liegen? Ich denke das es nicht der Code selbst ist.Code:I2CDevice I2C = new I2CDevice(new I2CDevice.Configuration(0xDE, 100)); I2CDevice.I2CTransaction[] Actions = new I2CDevice.I2CTransaction[1] { I2CDevice.CreateWriteTransaction(new byte[] { 0x11 })/*, I2CDevice.CreateWriteTransaction(new byte[] { 0x0a }), I2CDevice.CreateWriteTransaction(new byte[] { 0x1b }), I2CDevice.CreateWriteTransaction(new byte[] { 0x44 }), I2CDevice.CreateWriteTransaction(new byte[] { 0x4c }), I2CDevice.CreateWriteTransaction(new byte[] { 0x1b }), I2CDevice.CreateWriteTransaction(new byte[] { 0x47 }), I2CDevice.CreateWriteTransaction(new byte[] { 0x44 }), I2CDevice.CreateWriteTransaction(new byte[] { 0x00 }), I2CDevice.CreateWriteTransaction(new byte[] { 0x00 }), I2CDevice.CreateWriteTransaction(new byte[] { 0xef }), I2CDevice.CreateWriteTransaction(new byte[] { 0x7f }), I2CDevice.CreateWriteTransaction(new byte[] { 0xda })*/ }; int result = i2c.Execute(Actions, 100);
Ich denke mal, das I2CDevice.Configuration eine 7-Bit I2C Adresse erwartet. Probier mal 0x6F anstelle von 0xDE.
Was ein blöder Fehler... Hab alles vermutet, nur nicht das.
Tausend Dank!
Es haut immernoch nciht hin, bin langsam am verzweifeln.
Ich habe alles so angeschlossen wie hier: http://www.goblack.de/desy/digitalt/...ea240-i2c.html
Nur wenn ich Daten sende reagiert das Display mit abschalten...
Ich habe mit I2C noch garkeine Erfahrung...
HIer mein Code
Was ich da versuche zu senden ist das Beispiel auf Seite 8: http://www.lcd-module.de/fileadmin/p.../edip240-7.pdfCode:byte[] data = new byte[1]; I2CDevice I2C = new I2CDevice(new I2CDevice.Configuration(0x4e, 100)); I2CDevice.I2CTransaction[] befehl = new I2CDevice.I2CTransaction[14] { I2CDevice.CreateWriteTransaction(new byte[] { 0x11 }), I2CDevice.CreateWriteTransaction(new byte[] { 0x01 }), I2CDevice.CreateWriteTransaction(new byte[] { 0x1b }), I2CDevice.CreateWriteTransaction(new byte[] { 0x44 }), I2CDevice.CreateWriteTransaction(new byte[] { 0x4c }), I2CDevice.CreateWriteTransaction(new byte[] { 0x1b }), I2CDevice.CreateWriteTransaction(new byte[] { 0x47 }), I2CDevice.CreateWriteTransaction(new byte[] { 0x44 }), I2CDevice.CreateWriteTransaction(new byte[] { 0x00 }), I2CDevice.CreateWriteTransaction(new byte[] { 0x00 }), I2CDevice.CreateWriteTransaction(new byte[] { 0xef }), I2CDevice.CreateWriteTransaction(new byte[] { 0x7f }), I2CDevice.CreateWriteTransaction(new byte[] { 0xda }), I2CDevice.CreateReadTransaction(data) }; i2c.Execute(befehl, 1000); OutputPort led = new OutputPort(Pins.ONBOARD_LED, false); if (data[0] != 0) led.Write(true); if (data[0] == 0) { led.Write(true); Thread.Sleep(200); led.Write(false); Thread.Sleep(200); led.Write(true); Thread.Sleep(200); led.Write(false); }
Die I2C PullUp Widerständ haben 5,1kOhm.
Bin für jeden Tipp dankebar.
Hier ein paar Tips zu deinem Programm.
1. Du sendest jedes Byte einzeln. Du solltest aber das komplette Kommando in einer I2C Übertragung senden.
2. Du sendest als 2. Byte eine 0x01. Das ist die Paketlänge, die sollte aber 0x0a sein.
3. Du solltest den zurückgelesenen Wert testen, ob alles Ok war.
4. Die bcc Checksumme ist einfach die aufaddierte Summe der gesendeten Bytes (nur unteres Byte gültig).
Das eDIp240 Ist vielleicht nicht gerade das einfachste Beispiel um in die I2C Programmierung einzusteigen.Code://create transactions (we need 2 in this example) I2CDevice.I2CTransaction[] xActions = new I2CDevice.I2CTransaction[2]; // create write buffer (we need 13 bytes) byte[] Command = new byte[13] { 0x11, 0x0a, 0x1b, 0x44, 0x4c, 0x1b, 0x47, 0x44, 0x00, 0x00, 0xef, 0x7f, 0xda }; xActions[0] = I2CDevice.CreateWriteTransaction(Command); // create read buffer to read the answer byte[] Response = new byte[1]; xActions[1] = I2CDevice.CreateReadTransaction(Response); // Now we access the I2C bus and timeout in one second // if no response i2c.Execute(xActions, 1000); Debug.Print("Response value: " + Response[0].ToString());
Erstmal danke das du dich meiner Sache annimmst.
Das Beispiel oben ist falsch... keine Ahnung warum ich das gepostet hab...
Leider tut sich mit deinem Beispiel noch immer nichts.
Wie bekomm ich eigentlich die Debug Ausgabe zu sehen? Bin in C# absolut neu...
Ich besitze kein Netduino Board nur ein FEZ Domino. Dort ist die Debug Ausgabe das Standard Ausgabe (Output) Fenster von Visual Studio. Das sollte beim Netduino auch so sein.
Als Einführung kann ich das NETMF Beginner Guide eBook sehr empfehlen. Ist zwar in erster Linie für die FEZ boards geschrieben. Sollte aber ohne große Anpassungen auch auf dem Netduino funktionieren.
Ok, jetzt hab ich die Ausgabe gefunden...
Wenn cih für Response[0] einen Wert vorgeb, z.B. 77, dann bekomm ich in der Ausgabe genau diesen Wert angezeigt. Also als wenn garnichts von Display zurückkommt.
Stimmt den nun die I2C Slave Adresse? Wie sind denn die Adress Jumper am Display verdrahtet?
BA 0, 1, 2, liegen an Masse, SA 0, 1, 2 sind offen, intern ja PullUp.
So sollte die Adresse zum schreiben 1F und zum lesen 1E sein, seh ich das richtig? Hab das jedenfalls so geändert.
Sind die Widerstände mit 5,1kOhm richtig oder zu hoch?
Per Programmierboard und HTerm klappt die kommunikation, aber das hat ja auch ncihts mit I2C zu tun.
Muss ich die Pins erst irgendwie initialisieren?
Lesezeichen