-         

Seite 1 von 7 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 70

Thema: Raspberry Pi I2C

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

    Raspberry Pi I2C

    Anzeige

    Hallo Forum,

    ich habe es erfolgreich geschafft einen PCF8574 mit meinem Raspberry Pi über I²C anzusprechen.
    Allerdings ist mir eine Sache nicht ganz klar....
    Ich verwende dieses Programm hier:

    Code:
    // Compile with: GCC /var/Programme/UART.c -o /var/Programme/UART
    
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <linux/i2c-dev.h>
    #include <linux/i2c.h>
    #include <fcntl.h>
    #include <string.h>
    #include <sys/ioctl.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <unistd.h>
    
    
    char Device[] = "/dev/i2c-0";	
    int fd;
    int res;
    int  address = 0x20;
    char Buffer[1];
    
    
    
    
    int main(int argc, char** argv)               																// Programmstart
    {
    	fd = open(Device, O_RDWR);
    	
    	if (ioctl(fd, I2C_SLAVE, address) < 0) 																	// Set the port options and set the address of the device we wish to speak to
    	{					
    		printf("Unable to get bus access to talk to slave\n");
    		exit(1);
    	}
    	
    	res = write(fd, argv[1], 1);
    	
    	close(fd);
    	return 0;
    }
    Die Adresse vom PCF ist die Adresse ohne R/W Bit. Und wenn ich mittels

    sudo i2cdetect -y -a 0

    den Bus nach Geräten absuche, taucht dort nur diese Adresse auf.
    Wird das R/W Bit Hard oder Softwaremässig gesetzt oder wie funktioniert das?

    Danke für die Antwort!
    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
    Registriert seit
    07.03.2011
    Beiträge
    1.399
    Zitat Zitat von Kampi Beitrag anzeigen
    Die Adresse vom PCF ist die Adresse ohne R/W Bit. Und wenn ich mittels

    sudo i2cdetect -y -a 0

    den Bus nach Geräten absuche, taucht dort nur diese Adresse auf.
    Natürlich. Ein I2C Slave hat nur eine Adresse. Diese ist 7 Bit lang.

    Wird das R/W Bit Hard oder Softwaremässig gesetzt oder wie funktioniert das?
    Diese Frage verstehe ich nicht. Der User entscheidet, von welchem Slave er lesen oder schreiben will. Der Device-Driver macht dann das passende daraus. Ob das dann Hardware oder Software ist, ist aus der User Ebene nicht zu erkennen.

    BTW Programme gehören nicht nach /var , Sourcecode schon garnicht. Wie der Name /var(iable) schon sagt, ist das der Platz für variable Daten.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.06.2008
    Beiträge
    183
    Das R/W Bit ist Bestandteil der Adresse (Bit 0). Ist das Bit 0 auf 0, dann werden die vom Master gesendeten Daten auf das Port ausgegeben. Ist das Bit 0 auf 1, dann werden die Daten vom Port gelesen und an den Master gesendet.

    Die I2C Adresse besteht eigentlich aus 2 Adressen: 0xX0 und 0xX1.

    Siehe auch:

    I2C Interface
    PCF8574
    SCPS068G–JULY 2001–REVISED MAY 2008.............................................. .................................................. .................................................. ............ www.ti.com
    I2C communication with this device is initiated by a master sending a start condition, a high-to-low transition on
    the SDA I/O while the SCL input is high. After the start condition, the device address byte is sent,
    most-significant bit (MSB) first, including the data direction bit (R/W). This device does not respond to the general
    call address. After receiving the valid address byte, this device responds with an acknowledge, a low on the SDA
    I/O during the high of the acknowledge-related clock pulse. The address inputs (A0–A2) of the slave device must
    not be changed between the start and the stop conditions.
    The data byte follows the address acknowledge. If the R/W bit is high, the data from this device are the values
    read from the P port. If the R/W bit is low, the data are from the master, to be output to the P port. The data byte
    is followed by an acknowledge sent from this device. If other data bytes are sent from the master, following the
    acknowledge, they are ignored by this device. Data are output only if complete bytes are received and
    acknowledged. The output data will be valid at time, tpv, after the low-to-high transition of SCL and during the
    clock cycle for the acknowledge.
    A stop condition, which is a low-to-high transition on the SDA I/O while the SCL input is high, is sent by the
    master.
    Interface Definition
    BIT
    BYTE 7 (MSB) 6 5 4 3 2 1 0 (LSB)
    I2C slave address L H L L A2 A1 A0 R/W
    I/O data bus P7 P6 P5 P4 P3 P2 P1 P0
    MfG
    Hans

  4. #4
    Erfahrener Benutzer Roboter Experte Avatar von ePyx
    Registriert seit
    14.05.2008
    Ort
    Falkensee
    Beiträge
    700
    Was Kampi meint ist, ob er das Bit auf Softwareseite setzen muss. Antwort ist auch hier ja. Einfach Adresse + 1 = R-Zugriff und Adresse + 0 ist W-Zugriff.

    i2detect wird halt nur die W-Adresse also die 7-Bit-Adresse ausspucken.
    Grüße,
    Daniel

  5. #5
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.554
    Hi Kampi, hi Klebwax, ich muss mich ja mittlerweile (und notgedrungen) hier etwas mit I2C beschäftigen. BTW: vielen Dank Klebwax für Deine Hilfe dort.

    Zitat Zitat von Klebwax Beitrag anzeigen
    Natürlich. Ein I2C Slave hat nur eine Adresse. Diese ist 7 Bit lang ...
    Ich zitiere mal von NXP Semiconductors UM10204, Rev. 4 — 13 February 2012, Seite 3:

    • Each device connected to the bus is software addressable by a unique address

    Und auf Seite 8:
    10-bit slave address (Anm.: optional für Single master, Multi-master oder master acting as a slave).
    Ciao sagt der JoeamBerg

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.03.2011
    Beiträge
    1.399
    Die I2C Adresse ist 7 Bit. Aus dem Standard:

    This address is seven bits long
    Der I2C Bus transportiert Daten Byte (d.h. 8 Bit) weise. Das Erste Byte nach einem Start nennt man Adressbyte.

    After the START condition (S), a slave address is sent. This address is seven bits long followed by an eighth bit which is a data direction bit (R/W) — a ‘zero’ indicates a transmission (WRITE), a ‘one’ indicates a request for data (READ)
    Daß bei einer Datenkommunikation mehrere Felder in einem Byte vorhanden sind, ist gängige Praxis. Hier sind es zwei Felder, in den oberen 7 Bit die Adresse und im untersten das Direction Bit.

    Was Kampi meint ist, ob er das Bit auf Softwareseite setzen muss. Antwort ist auch hier ja. Einfach Adresse + 1 = R-Zugriff und Adresse + 0 ist W-Zugriff.
    Das geht garantiert in die Hose.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  7. #7
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    27
    Beiträge
    3.517
    Blog-Einträge
    9
    Huiuiuiui viele Antworten.
    Erstmal danke Klebwax für den Hinweis mit dem /var Ordner.
    Ich habe mir das nochmal durchgelesen und damit hat sich meine Frage geklärt.
    Ich bin bisher davon ausgegangen, dass das R/W Bit ein fester Bestandteil der Adresse ist (sprich die Adresse 8 Bit lang ist).
    Und dementsprechend war ich ein wenig verwirrt, weil mein Bascomprogramm nutzt die Adresse 0x40 um was in den PCF zu schreiben und mein C-Programm für das Raspberry nutzt 0x20.
    Das hat mich gestern Abend ein bischen zum grübeln gebracht.
    Aber jetzt habe ich im Datenblatt gesehen, dass das Writebit beim PCF standartmässig auf 0 steht.
    Aber nochmals danke für die fixen Antworten (die Frage lag sehr wahrscheinlich an der Uhrzeit gestern.....hab bisl vergessen auf die Uhr zu gucken)
    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
    Registriert seit
    19.02.2006
    Beiträge
    982
    Kurz mal so halb off-topic..
    Ist I2C eigentlich schon fester Bestandteil von Raspian?
    Wenn nein, wie implementiert man das am besten?

    Gruss, Andreas
    Nam et ipsa scientia potestas est..

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

    also ich habe da gestern etwas rumgedoktort und kann deshalb nicht sicher sagen wie und wodurch es jetzt funktioniert hat.
    Hast du ein I²C Device zur Hand welches du eben anschließen kannst und mal gucken kannst ob du mittels

    sudo i2cdetect -y -a 0

    was angezeigt bekommst?
    Das sollte dann etwa so aussehen:

    Code:
         0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
    00: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    20: 20 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    70: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    Nur die Adresse von deinem Gerät ist dann sicher anders.

    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
    Registriert seit
    19.02.2006
    Beiträge
    982
    Ja, I2C Device ist vorhanden.
    Hab aber noch das erste release von Raspian drauf.
    Aber separat installieren musstest du nichts?
    Mh..muss ich mich heut Abend mal schlau machen.
    Nam et ipsa scientia potestas est..

Seite 1 von 7 123 ... LetzteLetzte

Ähnliche Themen

  1. [ERLEDIGT] Raspberry Pi GPIO
    Von Kampi im Forum Raspberry Pi
    Antworten: 4
    Letzter Beitrag: 04.11.2012, 23:45
  2. [ERLEDIGT] Raspberry Pi Übertakten
    Von Kampi im Forum Raspberry Pi
    Antworten: 2
    Letzter Beitrag: 21.09.2012, 23:03
  3. [ERLEDIGT] Kommunikation AVR <-> Raspberry
    Von Goldenflash im Forum Raspberry Pi
    Antworten: 6
    Letzter Beitrag: 04.09.2012, 09:30
  4. Raspberry PI Lieferzeit
    Von Thalhammer im Forum Offtopic und Community Tratsch
    Antworten: 9
    Letzter Beitrag: 01.08.2012, 17:12
  5. Verkaufe Raspberry Pi zu verkaufen
    Von FD im Forum Kaufen, Verkaufen, Tauschen, Suchen
    Antworten: 8
    Letzter Beitrag: 03.07.2012, 08:57

Berechtigungen

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