- LiFePO4 Speicher Test         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: Netduino I2C Problem

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.04.2010
    Beiträge
    1.249

    Netduino I2C Problem

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hi

    Ich versuche Daten per I2C, von Netduino aus, zu senden.
    Nur meldet das Visual Studio immer folgenden Fehler:
    Eine nicht behandelte Ausnahme des Typs "System.ArgumentException" ist in Microsoft.SPOT.Hardware.dll aufgetreten.
    Hier mein Code:
    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);
    Woran kanns liegen? Ich denke das es nicht der Code selbst ist.

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    Ich denke mal, das I2CDevice.Configuration eine 7-Bit I2C Adresse erwartet. Probier mal 0x6F anstelle von 0xDE.

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.04.2010
    Beiträge
    1.249
    Was ein blöder Fehler... Hab alles vermutet, nur nicht das.
    Tausend Dank!

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.04.2010
    Beiträge
    1.249
    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
    Code:
                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);
                }
    Was ich da versuche zu senden ist das Beispiel auf Seite 8: http://www.lcd-module.de/fileadmin/p.../edip240-7.pdf

    Die I2C PullUp Widerständ haben 5,1kOhm.
    Bin für jeden Tipp dankebar.

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    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).

    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());
    Das eDIp240 Ist vielleicht nicht gerade das einfachste Beispiel um in die I2C Programmierung einzusteigen.

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.04.2010
    Beiträge
    1.249
    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...

  7. #7
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    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.

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.04.2010
    Beiträge
    1.249
    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.

  9. #9
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    Stimmt den nun die I2C Slave Adresse? Wie sind denn die Adress Jumper am Display verdrahtet?

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.04.2010
    Beiträge
    1.249
    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?

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests