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