lm75_anzeige.h


1
#ifndef _LM75_anzeige_INCLUDED_
2
#define _LM75_anzeige_INCLUDED_
3
4
#include <i2c.h>
5
#include <lcd.h>
6
7
#pragma used+
8
9
void lm75_auf_lcd(unsigned char chip, unsigned char x_pos, unsigned char y_pos)
10
{
11
12
 char puffer[3];            // drei Zeichen für Zahlen größer 100
13
 unsigned char higher_byte; // für's einlesen des Temperatur-Registers des LM75
14
 unsigned char lower_byte;  // für's einlesen des Temperatur-Registers des LM75
15
 unsigned char i2c_addr;
16
17
  i2c_addr=0x90|(chip<<1);  // Adresse des angesprochenem LM75
18
  i2c_start();            // Start zur Datenübertragung auf dem I2C-Bus
19
  i2c_write(i2c_addr);      // Ansprechen des LM75
20
  i2c_write(0);             // Die "0" für lesen senden
21
  i2c_start();
22
  i2c_write(++i2c_addr);
23
  higher_byte=i2c_read(1);  // Empfang des higher_byte vom Temperatur-Register
24
  lower_byte=i2c_read(0);   // Empfang des lower_byte  vom Temperatur-Register
25
  i2c_stop();               // Ende zur Datenübertragung auf dem I2C-Bus
26
27
 lcd_gotoxy(x_pos,y_pos);
28
29
/*      
30
es muss geprüft werden ob dass letzte Bit(15) vom "Temperatur-Register" "high"
31
oder "low" ist. Wenn es "high" ist dann ist der Temperaturwert negativ.
32
Dabei muss das "higher_byte" erst mal invertiert werden und "1" dazu addieren
33
werden. (Siehe  Datenblatt) Ist der Wert nicht negativ dann entspricht das
34
Bitmuster dem Temperaturwert VOR dem Komma.
35
*/
36
37
  if (higher_byte >= 128)
38
   {
39
    higher_byte = ~(higher_byte);
40
    higher_byte =+1;
41
    lcd_putsf("-");
42
   } 
43
  else lcd_putsf("+");
44
  
45
  x_pos ++;                       // Die "Cursor-Position" um eins erhöhen
46
      
47
  lcd_gotoxy(x_pos,y_pos);
48
  itoa(higher_byte, puffer);      // schreibt den Bit-Wert vom higher_byte
49
  lcd_puts(puffer);               // an das Display
50
      
51
  x_pos ++;                       // auf jeden Fall die "Cursor-Position"
52
                                  // um eins erhöhen.
53
                                  
54
  if (higher_byte >=10) x_pos ++; // Falls der Wert höher wie 10, dann muss
55
                                  // der "Cursor" um zwei Stellen erhöht werden 
56
                                  
57
  if (higher_byte >=100)x_pos ++; // Falls der Wert höher wie 100, dann muss
58
                                  // der "cursor" um drei Stellen erhöht werden
59
  
60
  lcd_gotoxy(x_pos,y_pos);
61
  lcd_putsf(",");
62
  x_pos ++;
63
      
64
/*
65
Jetzt muss geprüft werden ob das Bit(7) vom "Temperatur-Register"
66
(7.Bit vom lower_byte) "high" oder "low" ist. Wenn es "low" ist, dann
67
ist der Wert hinter dem Komma "0". Sonnst ist der Wert "5".
68
*/      
69
  
70
  if (lower_byte >= 128) lcd_putsf("5");
71
  else lcd_putsf("0");
72
      
73
  x_pos ++;
74
  
75
  lcd_gotoxy(x_pos,y_pos);
76
  lcd_putchar(223);               // "Grad" Zeichen
77
  
78
  x_pos ++;
79
  
80
  lcd_gotoxy(x_pos,y_pos);
81
  lcd_putchar(20);                // Leerzeichen zum überschreiben von einstelligen
82
                                  // Zahlen auf zweistelligen Zahlen
83
      
84
}
85
#pragma used-
86
87
#endif