- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 10 von 28

Thema: I2C Adressen

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    35
    Beiträge
    3.501
    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

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

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    09.09.2006
    Alter
    35
    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.

  4. #4
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    35
    Beiträge
    3.501
    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 12: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

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    74
    Beiträge
    1.175
    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 12:47 Uhr)
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

  6. #6
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    35
    Beiträge
    3.501
    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

  7. #7
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    74
    Beiträge
    1.175
    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 14:51 Uhr)
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

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

    naja so sau dumm ist die Frage nicht
    Die Adresse die im Datenblatt steht (in deinem Fall die 0x68 ) ist die Grundadresse, sprich OHNE Read/Write Bit.
    Das heißt für eine komplette Adresse musst du das Read/Write Bit noch anhängen und das ist ja immer unterschiedlich, je nachdem ob du Lesen oder Schreiben willst.
    Ergo wird das Bitmuster für die 0x68 um eine Stelle nach links geschoben.
    Dadurch wird das Read/Write Bit automatisch mit einer 0 gefüllt und du musst es im Falle eines schreibenden Zugriffs nur noch auf 1 setzen (das machst du, indem du die Adresse mit einer 0x01 verODERst).
    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

Ä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, 18:21
  2. Cortex M3 Programcounter Adressen
    Von Siro im Forum ARM - 32-bit-Mikrocontroller-Architektur
    Antworten: 2
    Letzter Beitrag: 11.06.2010, 15:39
  3. #define und adressen setzten in asm30 - dspic
    Von Pitt1986 im Forum PIC Controller
    Antworten: 2
    Letzter Beitrag: 10.06.2008, 20:13
  4. Bootloader Adressen
    Von geronet im Forum AVR Hardwarethemen
    Antworten: 1
    Letzter Beitrag: 10.02.2007, 21:27
  5. Adressen im hex file
    Von MAXXX im Forum PIC Controller
    Antworten: 3
    Letzter Beitrag: 21.08.2005, 20:01

Berechtigungen

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

12V Akku bauen