Forum: Mikrocontroller und Digitale Elektronik Nachweis beteiligter TWI- Adressaten


von Stephan R. (Gast)


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)

von Stephan R. (Gast)


Lesenswert?

Und wieder oben....

von spess53 (Gast)


Lesenswert?

Hi

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

I2C-Adressen haben nur 7 Bit.

MfG Spess

von Stephan R. (Gast)


Lesenswert?

Schadet das was? Immerhin sind mögliche Adressen doch abgedeckt?

von Bürovorsteher (Gast)


Lesenswert?

Der Stein hat eine 10-bit-Adresse.

von Stephan R. (Gast)


Lesenswert?

Spess und Bürovorsteher sind sich uneins...

von Stephan R. (Gast)


Lesenswert?

HMCs Datenblatt ist auf Spess´s Seite!

von Bürovorsteher (Gast)


Lesenswert?

Bitte mal die aktuelle I2C-Spec von NXP und das Datenblatt von Honeywell 
lesen.

von spess53 (Gast)


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

von Stephan R. (Gast)


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?

von Bürovorsteher (Gast)


Lesenswert?

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

von Stephan R. (Gast)


Lesenswert?

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

von spess53 (Gast)


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

von Stephan R. (Gast)


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;

}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.