problem i2c SDA High oder Low bei Terminierung

Gast #1613565
Lesenswert?

Hallo,

Habe eine Frage zur Terminierung des I2C.

AUF SDA und SCL habe ich ein 10K wiederstand gegen 5V+ geschalten.
Auf der SCL Seite messe ich einen High Pegel im Ruhezustand auf der SDA 
Seite einen Low Pegel. Ist das so IO muß nicht auch der SDA High sein 
vor der Init des TWI???
Desweiteren habe ich eine Endlosschleife in folgenden Bereich

bei dieser Stelle
while (!(TWCR & (1<<TWINT)));
 liegt das damit zusammen.
wenn ich mit den oszi messe ist an dieser stelle ein sehr schneller 
pegelwechsel zu sehen im dauerfeuer high + Low Linie.
Auf der SDA Seite tut sich nix.

AM code kanns eigendlich nicht liegen habe diesen schonmal mit einer 
Schalktung benutzt.


Danke





ublic Function: TWIM_Start

 Purpose: Start the TWI Master Interface

 Input Parameter:
   - uint8_t  Device address
   - uint8_t  Type of required Operation:
        TWIM_READ: Read data from the slave
        TWIM_WRITE: Write data to the slave

 Return Value: uint8_t
    - TRUE:    OK, TWI Master accessible
   - FALSE:  Error in starting TWI Master

*******************************************************/
uint8_t TWIM_Start (uint8_t Address, uint8_t TWIM_Type)
  {
  uint8_t    twst;
/*
** Send START condition
*/
  TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
/*
** Wait until transmission completed
*/
------##########################Hier beginnt die Endlosschleife

  while (!(TWCR & (1<<TWINT)));
/*
** Check value of TWI Status Register. Mask prescaler bits.
*/
  twst = TWSR & 0xF8;
  if ((twst != TWI_START) && (twst != TWI_REP_START)) return FALSE;
/*
** Send device address
*/
  TWDR = (Address<<1) + TWIM_Type;
  TWCR = (1<<TWINT)|(1<<TWEN);
/*
** Wait until transmission completed and ACK/NACK has been received
*/
---------########################### Hier auch wenn ich die erste 
auskommentiere


  while (!(TWCR & (1<<TWINT)));
/*
** Check value of TWI Status Register. Mask prescaler bits.
*/
  twst = TWSR & 0xF8;
  if ((twst != TWI_MTX_ADR_ACK) && (twst != TWI_MRX_ADR_ACK)) return 
FALSE;

  return TRUE;
  }

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren