mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik problem i2c SDA High oder Low bei Terminierung


Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;
  }

Autor: Klaus Ra. (klara)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich meine, nach der Initialisierung müssen beide Pegel High sein.
Schau mal in ein Datenblatt eines I2C-Bausteins. Da findest Du immer 
eine Grafik der Pegel-Zustände.
Gruss Klaus.

Autor: andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Es war so alle pegel müssen am anfang auf high sein.
Der Fehler eine Kurzschluß gegen masse Draht Haar.
Nun gehts einwandfrei.

Danke

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.