-         

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 28

Thema: I2C zwischen Atmegas 88

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied Avatar von High Light
    Registriert seit
    21.08.2009
    Ort
    Baden Württemberg
    Beiträge
    142

    I2C zwischen Atmegas 88

    Anzeige

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

    die die mich schon kenne, wissen dass ich hauptsächlich mit dem Bau
    eines Hexapods beschäftigt bin. Dieser ist im Moment im mechanischen
    Teil fertig und nun folgt die Programmierung. (Hexapod unter dem
    Thema "Erster Hexapod").

    So mein Problem im Moment liegt bei I2C.
    Als erster Meilenstein soll der Master einen Status an 3 Slaves senden,
    welche darauf hin eine LED einschalten.
    Es handelt sich bei allen 4 Controllern um Atmega88. Für I2C nehme ich
    die hardwareseitig vorhanden Pins.

    Jetzt mal der Code für den Master. Wäre klasse wenn sich jemand den Code
    durchsehen könnte und mir sagen könnte, was ich anderes schreiben muss.


    Code:
    $regfile = "m88def.dat"
    $crystal = 16000000
    $baud = 9600
    
    $lib "I2c_twi.lbx"
    
    Config Twi = 400000
    
    
    Const Slave1 = &HC1                                         'I2C Adresse slave1
    Const Slave2 = &HC2                                         'I2C Adresse slave2
    Const Slave3 = &HC3                                         'I2C Adresse slave3
    
    
    Dim Status As Byte
    
       Wait 2                                                   'Warte 2 Sekunden
       I2cinit                                                  'Bus initialisieren
    
    Do
    
       Status = 1
    
       I2cstart
       I2cwbyte Slave1                                          'Slave1 ansprechen
       I2cwbyte Status                                          'Status
       I2cstop
    
       Waitms 1000
    
       I2cstart
       I2cwbyte Slave2                                          'Slave2 ansprechen
       I2cwbyte Status                                          'Status
       I2cstop
    
       Waitms 1000
    
       I2cstart
       I2cwbyte Slave3                                          'Slave3 ansprechen
       I2cwbyte Status                                          'Status
       I2cstop
    
       Waitms 1000
    
    
    Loop
    
    End



    MfG High Light

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Hallo,

    die Slaveadressen passen so nicht, weil das erst Bit für Read/Write benutzt wird.
    Eine Adresse in dem Bereich würde dann eine dieser sein:
    &HC0, &HC2 o. &HC4

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied Avatar von High Light
    Registriert seit
    21.08.2009
    Ort
    Baden Württemberg
    Beiträge
    142
    Ich steh auf dem Schlauch!!!

    Welches erste Bit steht für Read/Write?
    un dwarum gehen alle Adressen bis auf &HC1???
    Welche Adressen könnte ich den noch verwendenden?

    Des weiteren unterscheidet man Read- und Write- Adressen?

    Gruß High Light

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    29
    Beiträge
    4.544
    Wenn du dich über I2C informierst steht z.B. im Wissensbereich
    http://www.rn-wissen.de/index.php/I2C

    Die Adresse besteht aus 7bit + 1bit für R/W. Die ersten 7bit sind für die Adresse, das 8te Bit ist das R/W Bit.
    Wenn du jetzt z.B. den PCF8583 verwendest ist die Adresse für schreiben
    1010 00A0R/W => 1010 ist die Basisadresse, A0 ist die Adresse, die man Ändern kann (mittels Anschluss vom PCF8583) und das R/W Bit.
    Wenn man A0 auf GND legt lautet die Adresse für lesen: 1010 0000 = hexA0
    Für schreiben: 1010 0001 = hexA1

    Am Besten ist es, wenn du in einem DB nachsiehst. Dort ist immer ein Diagramm mit der Datenübertragung.

    Ich könnte dir einen Quellcode (in C) posten, den ich heute geschrieben habe um die I2C Adressen auszulesen.

    MfG Hannes

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied Avatar von High Light
    Registriert seit
    21.08.2009
    Ort
    Baden Württemberg
    Beiträge
    142
    Ok, danke jetzt wird das mal klarer.
    Das Programm hilft mir nicht weiter,
    da ich ja im Moment nur Atmegas88 verwende.
    Da kann ich ja dann die Adressen selber festlegen oder?
    Dass heißt ich gebe zum Beispiel dem Slave1 die Adresse:

    Const Slave1 = &HC1

    Mit der kann ich dann schreiben oder?
    Möchte ich aber lesen heißte es dann:

    Const Slave1 = &HC0

    Habe ich dass so richtig verstanden?

    Gruß High Light

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    29
    Beiträge
    4.544
    Nicht ganz. Im Link, den ich gepostet habe ( http://www.rn-wissen.de/index.php/I2C ) steht unter http://www.rn-wissen.de/index.php/I2..._7-Bit-Adresse
    Dieses letzte Bit wird als R/W Bit bezeichnet (0 steht für "schreiben", 1 für "lesen").
    Das würde bedeuten die Schreibadresse wäre 0xC0 (&HC0) und die Leseadresse 0xC1 (&HC1).

    MfG Hannes

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied Avatar von High Light
    Registriert seit
    21.08.2009
    Ort
    Baden Württemberg
    Beiträge
    142
    Oh ich glaube da habe ich etwas verdreht^^.
    So hatte ich es eich au gemeint.
    Danke für die Hilfe.
    Dann werde ich mich mal am Sonntag an den
    Code für den Slave machen.
    Wäre klasse, wenn ihr den dann auch mal durchsehen könntet.

    Gruß High Light

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied Avatar von High Light
    Registriert seit
    21.08.2009
    Ort
    Baden Württemberg
    Beiträge
    142
    Ok ich bin am ausprobieren und suchen und muss sagen,
    Ich checks gar net, wie ich den Code für den Slave schreiben
    muss.
    Weil ich versteh gerad gar nix, und finde tue ich au nix fürs Slaves.
    Kann mir jemand weiter helfen?

    Das hier ist das einzige was ich gefunden hab:
    http://www.roboternetz.de/phpBB2/zei...&highlight=i2c
    Kann ich dies überhaupt in meinem Fall verwenden???
    Wenn nein? Wie dann?

    Noch eine zweite Frage, muss ich beim Master auch angeben welche Pins verwendet werden sollen?

    Gruß High Light

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied Avatar von High Light
    Registriert seit
    21.08.2009
    Ort
    Baden Württemberg
    Beiträge
    142
    Kann mir den keiner weiterhelfen?

    Gruß High Light

  10. #10
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.05.2007
    Beiträge
    329
    Hier habe ich mal einen TWI Slave Transmitter gebaut

    http://www.gerold-online.de/cms/whee...rsensoren.html

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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