-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: I2C verstehen... ein Beispiel?

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    12.02.2005
    Beiträge
    38

    I2C verstehen... ein Beispiel?

    Anzeige

    Salute,

    bin momentan dabei, eine ganz simple I2C-Testplatine aufzubauen: PCF8574P mit 8 LEDS und Vor-Rs (leuchten beim Einschalten), verbunden zu einer simplen pseudo-OpenCollector-Schaltung, bei der zwei Oeffner die Funktion der Transistoren uebernehmen und zwei Leds an entsprechenden Schlieszern den Status zeigen. Pullups vorhanden, laeuft einwandfrei, liegen jeweils 0 oder 5 V an SDA bzw SCL, wen ich einen Taster betaetige. Soweit ganz simpel, wenn die 5V schaltbar sind, duerften die richtigen Voraussetzungen ja wohl gegeben sein.

    Nun habe ich aber noch keine Verbindung zum Slave herstellen koennen, wohl kommunikationstechnisch irgendein Fehler. Dummerweise finde ich immer nur das gleiche Schema aus den Phillips-Datenblaettern im Netz, nie ein Beispiel einer funktioierenden Uebertragung. Haette evtl. jemand so etwas da? Bin besonders unsicher bei den ACKs, wie muss da SDA (von mi kommend) aussehen?

    Falls es interessiert: Schlussendlich will ich per uC so diverse Platinen steuern, auf denen das Signal ausgelesen wird und in Servobewegungen umgesetzt - ja, es liegt ein weiter Weg vor mir

    Grusz und Danke,
    David

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    30.05.2004
    Beiträge
    181
    für ack muss sda low sein. für nack muss sda high sein.

    Data is transferred between a Master and a Slave synchronously to SCL on the SDA line
    on a byte-by-byte basis. Each data byte is 8 bits long. There is one SCL clock pulse for
    each data bit with the MSB being transmitted first. An acknowledge bit follows each
    transferred byte. Each bit is sampled during the high period of SCL; therefore, the SDA
    line may be changed only during the low period of SCL and must be held stable during
    the high period of SCL. A transition on the SDA line while SCL is high is interpreted as a
    command (see START and STOP signals).

    frage damit beantwortet?!?!

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    12.02.2005
    Beiträge
    38
    Das ist mir ja klar, findet man auch ueberall im Netz... Trotzdem funktioniert es nicht, und deshalb wuerde ich gerne mal ein Beispiel sehen :/

    Und die Frage zu SDA bezog sich darauf, wie der Master die Leitung zu handhaben hat bei ACK, dass der Slave auf 0 zieht ist mir klar.

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    30.05.2004
    Beiträge
    181
    If the
    slave signals a No Acknowledge, the master can generate a STOP signal to abort the data
    transfer or generate a Repeated START signal and start a new transfer cycle.
    If the master, as the receiving device, does not acknowledge the slave, the slave releases
    the SDA line for the master to generate a STOP or Repeated START signal.

    dann dieses?

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.06.2004
    Ort
    Bad Schussenried in Oberschwaben
    Alter
    28
    Beiträge
    1.461
    HI

    Im Roboternetz Wiki gibts auch Informationen, sogar mit Oszillogramm.

    Grüße,
    Tobi
    http://www.tobias-schlegel.de
    "An AVR can solve (almost) every problem" - ts

  6. #6

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    30.01.2004
    Ort
    Hartenholm
    Alter
    68
    Beiträge
    81
    Hallo David,

    evtl. hilft Dir ja das folgende kleine Progr.
    Mega8 + PCF8574 + 8 LED's an dessen Port's.

    Code:
    $regfile = "m8def.dat"                       'ATmega8-Deklarationen
    $crystal = 3686400                           'Quarz: 3,6864 MHz
    $baud = 9600                                 'Baudrate zum PC: 9600 Baud
    '
    Config Sda = Portc.4                         'ist für I2C erforderlich
    Config Scl = Portc.5                         'dito
    
    '...............................................................................
    
    Const Pcfled = &H40                          'Adresses PCF8574 0.0.0
    
    
    'BITMUSTER LED
    Const Led_0 = &B00000001                     'PCF Port 0 ein
    Const Led_1 = &B00000010                     'PCF Port 1 ein
    Const Led_2 = &B00000100                     'PCF Port 2
    Const Led_3 = &B00001000                     'PCF Port 3
    Const Led_4 = &B00010000                     'PCF Port 4
    Const Led_5 = &B00100000                     'PCF Port 5
    Const Led_6 = &B01000000                     'PCF Port 6
    Const Led_7 = &B10000000                     'PCF Port 7
    Const Led_blank = &B00000000                 'alle LED aus
    
    
    ' --- Programmoperationen ------------------------------------------------------
    
    I2cinit                                      'I2C Bus initialisieren
    
    Do
       I2cstart                                  'Bus starten
       I2cwbyte Pcfled                           'Addresse PCF senden
    
       I2cwbyte Led_0                            'LED-Bitmuster senden
       Wait 2
    
       I2cwbyte Led_1                            'LED-Bitmuster senden
       Wait 2
    
       I2cwbyte Led_2                            'LED-Bitmuster senden
       Wait 2
    
        I2cwbyte Led_3                           'LED-Bitmuster senden
       Wait 2
    
       I2cwbyte Led_4                            'LED-Bitmuster senden
       Wait 2
    
       I2cwbyte Led_5                            'LED-Bitmuster senden
       Wait 2
    
       I2cwbyte Led_6                            'LED-Bitmuster senden
       Wait 2
    
       I2cwbyte Led_7                            'LED-Bitmuster senden
       Wait 2
    
       I2cwbyte Led_blank                        'LED-Bitmuster senden
       Wait 2
    
       I2cstop                                   'Bus wieder freigeben
    Loop
    
    End                                          'end program
    mfg Gerhard

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    12.02.2005
    Beiträge
    38
    Vielen Dank erstmal, genau das hab ich gesucht. Und rausgefunden, dass ich alles richtig gemacht habe... funktionieren will es trotzdem nicht. grade nachgemessen - kommt kein ACK, auch nicht bei der Addresse Der Slave muesste Data runterziehen, wenn ich D und C loslasse, oder? Das passiert jedenfalls nicht... Darum ein paar Fragen zu Addressierung: 0100 bei PCFs + bei direkt mit Vss verbundenen A0-A2 000 als Addresse, oder?
    Sonst weisz ich echt nimmer weite, evtl mal nen Plan zeichnen Muesste halt bis Morgen spaetestens laufen, das ganze Projekt muss in 2 Wochen stehen *ARGH*

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    30.01.2004
    Ort
    Hartenholm
    Alter
    68
    Beiträge
    81
    ... die 3 Adressbits auf GND legen !!

    Gerhard

  10. #10

    I2C am ATmega16 verwenden

    Ein fröhliches Hallo an die Fachmänner.
    Ich bin in Sachen I2C noch ein großer Neuling...
    Kann mir einer von euch vielleicht verraten wo ich ne I2C-Library (i2c.lib) her bekomme? Ich arbeite mit dem ATmega16 und da wird die Library verlangt.
    Vielleicht könnt Ihr mir ja helfen.
    Vielen Dank.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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