www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Nachweis beteiligter TWI- Adressaten


Autor: Stephan R. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin!

In meiner Atmega8535-Schaltung sind mehrere TWI-Bausteine verbaut. Ich 
habe Fleury´s TWI-libs verwendet.
Nun möchte ich einfachstmöglich abfragen und -erstmal- am Terminal 
anzeigen, ob alle Bausteine ansprechbar sind.
Dazu habe ich folgende, hochkomplexe Schleife gebaut:

  for ( pruefwert = 0; pruefwert < 255; pruefwert ++ )
  {
    rueckmeldung= i2c_start(pruefwert);
    if (rueckmeldung == 0)
    {
       place ( 10 , 10 , pruefwert, "Rueckmeldung bei", " ");
    }
  }

Meine Prozedur "place" gibt auf meinem Terminal an bestimmter Stelle die 
ansprechbare Adresse aus.

Meine Vorstellung: der Rückgabewert von Fleury´s Funktion "i2c_start" 
liefert 0, wenn bei angegebener Adresse ein Baustein ansprechbar war.

Frage: Trifft das auf alle I2C- Bausteine zu?

(Problem: HMC6343 antwortet nicht)

Autor: Stephan R. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und wieder oben....

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>for ( pruefwert = 0; pruefwert < 255; pruefwert ++ )

I2C-Adressen haben nur 7 Bit.

MfG Spess

Autor: Stephan R. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schadet das was? Immerhin sind mögliche Adressen doch abgedeckt?

Autor: Bürovorsteher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Stein hat eine 10-bit-Adresse.

Autor: Stephan R. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Spess und Bürovorsteher sind sich uneins...

Autor: Stephan R. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
HMCs Datenblatt ist auf Spess´s Seite!

Autor: Bürovorsteher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bitte mal die aktuelle I2C-Spec von NXP und das Datenblatt von Honeywell 
lesen.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Der Stein hat eine 10-bit-Adresse.

Im Datenblatt steht:

The default (factory) HMC6343 7-bit slave address is 0x32 for write 
operations, or 0x33 for read operations.

MfG Spess

Autor: Stephan R. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tu ich!
Seite8:
The I2C slave address byte consists of the 7 most significant bits with 
the least significant bit zero filled.

Wo steht Deine Info mit 10Bit?

Autor: Bürovorsteher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, diesen Satz habe ich komplett missverstandenamit sind es sieben 
Bit
plus Schreib/Lese-Richtung. Hmm...

Autor: Stephan R. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Um mal zur Frage zurückzukommen: liefert Fleury´s Funktion denn nun 
immer eine 0 bei angesprochenem Adressaten?

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Um mal zur Frage zurückzukommen: liefert Fleury´s Funktion denn nun
>immer eine 0 bei angesprochenem Adressaten?

Ich kenne die Lib nicht. Aber der Name "i2c_start" hört sich mehr nach 
Generierung einer Start-Condition an. Um einen Teilnehmer zu adressieren 
wären 2 Parameter, Adresse und R/W, notwendig.

MfG Spess

Autor: Stephan R. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gerne liefere ich sie nach:
Was mich wundert/ärgert: ein angeschlossener DS1631 (Temperaturfühler) 
liefert "bei 158 eine 0" als Rückgabewert (ist ansprechbar und läuft). 
Mein geliebter HMC liefert eine 1.



unsigned char i2c_start(unsigned char address)
{
    uint8_t   twst;

  // send START condition
  TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);

  // wait until transmission completed
  while(!(TWCR & (1<<TWINT)));

  // check value of TWI Status Register. Mask prescaler bits.
  twst = TW_STATUS & 0xF8;
  if ( (twst != TW_START) && (twst != TW_REP_START)) return 1;

  // send device address
  TWDR = address;
  TWCR = (1<<TWINT) | (1<<TWEN);

  // wail until transmission completed and ACK/NACK has been received
  while(!(TWCR & (1<<TWINT)));

  // check value of TWI Status Register. Mask prescaler bits.
  twst = TW_STATUS & 0xF8;
  if ( (twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK) ) return 1;

  return 0;

}

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.