-
        

Ergebnis 1 bis 7 von 7

Thema: I²C: PCF 8574

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    16.05.2008
    Ort
    Dielheim
    Alter
    23
    Beiträge
    36

    I²C: PCF 8574

    Anzeige

    Hallo,
    ich habe den PCF 8574 P (von reichelt).
    Mein Problem ist, dass er nicht reagiert.
    Ich benutze einen ATMEGA32, 16Mhz.

    Das ist mein code:

    Code:
    $regfile = "m32def.dat"
    $crystal = 16000000
    $baud = 9600
    
    Config Scl = Portc.0
    Config Sda = Portc.1
    Config I2cdelay = 10
    
    Const Adresswrite = &H4E                                    'Slaveadresse
    
    Config Porta = Output
    
    Dim X As Byte
    Dim Wert As Byte
    
    Declare Function Pcfwrite(byval Adress As Byte , Wert As Byte) As Byte
    
    I2cinit
    
    X = 1
    
    Wert = &B01010101
    Print "Atmega32 I2C Master"
    Waitms 1000
    Print "Motoren anschalten"
    Waitms 1000
    X = Pcfwrite(adresswrite , Wert)
    
    Do
      If X <> 0 Then
        Print "I2C Fehler"
      Else
        Print "Übertragung    erfolgreich"
      End If
    Waitms 500
    Loop
    
    
    End
    
    Function Pcfwrite(byval Adresswrite As Byte , Wert As Byte) As Byte
      I2cstart
      I2cwbyte Adresswrite
      I2cwbyte Wert
      I2cstop
      Pcfwrite = 0
    End Function
    Ich habe die Pins A0-A2 alle auf vcc, habe vorher 10K Pull-ups drangehabt, dann habe ich allerdings gehört da müssten keine dran.
    Ich komme dann auf die Adresse:
    01001110 oder auch 4E.

    Trotzdem funktioniert das ganze nicht.

    Vielleicht kann mir ja jemand helfen.

    Mfg
    Nils

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.03.2006
    Beiträge
    200
    Ich hab jetzt keine Ahnung von Bascom, aber Pullups sollten schon rein. Üblicherweise 10K. Ob die internen Innenwiderstände in der Betriebsart TWI funktionieren weiß ich nicht. Diese sind aber mindestens doppelt so hoch.

    Hast du ein Oszilloskop zur Verfügung?

  3. #3
    Erfahrener Benutzer Roboter Experte Avatar von Neutro
    Registriert seit
    28.10.2007
    Ort
    Ostfriesland
    Alter
    38
    Beiträge
    642
    Hallo,

    Versuche mal den folgenden Code, ist allerdings für einen Mega8
    der mit 4MHz läuft:

    $regfile = "m8def.dat"
    $crystal = 4000000

    Config Sda = Portc.4
    Config Scl = Portc.5
    Config I2cdelay = 10

    'Config Pind.6 = Output

    Const Pcf8574write = &H4E
    Const Pcf8574read = &H4F

    'Set Portd.6
    'Waitms 1000
    'Reset Portd.6
    'Waitms 1000

    Do

    I2cstart
    I2cwbyte Pcf8574write
    I2cwbyte &B00000001
    I2cstop
    Waitms 250

    I2cstart
    I2cwbyte Pcf8574write
    I2cwbyte &B00000010
    I2cstop
    Waitms 250
    loop

    end

    Ich hoffe das dir das etwa weiterhilft....

    Gruß

    Neutro
    Jemand mit einer neuen Idee ist ein Spinner, bis er Erfolg hat.
    (Mark Twain)

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    16.05.2008
    Ort
    Dielheim
    Alter
    23
    Beiträge
    36
    @pacer_one: Also an Sda und Scl habe ich 4,7K Pull-Ups dran.
    Nur an den Datenleitungen A0-A2 eine mehr, hat mir jemand gesagt die sollten weg.

    @Neutro: Mhm, der code ist nicht wirklich anders als meiner oder?

    Trotzdem danke.

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    16.05.2008
    Ort
    Dielheim
    Alter
    23
    Beiträge
    36
    Hallo noch mal,
    ich hab den Fehler gefunden, es war eine Lötbrücke auf der Platine die ich übersehen habe. Das mit den Pull-Up Widerständen vor den Adresspins würde mich schon mal interressieren.

    Mfg Nils

    Ach ja Oszi, davon kann ich mom. nur träumen... (Bin noch Schüler)

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.03.2006
    Beiträge
    200
    meistens haben die Bausteine einen Open-Kollector Ausgang.
    Damit die Leitung im Ruhezustand auf high gehen kann, benötigt man Pullups.
    Der Widerstand darf allerdings nicht zu klein sein, sonst fließt ein zu hoher Strom durch die OC-Transistoren. Was allerdings passiert wenn man den Widerstand zu 'hoch' wählt, weiß ich auch nicht.

    Eine Drahtbrücke war übrigens auch bei mir der Fehler, leider will mein Temperatursensor aber immer nocht nicht

    Sorry, da hab ich mich wohl verlesen. Bei den Adresspins wird meines Wissens nach kein Pullup benötigt. Manche vergessen ihn aber auf Takt- und Datenleitung.

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    17.02.2005
    Ort
    NRW-Bergisches Land
    Beiträge
    311
    Die Adresspins kannst du direkt an +5V oder GND legen.
    An SDA und SCL brauchst du die Pullups.
    Zum ansprechen des PCF8574 reich aber auch schon der I2CSEND bzw. der I2CRECEIVE Befehl.
    Schau mal in die Help nach.
    Gruß RePi!


    *** Holzhacken ist deshalb so beliebt, weil man bei dieser Tätigkeit den Erfolg sofort sieht. ***
    *** (Albert Einstein) ***

Berechtigungen

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