Forum: Mikrocontroller und Digitale Elektronik TWI I²C Temperatursensor


von KF -. (xanthos)


Lesenswert?

Hallo,
ich hoffe ihr könnt mir weiterhelfen.
Ich versuche zur Zeit einen Temperatursensor von AVR einzubinden. Nur 
bekomme ich auf dem LCD Display irgendwelche Werte angezeigt mit denen 
ich nichts anfangen kann. Entweder lese ich die falschen Bytes ein oder 
ich formatiere diese falsch :(
1
int main (void)
2
{
3
4
  bool ok;
5
  unsigned char antwort;
6
  int wert=0;
7
  char buffer [10];
8
  char buffer2 [10];
9
  char buffer3 [10];
10
  char buffer4 [10];
11
  int wert1, wert2, wert3, wert4;
12
  
13
14
  lcd_init();
15
  lcd_home();
16
  lcd_clear();
17
  MK3_INIT_TWI(); // init vom TWI-Bus
18
19
while(1)
20
{
21
  //---------------------------------------------------------
22
  // auslesen von Adresse 0x90
23
  //---------------------------------------------------------  
24
  ok=MK3_TWI_START();
25
  if(ok==true) {
26
    antwort=MK3_TWI_SEND(0x90,false);  // Slave-Adr 
27
    if(antwort==TWSR_SLAVE_OK) {
28
     MK3_TWI_SEND(0x00,false);        // Adresse 
29
    MK3_TWI_STOP();
30
    MK3_TWI_WAIT(10); 
31
      MK3_TWI_START();
32
      
33
      MK3_TWI_SEND(0x90+1,false);// Read-Befehl senden
34
      wert1=MK3_TWI_READ(true);       // lesen von Bytewert Nr. 1
35
      wert2=MK3_TWI_READ(false);       // lesen von Bytewert Nr. 2
36
   
37
}
38
    MK3_TWI_STOP();
39
  MK3_TWI_WAIT(10); 
40
  lcd_string (itoa(wert1 , buffer , 2));  
41
  _delay_ms(5000);
42
  lcd_clear();
43
  lcd_home(); 
44
   
45
  
46
  }  
47
}
48
}

: Bearbeitet durch User
von Nachtaktiver (Gast)


Lesenswert?

Wenn man jetzt noch wüsste um welchen Sensor es sich handelt..

von xanthos (Gast)


Lesenswert?

Hajo stimmt lm75

von Mike (Gast)


Lesenswert?

Korbinian Faber schrieb:
> Entweder lese ich die falschen Bytes ein oder ich formatiere diese falsch

Einlesen alleine reicht nicht. Du musst du Daten auch ausgeben. In 
deinem Ausgabeteil taucht nur "wert1" auf.

von Uwe B. (derexponent)


Lesenswert?

1. liegt die Hardware-Adresse von deinem LM75 auch bei 0x90 ?
2. hast du beide externen PullUp-Widerstände an SCL und SDA eingebaut ?
3. kommt die Software an den Punkt zum einlesen vom Wert ?
4. welche Werte (wert1, wert2) werden denn angezeigt ?

von KF -. (xanthos)


Lesenswert?

Vielen Dank für die Unterstützung. @Uwe B. habe nochmals alles 
kontrolliert Hard- wie Software seitig. Dabei ist mir aufgefallen, dass 
das LCD Display die richtige Temperatur (wert1) anzeigt, aber nur die 
aktuelle Temp. wenn ich das Programm übertrage, danach ändert sich 
nichts mehr.
Also mir kommt es so vor, als würde er das Temp.register nur einmal 
auslesen, finde aber leider nicht raus wieso????

int main (void)
{

  bool ok;
  unsigned char antwort;
  int wert=0;
  char buffer [16];
  char buffer2 [16];

  unsigned char wert1, wert2;


  lcd_init();
  lcd_home();
  lcd_clear();
  MK3_INIT_TWI(); // init vom TWI-Bus

while(1)
{

  //---------------------------------------------------------
  // auslesen von Adresse 0x90
  //---------------------------------------------------------
  ok=MK3_TWI_START();
  if(ok==true) {

    antwort=MK3_TWI_SEND(0x90,false);  // Slave-Adr = 0x90
    if(antwort==TWSR_SLAVE_OK) {

     MK3_TWI_SEND(0x00,false);        // Temperaturregister auslesen


      MK3_TWI_START();


   MK3_TWI_SEND(0x91,false);// Read-Befehl senden
    wert1=MK3_TWI_READ(true);       // lesen von Bytewert Nr. 1
     wert2=MK3_TWI_READ(false);       // lesen von Bytewert Nr. 2
    MK3_TWI_STOP();

  lcd_string (itoa(wert1 , buffer , 10));
  lcd_setcursor(0,2);
  lcd_string (itoa(wert2 , buffer2 , 2));
  //MK3_TWI_WAIT(10);
  _delay_ms(1000);
  lcd_home();


  }
  }

}
}

von tomske (Gast)


Lesenswert?

Vielleicht ist es nur ein copy-paste-Problem, aber Dein MK3_TWI_START 
scheint auskommentiert zu sein?
1
//--------------------------------------------------------- ok=MK3_TWI_START();

von Uwe B. (derexponent)


Lesenswert?

hmm, kann in dem Codeteil keinen Fehler sehen
(der I2C-Teil ist identisch mit dem, den ich benutze und der 
funktioniert)

meine Glaskugel sagt : "Hardware-BUG"
hast du dir die Signale mal mit einem Oszi angesehen ?
(auf saubere Hi/Lo-Pegel am LM75)

P.S. die Rückgabewerte (von MK3_TWI_START und MK3_TWI_SEND)
sind nicht umsonst in der Software drinn...die kann man sich auch
anzeigen lassen (z.B. per LCD) und dann rausfinden wo er hängen bleibt 
und mit was für einem Fehler :-)

Uwe

von KF -. (xanthos)


Lesenswert?

:D Stimmt MK3_TWI_START und MK3_TWI_SEND hätte ich auchmal kontrollieren 
können.
Also es funktioniert ich habe nichts mehr ändern müssen. Hab mir über 
ein Tool von AVR die Temperatur anzeigen lassen und wenn dieses Tool 
gestartet war hat sich die Temp. auf meinem LCD nicht mehr verändern, 
weil schon auf diesen zugegriffen wurde?!?! Denk ich..?

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.