Forum: Mikrocontroller und Digitale Elektronik TC74 I2C Kommunikationsprobleme


von Lukas (Gast)


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

von Lukas (Gast)


Lesenswert?

push (sorry)

von zaphod0999 (Gast)


Angehängte Dateien:

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

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
Noch kein Account? Hier anmelden.