Gast
#167743
#ifndef LM75_anzeige_INCLUDED
#define LM75_anzeige_INCLUDED
#include <i2c.h>
#include <lcd.h>
#include <stdlib.h>
#pragma used+
void lm75_auf_lcd(unsigned char chip, unsigned char x_pos, unsigned
char y_pos)
{
char puffer[3]; // drei Zeichen für Zahlen größer 100
unsigned char higher_byte; // für's einlesen des Temperatur-Registers
des LM75
unsigned char lower_byte; // für's einlesen des Temperatur-Registers
des LM75
unsigned char i2c_addr;
i2c_addr=0x90|(chip<<1); // Adresse des angesprochenem LM75
i2c_start(); // Start zur Datenübertragung auf dem I2C-Bus
i2c_write(i2c_addr); // Ansprechen des LM75
i2c_write(0); // Die "0" für lesen senden
i2c_start();
i2c_write(++i2c_addr);
higher_byte=i2c_read(1); // Empfang des higher_byte vom
Temperatur-Register
lower_byte=i2c_read(0); // Empfang des lower_byte vom
Temperatur-Register
i2c_stop(); // Ende zur Datenübertragung auf dem
I2C-Bus
lcd_gotoxy(x_pos,y_pos);
/*
es muss geprüft werden ob dass letzte Bit(15) vom
"Temperatur-Register" "high"
oder "low" ist. Wenn es "high" ist dann ist der Temperaturwert
negativ.
Dabei muss das "higher_byte" erst mal invertiert werden und "1"
dazu addieren
werden. (Siehe Datenblatt) Ist der Wert nicht negativ dann entspricht
das
Bitmuster dem Temperaturwert VOR dem Komma.
*/
if (higher_byte >= 128)
{
higher_byte = ~(higher_byte);
higher_byte =+1;
lcd_putsf("-");
}
else lcd_putsf("+");
x_pos ++; // Die "Cursor-Position" um eins
erhöhen
lcd_gotoxy(x_pos,y_pos);
itoa(higher_byte, puffer); // schreibt den Bit-Wert vom
higher_byte
lcd_puts(puffer); // an das Display
x_pos ++; // auf jeden Fall die
"Cursor-Position"
// um eins erhöhen.
if (higher_byte >=10) x_pos ++; // Falls der Wert höher wie 10, dann
muss
// der "Cursor" um zwei Stellen
erhöht werden
if (higher_byte >=100)x_pos ++; // Falls der Wert höher wie 100, dann
muss
// der "cursor" um drei Stellen
erhöht werden
lcd_gotoxy(x_pos,y_pos);
lcd_putsf(",");
x_pos ++;
/*
Jetzt muss geprüft werden ob das Bit(7) vom "Temperatur-Register"
(7.Bit vom lower_byte) "high" oder "low" ist. Wenn es "low" ist,
dann
ist der Wert hinter dem Komma "0". Sonnst ist der Wert "5".
*/
if (lower_byte >= 128) lcd_putsf("5");
else lcd_putsf("0");
x_pos ++;
lcd_gotoxy(x_pos,y_pos);
lcd_putchar(223); // "Grad" Zeichen
x_pos ++;
lcd_gotoxy(x_pos,y_pos);
lcd_putchar(20); // Leerzeichen zum überschreiben von
einstelligen
// Zahlen auf zweistelligen Zahlen
}
#pragma used-
#endif
kann mir bitte jemand erklären warum ich nur -1,5 grad am display zu
sehen bekomm..
gruß und danke!