Forum: Mikrocontroller und Digitale Elektronik lm75 Hilfe


von mynet (Gast)


Lesenswert?

#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!

von mynet (Gast)


Lesenswert?

//=======================================================

#include <mega8.h>
#include <delay.h>
#include <Lm75_anzeige.h>

// Anschlussinitialisierung des I2C- Buses am PORT C
// SDA Pin 4
// SCL Pin 5
#asm
   .equ __i2c_port=0x15
   .equ __sda_bit=1
   .equ __scl_bit=0
#endasm
#include <i2c.h>

// 4x20 Zeilen-Display am PORT D
#asm
   .equ __lcd_port=0x12
#endasm
#include <lcd.h>

void main(void)
{

// Initialisierung des I2C- Buses
i2c_init();

// Initialisierung des LCD's
lcd_init(20);

while (1)
      {
       delay_ms(500);       // Pause von einer halben Sekunde
       lm75_auf_lcd(0, 4, 1);  // Temperatur des LM75-Sensors mit
               // der Adresse 0 auf die Position
               // (x=4/y=1) auf dem Display
      };
}

//=======================================================


sorry des wars..

gruß

von Mike (Gast)


Lesenswert?

Zuerst sollte man dir die Funktion "Dateianhang" erklären.

von mynet (Gast)


Lesenswert?

entschuldigung! aber weist du zufällig auch woran es hapert?

von Marcel (Gast)


Lesenswert?

Hallo mynet,
ich gehe mal davon aus das du auch der jenige bist, der sich bei mir
per E-mail gemeldet hat, oder!!!!!!!
Also soweit ich mich daran erinnern kann, hast du doch gar kein Mega8
benutzt, oder????
Wenn du nicht selber darauf kommst, wieso es bei dir nicht geht, dann
kann ich dir auch nicht helfen. Mit etwas Überlegung sollte man ganz
leicht darauf kommen. Benutzt du den ein 4x20 Zeilen Display?? Das
Programm was du ja oben "geposstet" hast, hab ich in der
>Codesammlung< zur Verfügung gestellt. Erwarte nicht das man dir alles
aus der Hand nimmt und es für dich löst!!!!
Die Leute hier im Forum helfen gerne aber es gehört auch ein bisschen
Eigenarbeit dazu!!!!
Versuche doch mal den Code zu verstehen!!!! Ich glaube das ich den Code
recht gut auskommentiert habe, oder etwa nicht??!!
Du solltest auch mal etwas von deiner Schaltung erklären!!! Keiner hat
hier die berühmte Kristallkugel!!!
Was für ein µC hast du?? Welches LCD?? Was für Widerstände am Bus??
Lass dir nicht alles aus der Nase ziehen, dann kann man dir eventuell
auch helfen!!!!!!!!!!!

Gruß Marcel

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.