-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 18

Thema: Input/Output I2C Bus Interface

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    11.12.2013
    Beiträge
    9

    Input/Output I2C Bus Interface

    Anzeige

    Hallo zusammen!

    Zur Zeit arbeite ich an einem Projekt, und zwar will ich ein Interface bauen um
    Geändert von Eidechse (07.01.2014 um 13:03 Uhr)

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    03.09.2009
    Ort
    Berlin (Mariendorf)
    Beiträge
    938
    Hi, Eidechse.

    Erst mal willkommen im Forum!

    Was mir zuallererst auffällt, sind die fehlenden Basiswiderstände und die untypische Schalttransistor-Beschaltung: Üblich -weil sehr sinnvoll- ist es, den Basisstrom direkt von der Basis über den Emitter nach "0V" fließen zu lassen, der Verbraucher hingegen gehört zwischen +5V und den Kollektor.

    Funktional habe ich mir deinen Schaltplan nicht angesehen.
    Wo sind denn Eingänge?
    Warum bist du am verzweifeln? Die Bilder geben keine Anhaltspunkte dafür.

    Gruß
    RoboHolIC

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    1. Wenn die LEDs mit Vorwiderständen in den Platinen gemeinsam gegen GND verschaltet sind, kannst du die Treibertransistoren so verschalten, wie du das gemacht hast. Allerdings kann man diese Treiber dann nicht direkt mit dem PCF8574 ansteuern, sondern man braucht noch für jeden Kanal einen weiteren Transistor in Emitterschaltung. Dazu gehören dann auch noch je 2 Widerstände (Basiswiderstand und Kollektorwiderstand). Alternativ nimmt man einen PNP-Typ als Treiber für die LEDs.
    2. Wenn die LEDs auch anders zu beschalten sind (also gegen Plus), kriegt man das auch mit 1 Transistor hin.
    3. Bei den Eingängen weiss ich nicht genau, was der NXT erwartet, daher kann ich dazu nichts sagen. Ich kann auch aus deinem Schaltplan nicht sicher erkennen, wo die Eingänge anliegen.

    Wenn du weitere Hilfe brauchst, müßtest du auch beschreiben, WAS genau nicht funktioniert.
    Gruß
    Dirk

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.04.2008
    Beiträge
    279
    die Pull-Up Widerstände für SDA und SCL sind meiner Meinung nach auch deutlich zu hoch. Üblicherweise verwende ich dafür 4k7 und keine 82k! Dann sollte man die auch nur einmal pro Bus verwenden - üblicherweise direkt am Master und nicht auf den Slave-Platinen. Dafür fehlen die Basis-Widerstände an den Transistoren. Darüber, dass die Last üblicherweise im Collector-Pfad hängt wurde ja schon erwähnt.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    11.12.2013
    Beiträge
    9
    Hm okay, danke schon mal für die Antworten und Tipps.
    Geändert von Eidechse (07.01.2014 um 13:04 Uhr)

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.04.2008
    Beiträge
    279
    Um einen PCF8574 als Eingang zu benutzen musst Du zuerst schreibend alle Pins auf HIGH setzen. Die externe Beschaltung zieht die Pegel dann auf LOW indem sie die Pins auf Masse schaltet. Diesen Low-Pegel kannst Du dann beim Einlesen des Portexpanders erkennen.

    Hier ein Beispiel, wie man das mit C z. B. für einen Arduiono machen kann: http://cboden.de/mikro-controller/di.../45-pin-finder Dabei wird ein PCF8574 so angesteuert, dass seine Pins als Eingänge fungieren. Wenn Du die ganzen lcd Aufrufe weg lässt, bleibt nicht mehr viel Code für den PCF8574 übrig. Der Code sollte mehr oder weniger selbsterklärend sein. Bei Fragen dazu kann ich Dir aber gerne helfen. Anpassen auf Deine Programmierumgebung musst Du ihn aber selbst

    - - - Aktualisiert - - -

    hier mal der zusammengekürzte Programmcode, der nur noch die für den PCF8574 relevanten Teile beinhaltet:
    Code:
    // --------------------------------
    // Benötigte Bibliotheken einbinden
    // --------------------------------
    #include <TinyWireM.h> // I2C
    
    // ---------------------
    // Konstanten definieren
    // ---------------------
    #define PORT_ADDR 0x20 // I2C-Adresse für Port-Expander
    
    // -------------------------
    // globale Variablen anlegen
    // -------------------------
    boolean data_received = false; // Flag zum erkennen, ob Daten gelesen werden konnten
    
    // --------------------------------------------------------
    // Setup-Routine (wird automatisch beim Starten ausgeführt)
    // --------------------------------------------------------
    void setup(){
        // I2C Schnittstelle initialisieren
        TinyWireM.begin(); 
    
        // Port-Expander initialisieren 
        writePort(PORT_ADDR, 0xff);
    }
    
    // ------------------------------------------------------------
    // Haupt-Routine (wird kontinuierlich als Schleife durchlaufen)
    // ------------------------------------------------------------
    void loop(){
        byte data;
    
        // Eingänge lesen
        data=readPort(PORT_ADDR);
    
        // prüfen, ob valide Ergebnisse geliefert wurden
        if (data_received){
    
          // Ab hier stehen die Stati des Portexpanders in der Variable
          // data zur Verfügung
       }
    }
    
    // --------------------------------------------
    // Routinen zur Kommunikation mit dem Expander
    // --------------------------------------------
    byte readPort(int address) {
       byte data=0xff;
       TinyWireM.requestFrom(address,1);
       if(TinyWireM.available()){
          data=TinyWireM.receive();
          data_received=true;
       }
       else {
          data_received=false;
       }
    
       return data;
    }
    
    void writePort(int address, byte data) {
       TinyWireM.beginTransmission(address);
       TinyWireM.send(data);
       TinyWireM.endTransmission();
       delay(5);
    }
    Geändert von redround (12.12.2013 um 09:40 Uhr)

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    11.12.2013
    Beiträge
    9
    Danke redround,
    aber ich werde nichts programmieren, das Signal was kommt soll vom Lego NXT kommen.

  8. #8
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.04.2008
    Beiträge
    279
    dann wie gesagt einfach die Pins, die als Eingang genutzt werden sollen z. B. mit einem Taster gegen Masse schalten ... fertig

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    11.12.2013
    Beiträge
    9
    Ich will dazwischen noch ein
    Geändert von Eidechse (07.01.2014 um 13:04 Uhr)

  10. #10
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.04.2008
    Beiträge
    279
    Der ULN2003 ist ein Darlington-Treiber ... was willst Du damit erreichen? Und was verstehst Du unter einem Puffer?

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. C++ Output/Input
    Von luigi1999 im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 1
    Letzter Beitrag: 27.01.2013, 10:13
  2. Sharp GP2D120 Input/Output
    Von botneuling im Forum Sensoren / Sensorik
    Antworten: 2
    Letzter Beitrag: 17.01.2012, 17:30
  3. Input/(Output) Card
    Von TimBS im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 2
    Letzter Beitrag: 25.06.2009, 18:28
  4. L293 Masse an Input --> Output?!
    Von Manu_91 im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 24.02.2009, 15:49
  5. KEYLCD input output
    Von maximum2006 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 10.04.2006, 21:39

Berechtigungen

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