-         

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

Thema: I2C Porterweiterung am ASURO

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    05.03.2007
    Alter
    48
    Beiträge
    33

    I2C Porterweiterung am ASURO

    Anzeige

    Hi nun wurde das Layout auf AsuroWiki geändert. Ich hatte mir noch die alte Layoutzeichnung ausgedruckt. Aber laut Schaltplan war es ja eindeutig mit den Adressleitungen.

    Huch, habe gerade bei einem nochmaligen hinsehen gesehen, das der R7 in Layoutbild mit R1 bezeichnet ist. (Schönheitsfehler)

    Aber nun zu meinem Problem oder eher nur Unwissenheit.
    Ich habe mir, weil ich den Hals ja nicht vollgenug kriegen kann, eine Platine geätzt, wo ich gleich 2 Porterweiterungen nebeneinander drauf habe. Man weis ja nie was man noch für Ideen bekommt und alles dranhängen will.

    Aber was ist denn mit den drei Widerständen R1,R2,R3 als Abschluß für die Datenleitungen (SDA, SCL). Wenn ich nun zwei Porterweiterungen nutze, sollte ich die Abschlußwiderstände auf jede Porterweiterung setzen oder kann ich die komplett weglassen?

    Was bewirken diese Widerstände überhaupt?

    Schon mal einen Dank an alle Spezialisten.

  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
    Hi,

    das der R7 in Layoutbild mit R1 bezeichnet ist. (Schönheitsfehler)
    Richtig. Das muß ich mal bei Gelegenheit korrigieren.

    Aber was ist denn mit den drei Widerständen R1,R2,R3 als Abschluß für die Datenleitungen (SDA, SCL). Wenn ich nun zwei Porterweiterungen nutze, sollte ich die Abschlußwiderstände auf jede Porterweiterung setzen oder kann ich die komplett weglassen?
    Was bewirken diese Widerstände überhaupt?
    R1 und R2 sind die PullUp Widerstände für den I2C Bus und müssen einmal vorhanden sein. R3 ist für die optionale Interrupt Leitung und nicht notwendig, wenn man kein Interrupt benutzen will. Dabei fällt mir gleich der nächste Fehler auf, diesmal im Schaltbild zur I2C -Erweiterung. Die Widerstände hängen direkt an SCL und SDA gegen VCC und nicht über Jumper, wie im Schaltbild zu sehen.

    Guck mal im Schaltbild zur LCD Erweiterung, dort wird dieselbe Schaltung stark vereinfacht verwendet.

    Bei 2 Porterweiterungen müssen die AdressPins unterschiedlich belegt sein. Entweder über Jumer oder Lötbrücken.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    05.03.2007
    Alter
    48
    Beiträge
    33
    So jetzt stehe ich vor der nächsten Frage.
    Ich habe mir das Datenblatt vom 8574 angesehen,
    kann aber die Adressen nicht finden.
    Die Adresse
    #define Dev8574 0x40
    aus dem Beispiel scheint ja die erste zu sein, wenn alles auf Masse ( Also 0 0 0 ).
    Woher weis ich nun, was ich bei
    #define Dev8574
    angeben muß z.B für 0 0 1.

    Habe ich etwas im Datenblatt übersehen?

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    Hi,

    im Datenblatt S.9 steht die Antwort A0..A2 sind die 3 niederwertigsten Adressen. Demnach wäre
    Code:
    #define Dev8574 0x41       // A0=1, A1=0 A2=0
    richtig.

  5. #5
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    31
    Beiträge
    3.912
    im datenbaltt steht ein schema:

    Adresse ist 0 1 0 0 A2 A1 A0 0
    also wenn alle drei adressjumper gegen masse stehen, dann 01000000
    wenn alle gezogen sind (nicht auf masse) sind dann 01001110

    du solltest versuchen, die adressen so weit wie möglich voneinander entfernt zu wählen, bei mir stören sich die chips etwas.

    Achtung (auch @marvin =)
    das niederwertigste bit ist das lese/schreib bit, wie bei allen i2c-bausteinen. die adresse 0x41 bedeutet also "lesen von adresse 0x40"

    die jumper betreffen also die bytes mit der (dezimalen) wertigkeit 2,4 und 8 und NICHT das niederwertigste byte (1)
    kleinschreibung ist cool!

  6. #6
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    Stimmt natürlich was damaltor da schreibt.
    Dann vergiß mal den Mist, den ich vorher geschrieben habe.

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    05.03.2007
    Alter
    48
    Beiträge
    33
    Wenn ich also
    #define Dev8574 0x40
    als Adresse vorgebe, kann ich mit
    i2c_start(Dev8574+I2C_WRITE)
    nur Daten auf die Prots schreiben aber nicht mit
    (Dev24C02+I2C_READ) Daten von den Ports auslesen ?!?

    Wenn ich also Daten mit (Dev24C02+I2C_READ)
    von den Ports lesen will muß ich vorher
    #define Dev8574 0x41
    für den Baustein angeben ?!?

    Ich kann also nicht einfach durch wechsel von
    (Dev8574+I2C_WRITE) und (Dev24C02+I2C_READ)
    zwischen lesen und schreiben wechseln.

    Also für mich Dummi noch mal:
    #define Dev8574 0x40 dann i2c_start(Dev8574+I2C_WRITE);
    #define Dev8574 0x41 dann i2c_start(Dev24C02+I2C_READ);


    Danke Euch allen.

  8. #8
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    nein, I2C_READ ist doch als 1 definiert I2C_WRITE als 0. Siehe i2cmaster.h
    Code:
    #define I2C_READ    1
    #define I2C_WRITE   0
    Damit wird ja beim Lesen die Adresse 0x41 errechnet 0x40+1. Und das ist ja die Leseadresse. Es bleibt also bei

    Code:
    #define Dev8574 0x40
    für den ersten Porterweiterungs IC mit Adresse 000.

    und
    Code:
    #define Dev8574_2 0x42        // 001
    #define Dev8574_3 0x44        // 010
    #define Dev8574_4 0x46        // 011
    #define Dev8574_5 0x48        // 100
    ...
    für die weiteren Porterweiterungs ICs.

    Dev24C02 ist die BasisAdresse für ein I2C EEPROM und hat hier nichts verloren.

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    05.03.2007
    Alter
    48
    Beiträge
    33
    PUH !!!

    Ich hatte mir Dev24C02+I2C_READ aus der i2cmaster.h
    rausgesucht.

    Aber wer lesen kann ist klar im Vorteil!!!
    Es steht ja da:
    Dev24C02 0xA2 // device address of EEPROM 24C02, see datasheet

    Danke

  10. #10
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    31
    Beiträge
    3.912
    benutzt du den EEPROM? was sind deine erfahrungen damit? (und warum benutzt du nicht den eingebauten eeprom? reichen 512 bytes nicht? =)

    +I2C_READ ist eigentlich nur +1, ist schon richtig. sollte deshalb kein problem darstellen. allerdings kannst du nicht am gleichen baustein lesen und schreiben: wenn du zB alle ports des bausteins auf low ziehst (write 0x00) und dann strom drauf kommt (den du eigentlich lesen willst) dann ist das ein klassischer kurzschluss.
    kleinschreibung ist cool!

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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