TC74 I2C Kommunikationsprobleme

Gast #2428236
Lesenswert?
• ▲
▼
Liebe Forenbenutzer,
ich arbeite gerade mit einem TC74 I2C Temperatursensor und einem 
Atmega88P. Ich kann die Temperatur aus dem Register 0x00 am Sensor 
auslesen, habe aber ein eigenartiges Problem:
Wenn ich den Sensor innerhalb des Betriebstemperaturbereichs aufheize 
bricht ab einer bestimmten Temperatur die Verbindung bei einem Start 
Write ab. Dabei wurde vom Atmega nur die Adresse und das WR Bit 
übermittelt, der Sensor schickt darauf kein ACK mehr.
Wenn ich nun eine kleine Kapazität (1nF) parallel zu GND und SDA hänge 
(also das Signal etwas verschmiere) erhöht sich die Temperatur, ab der 
der Sensor nicht mehr reagiert.
Laut Oszilloskop sind keine größeren (>20mV) Störungen auf SDA oder SCK, 
verschiedene Pullups (1-10k) ändern nichts, die Leitungen sind ca. 20cm 
lang. Eine Änderung der I2C Frequenz (20kHz-100kHz) ändert auch nichts. 
Andere Sensor-ICs aus der gleichen Serie verhalten sich genau gleich.
Hat jemand ähnliche Probleme mit diesem Sensor? Kennt wer noch andere 
leicht erhältliche Sensoren in TO-220 oder ähnlichem Gehäuse, vielleicht 
noch mit mehr Auflösung und mind. 125°C maximaler Betriebstemperatur?

Mit diesem Code und den TWI Routinen von Manfred Langemann aus diesem 
Forum lese ich den Sensor aus, der Fehler kommt vom TWIM_Start 
(TC74Address, TWIM_WRITE).
1
int8_t TC74_read()
2
{
3
    uint8_t errcode=0;
4
    int8_t value=0;
5
    errcode=TWIM_Init (i2cspeed);
6
      if (!errcode)
7
            {
8
                i2cErrorMsg(errcode,"TWI_Init");
9
            }
10
        errcode=TWIM_Start (TC74Address, TWIM_WRITE);
11
        if (!errcode)
12
      {
13
                i2cErrorMsg(errcode,"TWI_StartWR");
14
                TWIM_Stop ();
15
        }
16
    else
17
      {
18
            errcode=TWIM_Write(0);
19
            if (!errcode && 0)
20
                {
21
                    i2cErrorMsg(errcode,"TWI_Write");
22
                    TWIM_Stop ();
23
                }
24
                else
25
                {
26
                    errcode=TWIM_Start (TC74Address, TWIM_READ);
27
                    if (!errcode) {
28
                        i2cErrorMsg(errcode,"TWI_Read");
29
                    }else{
30
                        value = TWIM_ReadNack();
31
                    }
32
                    TWIM_Stop();
33
                }
34
      }
35
    return value;
36
}

Danke, Lukas
Gast #2489104
Lesenswert?
• ▲
▼
Hi!

Gleiches Problem und ich kam die letzten Tage auch auf auch auf keinen 
grünen Zweig. Der Support von Microchip war völlig nutzlos. Außer der 
äußerst hilfreichen Aussage, dass es den IC schon seit 20 Jahren gibt 
(und somit wohl ich zu bl*d bin) kam hier nichts.
Der entscheidende Hinweis kam vom Field Application Engineer des 
Distris, wo wir die Teile beziehen:
Problem ist bei mir die Zeit zwischen fallender SCL und der 
Pegelumschaltung auf SDA.
Da der I2C bei steigender SCL-Flanke die Daten von SDA übernimmt, 
erscheint diese Stelle nebensächlich.
Der TC74 will lt. Datenblatt ein "Data in Hold Time" tH-DAT von min. 
1250ns. Das Datenblatt ist an dieser Stelle wirklich nicht allzu 
verständlich, zumal im Diagramm dann von tH-DATA die Rede ist. Außerdem 
ist nicht klar, ob das eine Eigenschaft oder eine Forderung sein soll.

Wie auch immer, bei mir war tH-DAT bei 25°C nur 255ns, bei 62°C nur noch 
242ns und kurz danach kommt auch kein ACK mehr.
In Deinem Fall machst Du mit dem 1nF an SDA die Flanken flacher, 
verzögerst den H-Pegel und somit läuft es etwas länger bei höheren 
Temperaturen.

Saubere Lösung: Nach dem SCL H-->L die 1,25µs warten bis der nächste 
Pegel auf SDA ausgegeben wird. Ob das in der Atmel HW-TWI so einfach 
geht, weiß ich nicht. Mit einer Soft-SPI sollte das kein Problem sein. 
Ich komme bei meinem Controller da leider auch nicht so einfach ran und 
muss wohl mit einem leichten RC-Tiefpass in SDA rumtricksen auch wenn 
ich die Spec Werte damit nicht erreiche.

HTH
Roman
Angehängte Dateien:

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.