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)
Hi
>for ( pruefwert = 0; pruefwert < 255; pruefwert ++ )
I2C-Adressen haben nur 7 Bit.
MfG Spess
Schadet das was? Immerhin sind mögliche Adressen doch abgedeckt?
Bitte mal die aktuelle I2C-Spec von NXP und das Datenblatt von Honeywell lesen.
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
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?
Sorry, diesen Satz habe ich komplett missverstandenamit sind es sieben Bit plus Schreib/Lese-Richtung. Hmm...
Um mal zur Frage zurückzukommen: liefert Fleury´s Funktion denn nun immer eine 0 bei angesprochenem Adressaten?
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.