-         

+ Antworten
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: Adressvergabe beim PCF8574

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    03.10.2007
    Alter
    43
    Beiträge
    128

    Adressvergabe beim PCF8574

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hallo,

    ich möchte PCF8574 als Porterweiterung an einem Mege32 betreiben.
    Ist mein erstes Projekt dieer Art.
    Nun habe ich Probleme mit der Adressierung.
    Die drei Pins des PCF8574 habe ich in den möglichen Varianten mit GND und +5V belegt.
    Wo ich bisher nicht durchgestiegen bin ist die Adressierung in Bacom.
    Im Datenblatt wird die Hexadresse mit H20 bis H27 angegeben. Die funktionieren aber nicht.

    Hat hier jemand einen Rat?

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.556
    Zitat Zitat von Duesentrieb Beitrag anzeigen
    Hallo,

    ich möchte PCF8574 als Porterweiterung an einem Mege32 betreiben.
    Ist mein erstes Projekt dieer Art.
    Nun habe ich Probleme mit der Adressierung.
    Die drei Pins des PCF8574 habe ich in den möglichen Varianten mit GND und +5V belegt.
    Wo ich bisher nicht durchgestiegen bin ist die Adressierung in Bacom.
    Im Datenblatt wird die Hexadresse mit H20 bis H27 angegeben. Die funktionieren aber nicht.

    Hat hier jemand einen Rat?
    Du musst das unterste Bit (schreiben/lesen) beachten, die Adresse ist 7 Bit lang, ein Bit wird für lesen/schreiben
    gebraucht. Im Datenblatt sollte das zu lesen sein.

    Gruß Richard

  3. #3
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.835
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    03.10.2007
    Alter
    43
    Beiträge
    128
    Hallo Richard,

    so richtig weitergeholfen hat mir dein Hinweis leider nicht.
    Ich ahbe aus dem RN-Wissen folgendes Beispiel:

    Code:
    $regfile = "M32def.dat"                           ' the used chip 
    $crystal = 16000000                               ' frequency used 
    $baud = 9600
    
    Config Scl = Portb.0                              ' Ports fuer IIC-Bus, nicht Standard ! 
    Config Sda = Portb.1
    ' Config I2cdelay = 10                  ' je höher der Wert umso langsamer der Bus 
    
    I2cinit
    
    Const Pcf_write = &H40                            ' Slaveadresse 
    Const Pcf_read = &H41
    
    ' Startausgabe 
    Print
    Print "I2C-Soft Demo mit PCF 8574"
    Print
    
    Do
        I2cstart
        I2cwbyte Pcf_write
        I2cwbyte &HAA
        I2cstop
    
        Print Err                                     ' Err = 0 -> kein Fehler ! 
    
        Waitms 500
    
        I2cstart
        I2cwbyte Pcf_write
        I2cwbyte &H55
        I2cstop
    
        Print Err                                     ' Err = 0 -> kein Fehler ! 
    
        Waitms 500
    
    Loop
    
    End
    Hier wird die Slaveadresse mit H40 angegeben.
    Wie müsste ich in diesem Beispielfall die drei Adresspins belegen?

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    03.10.2007
    Alter
    43
    Beiträge
    128
    Hallo PicNick,

    da waren wir wohl gleichzeitig mit dem Verfassen einer Antwort beschäftigt

    Mit deinem Hinweis habe ich jetzt verstanden dass alle PCF8574 über H40 zum Schreiben erreichbar sind.

    Aber nun auch noch einmal die Frage an dich.
    Ich habe meinen PCF 8574 mit L-H-L (A0-A1-A2) konfiguriert.
    Nun möchte ich alle Ports als auf Higth schalten.
    Dafür hätte ich gerne ein Beispiel un es zu verstehen. Kannst du mir das bitte mal zeigen?

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.556
    Zitat Zitat von Duesentrieb Beitrag anzeigen
    Hallo Richard,

    so richtig weitergeholfen hat mir dein Hinweis leider nicht.
    Ich ahbe aus dem RN-Wissen folgendes Beispiel:

    Code:
    $regfile = "M32def.dat"                           ' the used chip 
    $crystal = 16000000                               ' frequency used 
    $baud = 9600
    
    Config Scl = Portb.0                              ' Ports fuer IIC-Bus, nicht Standard ! 
    Config Sda = Portb.1
    ' Config I2cdelay = 10                  ' je höher der Wert umso langsamer der Bus 
    
    I2cinit
    
    Const Pcf_write = &H40                            ' Slaveadresse 
    Const Pcf_read = &H41
    
    ' Startausgabe 
    Print
    Print "I2C-Soft Demo mit PCF 8574"
    Print
    
    Do
        I2cstart
        I2cwbyte Pcf_write
        I2cwbyte &HAA
        I2cstop
    
        Print Err                                     ' Err = 0 -> kein Fehler ! 
    
        Waitms 500
    
        I2cstart
        I2cwbyte Pcf_write
        I2cwbyte &H55
        I2cstop
    
        Print Err                                     ' Err = 0 -> kein Fehler ! 
    
        Waitms 500
    
    Loop
    
    End
    Hier wird die Slaveadresse mit H40 angegeben.
    Wie müsste ich in diesem Beispielfall die drei Adresspins belegen?
    Dazu muss man den (genauen) Typ pcf8574(x) wissen, es gibt 2 Typen mit jeweils andern Hartware codierten
    Adressbereich. mit den 3 frei zu verdratenden kann man den dann noch unterteilen. Der pcf 8574 hat als Basisadresse
    $40 der pcf 8574A hat als Basisadresse $70.

    Gruß Richard

  7. #7
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.835
    Die Sache mit den I2C Adressen ist im ersten moment tatsächlich verwirrend.
    Aber eigentlich einfach:
    8 Bit (0-7) stehen insges zur Verfügung
    das bit 0 bedeutet Lesen=0 schreiben=1
    bits 1-7 stellen die eigentliche addresse dar.
    In der Praxis und bei Bascom werden die Bits aber zu einer gesamtzahl zusammengefasst und aber leider auch als Adresse bezeichnet.

    Konkret:
    Offizielle Adress-range (s.o) H20-H27
    das muss man um ein bit nach links schieben (= mal zwei) und dann 1 dazuzählen (f. lesen) oder so lassen (zum schreiben)
    also
    H40, H42, H44, H46, H48, H4A, H4C oder H4E als Leseadresse
    und
    H41, H43, H45, H47, H49, H4B, H4D oder H4F als Schreibadresse

    deine Pins A0, A1, A2 sind bei dieser adress-schreibung x2 zu nehmen und auf die Basisadresse H40 (=H20 x 2) zu addieren
    Bei allen drei High gibt das
    7 x 2 = H0E
    plus basis H40

    H4E das nimmst du im Bascom um vom Expander zu lesen, und
    H4F um dorthin zu schreiben

    vielleicht etwas weitschweifig

    hilft das ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    03.10.2007
    Alter
    43
    Beiträge
    128
    Super! Das hilft mir auf jeden Fall weiter.
    Herzlichen Dank!

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    03.10.2007
    Alter
    43
    Beiträge
    128
    Hallo,

    nun muss ich doch noch einmal fragen.

    Ich habe als Basisadresse die H22 an den drei Pins festgelegt. (L-H-L)
    Dazu muss ich nun die H40 zählen um in den Slave zu schreiben (einen Ausgang zu schalten)
    So wie ich es verstanden habe lautet nun meine Zieladresse H62.

    Wenn ich dies nun im Beipielprogramm eingebe sieht das so aus:

    Code:
    Config Scl = Portb.0                                        ' Ports fuer IIC-Bus, nicht Standard !
    Config Sda = Portb.1
     Config I2cdelay = 10                                       ' je höher der Wert umso langsamer der Bus
    
    I2cinit
    
    Const Pcf_write = &H62                                      ' Slaveadresse
    'Const Pcf_read = &H41
    
    ' Startausgabe
    Print
    Print "I2C-Soft Demo mit PCF 8574"
    Print
    
    Do
        I2cstart
        I2cwbyte Pcf_write
        I2cwbyte &HAA
        I2cstop
          Print Err                                             ' Err = 0 -> kein Fehler !
          Waitms 500
    
        I2cstart
        I2cwbyte Pcf_write
        I2cwbyte &H55
        I2cstop
    
        Print Err                                               ' Err = 0 -> kein Fehler !
    
        Waitms 500
    
    Loop
    Was habe ich jetzt falsch verstanden? Es geht nähmich nichts

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.556
    Du kannst mit 3 Bit nicht h 22 einstellen! 111x = 4+2+1 = 7 x zählt nicht lesen/schreibe

    Fest verdratet 1000 Deine Verdratung 010 lesen/schrieben 1/0 ergibt...

    1000010 = H42 + 1 für Schreiben = H43
    1000010 = H42 + 0 für Lesen H42

    versuche einmal...

    Const Pcf_write = &H43 ' Slaveadresse
    Const Pcf_read = &H42


    Gruß Richard

+ Antworten
Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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