-
        

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 28

Thema: I2C Adressen

  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    67
    Beiträge
    1.118
    Blog-Einträge
    1

    I2C Adressen

    Anzeige

    Hallo Freunde !

    Seit nunmehr 2 Wochen sitze ich an einer I2C/TWI Sache und komme einfach nicht zurecht. Das grösste Problem sind die Adressen der I2C Slave-Chips, wie DS1307, PCF8574 u.ä.
    Wird an einer Stelle dem Porterweiterungschip PCF8574 die Adresse HEX 0x20 zugeordnet, so ist es an anderer Stelle 0x40 usw...usf. Auch beim DS1307 streieten sich die Götter, auch ein Blick in die Datenblätter brachten mir keine Erkenntnisse, im DB des PCF8574 habe ich gar keine Angabe darüber gefunden.
    Um es mal sarkastisch zu sagen, das wird doch wohl nicht schon heute als Grundschulwissen vermittelt , wie diese Adressen sind ?

    Auch sind die Programmbeispiele aus dem Web immer anders in der Adressierung, komisch sprechen sie doch das selbe Bauteil/Chip an, nur kann ich mir nicht vorstellen das alles im Web nur theoretische Ausarbeitungen sind , die praktisch nicht funktionieren können...

    Kann mir BITTE wer ein bischen helfen, bevor ich nur noch graue Haare habe ??

    Gerhard
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

  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
    Hallo Gerhard,

    die verschiedenen Adressen kommen daher, dass I2C die Geräte Adresse 7 Bit lang ist. Da aber immer 8 Bit übertragen werden kommt hier noch das Schreib/Lese (R/W) Bit dazu. Damit wird bestimmt ob der Master das Gerät beschreiben (R/W=0) oder lesen (R/W=1) will. Dummerweise ist das R/W Bit das untere der 8 Bits. Die Adresse liegt in den oberen 7 Bits. Je nach verwendeter I2C Bibliothek ensteht daraus dann mal 0x20 (0b0010000x) bzw. 0x40 (0b00100000) als Schreib Adresse oder 0x41 (0b00100001) als Lese Adresse. Alle Klarheiten beseitigt?

    Grüße Peter

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    67
    Beiträge
    1.118
    Blog-Einträge
    1
    Danke Peter !
    Ja vielen Dank, wenn man neu ins TWI Gewirre einsteigt ist es doch schon verwirrend. Das mit dem R/W Bit habe ich schon verstanden, aber so unterschiedliche Adressen wie 0x20 und 0x40 war mir einfach zu verwirrend. Ich nutze die TWI Bibliothek aus WinAVR also keine Fremdbibliothek.
    Was ich nmoch nicht so recht verstanden habe wie ich beim DS1307 die Stunde Minute und Secunde anspreche, war scheinlich muss ich die jeweilige Registeradresse dann zur Chipadresse addieren(??) Ist nirgends so richtig beschrieben...warscheinlich auf engl. Webseiten, aber so gut ist mein Fachenglish nicht wenn überhaupt was da richtig per Translator rausbekomme.
    Na ich werde mal weiter probieren, ein paar "Nichtgraue" Haare habe ich ja noch vorrätig

    Danke nochmals !!!
    Gerhard

    PS : ich versuche dieses Beispiel zu kapieren // aktualisiert 14.6. 10:38
    Geändert von oderlachs (14.06.2013 um 10:39 Uhr)
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

  4. #4
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    28
    Beiträge
    3.517
    Blog-Einträge
    9
    Hallo Gerhard,

    da bist du auf dem Holzweg.
    Eine I2C Kommunikation läuft immer so ab:

    Start
    Übermitteln der Geräteadresse
    Übermitteln von Registeradressen
    Übermitteln von Daten
    Ende

    Um das auf deine Uhr zu kopieren:
    I2C Startkondition senden, die 0x68 (die Geräteadresse der Uhr - siehe Datenblatt S. 12 - Slave Adress) senden, dann das Register was du auslesen willst (z.B. 0x01 für das Minutenregister), dann eine neue Startbedingung (steht auch im Datenblatt S. 11):

    http://datasheets.maximintegrated.com/en/ds/DS1307.pdf

    Und dann shiftet die Uhr den Inhalt des Register raus.
    Das musst du dann nur noch empfangen
    Und dieses Prinzip gilt für JEDES I2C Device.
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  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
    Hallo Gerhard, Kampi
    @Kampi Deinem Beitrag stimme ich zu, bis auf
    Und dieses Prinzip gilt für JEDES I2C Device.

    Der PCF8574 z.B. hat keine Registeradresse. Da folgen die Daten direkt nach der Adresse.
    Grüße Peter

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    09.09.2006
    Alter
    28
    Beiträge
    841
    Blog-Einträge
    1
    Manche Devices haben auch ein Autoinkrement des Addresspointers.

    Wenn du zum Beispielen 0x1d 0x44 schreibst, landest du bei Device 0x1d auf Adresse 0x44. Wenn ich jetzt 3 Bytes auslese liest er automatisch 0x44 0x45 0x46 aus. Muss aber das Device unterstützen und steht alles im Datenblatt.

  7. #7
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    28
    Beiträge
    3.517
    Blog-Einträge
    9
    Zitat Zitat von m.a.r.v.i.n Beitrag anzeigen
    Hallo Gerhard, Kampi
    @Kampi Deinem Beitrag stimme ich zu, bis auf
    Der PCF8574 z.B. hat keine Registeradresse. Da folgen die Daten direkt nach der Adresse.
    Grüße Peter[/COLOR]
    Stimmt. Den habe ich jetzt nicht bedacht.
    Paar Sonderlinge existieren und für genauere Infos ist immer ein Blick ins Datenblatt notwendig.
    Autoincrement hast du z.B. bei EEPROMs (24C02 o.ä.). Da brauchst du nur eine Startadresse übermitteln.

    Edit:
    Beim PCF8574 musst du auch beachten, dass der Chip drei Adresspins hat, sprich du kannst damit die Adresse noch verändern.
    Geändert von Kampi (14.06.2013 um 13:17 Uhr)
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  8. #8
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    67
    Beiträge
    1.118
    Blog-Einträge
    1
    Hallo Ihr Beiden,
    habt recht vielen Dank für die für mich recht viel erklärenden Zeilen.
    Zuerst habe ich mal dem Sch...AdobeReader vom PC geschmissen, der hat mit den datenblättern alles gemacht nur nicht das was ich gern hätte. Nun kann ich auch mit dem schon immer installierten Foxid-Reader die Datenblätter besser und auch vollständig(!!!) lesen und vorallen lesegerecht ausdrucken. Weiss auch nicht wie dieser Softwareekel von Adobe sich da eingenistet hatte.
    ich werde meine Code auf meinen Webspace veröffendlichen zur Begutachtung um das Forum hier nicht so zu belasten. es wäre nett wenn Ihr Euch das dann mal anschauen würdet.
    Aber nun "studiere" ich nochmals die Datenblätter und schreib den Code danach in meine main und headerdateien..

    Eine Frage habe ich noch, obwohl sie ja allgemeiner Art vielleicht ist, finde ich irgendwo eine Erklärung zu den Funktionen der Standart AVR Libs , hier zBsp die TWI.h und den daraus ergebenden Funktionen wie TWI_Write, TWI_Read oder so ?
    Da sehe ich noch gar nicht recht durch, ja ich bin vielleicht vom Arduino noch etwas angeschlagen, wo jede Standart Lib detailiert erklärt wurde..

    Danke Euch nochmals, war/ist echt ne Hife was da geschrieben wurde !

    Gerhard
    Geändert von oderlachs (14.06.2013 um 13:47 Uhr)
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

  9. #9
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    28
    Beiträge
    3.517
    Blog-Einträge
    9
    Hey,

    schau mal ob dir das hier hilft:

    http://www.atmel.com/Images/doc2565.pdf
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  10. #10
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    67
    Beiträge
    1.118
    Blog-Einträge
    1
    Ja Kampi das habe ich schon gelesen, na ja nicht alles noch nicht verstanden...
    Nun noch eine Frage was ich nicht kapiere, bzw sicherheitshalber nachfrage ich habe die DS1307 Adresse definiert:
    Code:
    #define DS1307      0x68  // Hex
    #define...
    will ich dieses Adresse jetzt an die write funktion übergeben muss ich sie erst noch umwandeln so wie hier:
    Code:
    adresse = (DS1307 << 1)
    twi_write(adresse,wr)  // wr 0 für write , 1 für read
    {...
    if (wr) adresse |= 1; //wr =1 für lesen
    TWDR = adresse ;
    TWCR= (1<< TWEN) | (1<< TWINT); 
    while (!(TWCR & (1 << TWINT)));  // warte bis fertig
    ...}
    wie habe ich das zu verstehen und muss ich die Register Adressen auch shiften ?? : adresse = (reg_adress << 1)

    Ich weiss ich nerve mit saudummen Fragen, abver irgendwann muss ich ja mal das kapieren, die Grundsätze wenigstens..

    Danke

    Gerhard

    Nachtrag : kampi habe mir eben das PDF doku ausgrdruckt, denke das ich da was von verstehe und anwenden kann....
    Geändert von oderlachs (14.06.2013 um 15:51 Uhr)
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

Seite 1 von 3 123 LetzteLetzte

Ähnliche Themen

  1. [ERLEDIGT] PCA 8574 M-Unit findet zwei I2C-Adressen am China LCD ????
    Von meistervolker im Forum Controller- und Roboterboards von Conrad.de
    Antworten: 3
    Letzter Beitrag: 29.07.2011, 19:21
  2. Cortex M3 Programcounter Adressen
    Von Siro im Forum ARM - 32-bit-Mikrocontroller-Architektur
    Antworten: 2
    Letzter Beitrag: 11.06.2010, 16:39
  3. #define und adressen setzten in asm30 - dspic
    Von Pitt1986 im Forum PIC Controller
    Antworten: 2
    Letzter Beitrag: 10.06.2008, 21:13
  4. Bootloader Adressen
    Von geronet im Forum AVR Hardwarethemen
    Antworten: 1
    Letzter Beitrag: 10.02.2007, 22:27
  5. Adressen im hex file
    Von MAXXX im Forum PIC Controller
    Antworten: 3
    Letzter Beitrag: 21.08.2005, 21:01

Berechtigungen

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