- fchao-Sinus-Wechselrichter AliExpress         
Seite 4 von 5 ErsteErste ... 2345 LetzteLetzte
Ergebnis 31 bis 40 von 43

Thema: Arduino Mega/Due: i2c Master port multiplexen

  1. #31
    HaWe
    Gast
    Anzeige

    LiFePo4 Akku selber bauen - Video
    ich bekam inzwischen einen ernüchternden Hinweis von Andy Shaw, einem Programmier-Profi, der auch das komplette Java-Betriebssystem samt VM für Lego NXT und EV3 entwickelt:

    I'm not surprised as I mentioned above the Lego I2C code (on both the NXT and EV3) adds extra wait states and an extra restart specifically for the Ultrasonic sensor. I doubt if any hardware I2C master will talk with it.
    (...)
    You can't add the extra wait states or the restart if using hardware i2c. See the following (or simply google Arduino Lego Ultrasonic) http://blog.tkjelectronics.dk/2011/10/nxt-shield-ver2/
    das ganze ist mir aber denn doch im Moment ein wenig zu hoch, und es bedeutet wohl das Aus für den Hardware-Muxer.
    Also bleibt dann trotz alledem nur noch das bitbang übrig.

  2. #32
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.09.2011
    Ort
    Hessen
    Beiträge
    707
    Doch, die Lego-Sensoren kann man mit einem Hardware I2C auslesen, da bin ich vorhin drüber gestolpert, als ich nach Code für Bitbanging gesucht habe.

    Siehe letzten Eintrag hier
    http://developer.mbed.org/forum/mbed/topic/804/

    Bitbanging würde von der Logik her so funktionieren
    https://github.com/todbot/SoftI2CMaster
    Problem: Der Code ist für den Uno. Um schnell genug zu sein, werden da direkt Register des Controllers manipulliert. Das würde bei einem Cortex-M3 wie beim Due ganz anders gehen. Weiß nichtmal, ob das 1:1 auf einem Mega geht, das sollten andere hier aber wissen. Deshalb mein Hinweis oben auf FastIO beim mbed, das hat man Zugriffszeiten auf IOs im zweistelligen Nanosekunden-Bereich und deshalb dieses Problem nicht.

  3. #33
    HaWe
    Gast
    der erste Link scheint aber doch nicht "richtiges" I2C zu sein, denn da steht doch
    I2C i2c(p9, p10);
    also ist es doch wohl nur eine Software-Emulation, oder?
    I2C auf dem mega hat ja eigene Pins, und auf dem Uno sind es Pins A3 und A4 oder schlagmichtot.

    Immerhin - ich bräuchte die 8 I2C Peipherals ja nicht nur für 1 Lego US-Sensor mit seinen besonderen Macken, sondern auch für frei wählbare gleiche, ähnliche oder andere Sensoren, sowohl lego als auch 3rdParty als auch Standard-i2c.

    Das scheint dann aber äußerst schwierig zu sein.

    Mit den github-Sachen kanst du mich jagen - ein derartiges Un-Ordner-Chaos, da blicke ich nicht durch. Da bräuchte ich
    1 Ordner zum Kopieren in den Arduino-lib-Ordner
    1 Ordner mit Tutorials in .ino und pdf-Form.

  4. #34
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.09.2011
    Ort
    Hessen
    Beiträge
    707
    Zitat Zitat von HaWe Beitrag anzeigen
    der erste Link scheint aber doch nicht "richtiges" I2C zu sein, denn da steht doch
    I2C i2c(p9, p10);
    also ist es doch wohl nur eine Software-Emulation, oder?
    Nein, es ist ein "Hardware Abstraction Layer", das ist ja der Sinn von mbed.

    Das Beispiel bezieht sich auf dieses IC
    http://developer.mbed.org/platforms/mbed-LPC1768/
    da siehst du in dem Bild: p9 und p10 können IO-Pins sein, ein UART oder ein I2C.

    Mit
    Code:
    I2C Wire(p9, p10);
    erstellt man ein Objekt, das den I2C-Bus kapselt, wie das Wire-Objekt in Arduino, was ja auch eine C++ Klasse ist (als vordefinierte globale Variable).

    Das ist auch der Trick an dem Code für den Lego Sensor
    Code:
           {
                I2C i2c(p9, p10);  // Ab hier sind die Pins ein I2C-Bus 
                
                // ... hier wird was mit I2C gemacht
    
           }  // jetzt sind die Pins wieder unbenutzt
           {
                DigitalInOut scl(p10);  // Jetzt ist p10 ein IO-Pin
                scl = 0;                              // er wird als Ausgang auf Low gesetzt
                scl.input();                          // jetzt wird er ein Eingang
                scl.mode(PullUp);                  // und der Pull-Up Widerstand eingeschaltet 
    
                // ...
    
           } // Jetzt ist p10 wieder unbenutzt 
           {
                I2C i2c(p9, p10);  // Jetzt ist wieder ein I2C-Bus auf den Pins
    
                // ...
           }
    Da hast du jetzt in der Tat ein schönes Beispiel gefunden, wo man zeigen kann, was mit mbed geht und nicht mit Arduino ...

  5. #35
    HaWe
    Gast
    ach so, das ist gar nicht für den Arduno Due?

  6. #36
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.09.2011
    Ort
    Hessen
    Beiträge
    707
    Auf dem Due müsste man die harte Tour wählen. Prozessorhandbuch lesen und die Register entsprechend belegen. Standard-Arduino wird da nicht weiterhelfen.

    An diese Stelle kommt man bei Due sehr schnell. Das ist nicht wie bei den 8-Bit Arduinos. Es gibt wenige Anwender, wenig Software, wenig Libraries und wenig Doku. Wer sich ernstaft damit beschäftigt, wechselt schnell zu was anderem.

    Aber vielleicht gibt es bald auch für fest auf Atmel fixierte einen Weg. Seit Anfang Oktober ist Atmel Mitglied bei mbed:
    https://atmelcorporation.wordpress.c...ment-platform/

  7. #37
    HaWe
    Gast
    Auf dem Due müsste man die harte Tour wählen. Prozessorhandbuch lesen und die Register entsprechend belegen. Standard-Arduino wird da nicht weiterhelfen.
    achduschei...
    nee. das ist nichts für mich.

  8. #38
    HaWe
    Gast
    update:


    ich habe nochmal was zu bitbang I2C gefunden - jemand der sich genau mit meinem derzeitigen Problem beschäftigt hat, nämlich den besagten NXT Ultraschallsensor zu bitbangen:

    http://blog.tkjelectronics.dk/2011/10/nxt-shield-ver2/

    das klappt jetzt mit dem Code dort!



    jetzt kann ich doch einen Hardware i2c-Mux/switch verwenden und brauch also jetzt einen, der Steckboard-kompatibel ist

  9. #39
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.09.2011
    Ort
    Hessen
    Beiträge
    707
    Gehe ich recht in der Annahme, dass du gar keinen Due hast ?

    Im Code von dem Link steht
    Code:
    * Software: AVR-GCC 3.4.3 / avr-libc 1.2.3
    * Target:   any AVR device with hardware TWI
    Der macht da das gleiche, wie der von mir gefundene mbed-Code, nämlich das Einfügen der zusätzlichen Signale auf dem SCL. Für die eigentliche Übertragung nimmt er aber das Hardware I2C, kein Bitbang.

    Nur macht er das halt auch, wie der andere Code von Sourceforge, durch Beschreiben der AVR-Register.

    Da auf dem Due aber kein AVR sondern ein SAM3 steckt, ist das nicht verwendbar.

  10. #40
    HaWe
    Gast
    hi,

    Den Due habe ich tatsächlich noch nicht, der ist noch mit der Post hierher unterwegs, ich habe den Code bisher erst auf einem Mega getestet.
    Wär ja wirklich doof, wenn der Code nicht auf dem Due läuft

Seite 4 von 5 ErsteErste ... 2345 LetzteLetzte

Ähnliche Themen

  1. [ERLEDIGT] I2C Problem mit dem Arduino DUE
    Von jok3r im Forum ARM - 32-bit-Mikrocontroller-Architektur
    Antworten: 2
    Letzter Beitrag: 22.03.2014, 12:21
  2. Arduino Due + Treiber + Schrittmotor PROBLEM
    Von stevie3354 im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 30.01.2014, 23:11
  3. I2C Terminal von CCTools.eu und Arduino Mega
    Von meddie im Forum Arduino -Plattform
    Antworten: 0
    Letzter Beitrag: 21.08.2013, 21:12
  4. Arduino Due HSMCI - SD/SDIO/MMC
    Von Superhirn im Forum ARM - 32-bit-Mikrocontroller-Architektur
    Antworten: 0
    Letzter Beitrag: 25.01.2013, 10:57
  5. Arduino Due erschienen
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 0
    Letzter Beitrag: 24.10.2012, 22:20

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress