-
        

Ergebnis 1 bis 8 von 8

Thema: [gelöst]I2C mit PCF8574 funktioniert nicht

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    28.03.2010
    Ort
    nahe München
    Beiträge
    45

    [gelöst]I2C mit PCF8574 funktioniert nicht

    Anzeige

    Hallo Leute,

    ich versuche nun seit zwei Tagen, eine Porterweiterung(PCF8574) über I2C anzusteuern, aber es will einfach nicht klappen.
    Da ich es über die Liniensensorenpin's laufen lasse, muss ich I2C emulieren. Ich verwende den Code aus der AsuroLib i2c.h und i2c.c

    Hardware:Pin 3 ist SDA und Pin 2 ist SCL. Jeweils mit 4,7k Pull-Up. Verbunden mit dem PCF. Ich habe alles nachgemessen: Verbindung zum Asuro steht, Strom da. Habe auch zwei LED's an SDA und SCL angeschlossen: blinken, funkt.

    Software: Ich habe die Lib an folgender Stelle geändert:
    Code:
    //Meine Pins
    #define SDA     3
    #define SCL     2
    
    #define NOP     asm volatile("nop")         /*<! No Operation */
    #define QDEL    Msleep(50)     /*<! 1/4 Delay */
    #define HDEL    QDEL; QDEL                  /*<! 1/2 Delay */
    Bei QDEL habe ich Msleep(50) geschrieben, damit der Bus nicht so schnell ist.
    Der Rest ist gleich geblieben.

    Mein Programm (Ausschnitt)
    Code:
     InitI2C();
    	unsigned char val = 0;
    	while(1)
    	{
    		StatusLED(GREEN);
    		StartI2C(0);
    		WriteI2C(val);
    		StopI2C();
    		StatusLED(RED);
    		Msleep(1000);
    	}
    Als Adresse habe ich 0x00, damit er auf jedem Fall anspricht.
    Da val = 0, sollte der PCF mit allen Pins auf LOW gehen, passiert aber nicht.

    Vielen Dank schon mal im voraus

    Gruß
    ASUR0

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.556
    Zum schreiben muss die Adresse 1 ,3,5,7....
    sein zum Lesen 0,2,4,6,8....

    I²C hat 7 Adressbits 0..128 das 8. Bit legt die schreib/Leserichtung fest. ungerade Adressen "schreiben", gerade Adressen "lesen".

    Gruß Richard

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    05.11.2009
    Ort
    Gerblingerode
    Alter
    51
    Beiträge
    207
    >> Als Adresse habe ich 0x00, damit er auf jedem Fall anspricht.

    mögliche Adressen des PCF8574 (A) je nach Beschaltung der A0-A2 ...

    Code:
    BIT --------7--6--5--4---3--2--1--0
    PCF8574   = 0  1  0  0   A2 A1 A0 RW     
    40 / 42 / 44 / 46 / 48 / 4A / 4C / 4E  (WRITE)
    41 / 43 / 45 / 47 / 49 / 4B / 4D / 4F  (READ)
    
    BIT --------7--6--5--4---3--2--1--0
    PCF8574A  = 0  1  1  1   A2 A1 A0 RW
    70 / 72 / 74 / 76 / 78 / 7A / 7C / 7E  (WRITE)
    71 / 73 / 75 / 77 / 79 / 7B / 7D / 7F  (READ)
    Gruss Ralf

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    28.03.2010
    Ort
    nahe München
    Beiträge
    45
    Zum schreiben muss die Adresse 1 ,3,5,7....
    sein zum Lesen 0,2,4,6,8....
    Soweit ich weiß ist das genau anders herum: Read = 1, Write = 0

    mögliche Adressen des PCF8574 (A) je nach Beschaltung der A0-A2 ...
    Ich habe den PCF8574AP, alle Adresspins auf GND, d.h. meine Adresse zum schreiben lautet 0b01110000.

    Die habe ich jetzt ausprobiert und, was für ein Wunder, es klappt!

    Nun ist die Frage: Warum funktioniert der general call nicht? Darauf müsste der PCF doch auch ansprechen, oder?

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    05.11.2009
    Ort
    Gerblingerode
    Alter
    51
    Beiträge
    207
    Hallo ASUR0,

    PCF8574A A0=0 / A1=0 / A2=0 == Basisadresse (70h)

    das R/W Bit ist wie folgt zu setzen:

    0 = Write = 70h
    1 = Read = 71h

    siehe auch hier:
    http://www.best-microcontroller-proj...-tutorial.html

    Gruss Ralf

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    05.11.2009
    Ort
    Gerblingerode
    Alter
    51
    Beiträge
    207
    @ASUR0

    gelöst ? ... woran hat es denn gelegen ?

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.556
    Zitat Zitat von ASUR0
    Zum schreiben muss die Adresse 1 ,3,5,7....
    sein zum Lesen 0,2,4,6,8....
    Soweit ich weiß ist das genau anders herum: Read = 1, Write = 0
    Schääääähm, Du hast Recht. Dumm wenn man nicht einmal Abschreiben kann.

    Gruß Richard

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    28.03.2010
    Ort
    nahe München
    Beiträge
    45
    @Feuering
    general call funktioniert nicht, man muss die "echte" Adresse verwenden.

Berechtigungen

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