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
|