Forum: Mikrocontroller und Digitale Elektronik I2C Kabelverbindung unterbrechen und resume


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von D a v i d K. (oekel) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe ein zusätzliches Display (TWI Basiert) an meinem Board.
Nun möchte ich dieses im Betrieb abziehen und wieder anstecken können 
ohne den Atmega 16 in einen deadlock zu befördern.

Ist meine folgende Abänderung der Lib eine vernünftige Lösung, oder 
sollte man das anders lösen?
1
void I2C_WriteByte(uint8_t busAddr, uint8_t data) {
2
  uint8_t error = i2c_start(busAddr); // send bus address
3
  if (error) {//Own snipped
4
    scanForDevicesOnBus();
5
    return;
6
  }
7
  i2c_write(data); // then send the data byte
8
  i2c_stop();
9
}
10
void I2C_WriteRegister(uint8_t busAddr, uint8_t deviceRegister, uint8_t data) {
11
  uint8_t error = i2c_start(busAddr); // send bus address
12
  if (error) {//Own snipped
13
    scanForDevicesOnBus();
14
    return;
15
  }
16
  i2c_write(deviceRegister); // first byte = device register address
17
  i2c_write(data); // second byte = data for device register
18
  i2c_stop();
19
}
20
uint8_t I2C_ReadRegister(uint8_t busAddr, uint8_t deviceRegister) {
21
  uint8_t data = 0;
22
  uint8_t error = i2c_start(busAddr); // send device address
23
  if (error) {//Own snipped
24
    scanForDevicesOnBus();
25
    return data;
26
  }
27
  i2c_write(deviceRegister); // set register pointer
28
  i2c_start(busAddr + I2C_READ); // restart as a read operation
29
  data = i2c_readNak(); // read the register data
30
  i2c_stop(); // stop
31
  return data;
32
}

Grüße Oekel

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
D a v i d K. schrieb:
> sollte man das anders lösen?
Ich würde erst mal (z.B. mit einem zusätzlichen Pin) versuchen zu 
erkennen, ob das Display angesteckt ist.

Und immer dran denken: generell ist der I2C kein HotPlug Bus. Wenn an 
diesem Bus noch andere Teilnehmer hängen, dann werden bei Einstecken 
evtl. deren Daten oder Adressen korrumpiert...

: Bearbeitet durch Moderator

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]
  • [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.