hier ist die auslese funktion des LM75 die Adresse des Bausteins ist
0x90
, da A0, A1 , A2 auf Masse gelegt sind.
unsigned int i2cLm75(void)
{
char LM75_Temperatur1 = 0;
char LM75_Temperatur2 = 0;
unsigned int return_value = 0;
//delay darf nur jede sec. aufgerufen werden da der sensor zeit brauch
i2c_start_wait(LM75+I2C_READ); //Slave bereit zum lesen?
// LM75_Temperatur1 = i2c_readAck();
LM75_Temperatur2 = i2c_readNak(); //letztes Byte lesen, darum kein ACK
i2c_stop();
return_value = LM75_Temperatur1<<8; //LM92CIM_Temperatur in High
Byte schieben
return_value |= LM75_Temperatur2;
return return_value/128; // Temperatur in °C
Die folgende Funktion gibt des Temperatur Wert über die Serielle
Schnittstelle aus.
void getTemperatur(void)
{
unsigned int lm75_temperatur;
char temperatur_buffer[100];
lm75_temperatur = i2cLm75();
sprintf(temperatur_buffer,"Temperatur:%i\n\r",lm75_temperatur);
//sprintf(temperatur_buffer,"%i\n\r",lm75_temperatur);
usartPuts(temperatur_buffer);
}
Hier ist das Hauptprogramm.
#include <compat/twi.h>
#include <util/delay.h>
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <stdlib.h>
#include <avr/interrupt.h>
#include "USART.h"
#include "USART.c"
#include "i2cdevices.h"
#include "i2cdevices.c"
#include "i2cmaster.h"
#include "twimaster.c"
#include "BiT.h"
#include "BiT.c"
#include "Timer.h"
#include "Timer.c"
#include "PORT80.h"
#include "PORT80.c"
#include "Temperatur.h"
#include "Temperatur.c"
#if defined(_DOXYGEN_)
#define reti()
#else /* !DOXYGEN */
#define reti() _asm__ __volatile_ ("reti" ::)
#endif /* DOXYGEN */
int main(void)
{
/*************************************************** Variabeln
*********************************************************/
// unsigned char port_80_temp = 0; //In diese Variable werden die
Werte aus dem Array geschrieben
// unsigned char led_merker_sc = ( 1<<LED_RT_BLINK); //4 // Bit 0
rt, Bit 1 gn, Bit 2 rt-blink, , Bit 3 gn-blink
// unsigned char led_merker_sp = 0x04;
//----------------------------------------------------------------------
-------------------------------------------------
//************************************************** Initialisierungs
Routinen ******************************************
port80Init();
initTimer1();
initInterrupt2(); // PORT80
sei();
i2c_init(); // I2C Bus initialisieren
usartInit(BAUD);
time_counter_[0] = 1; // Timer benutzt LM92
time_counter_[1] = 2; // Timer benutzt für LED blinken
time_counter_[2] = 301; // Timer für PORT80 Time Out
time_counter_[3] = 10; // Timer für SC Reset beim Start für
Delay
time_counter_[5] = 8;
time_counter_[6] = 21; // Clr für NMEA EVT
DDRC |= 0xF0;
//BiT LED Green
//setBitLedMezzaUc(3);
while(1)
{
getTemperatur();
} //Endlosschleife
} //Programmende
/*
void pb_reset(void)
{
if(bit_is_clear(PIND, PIND3) )
{
PORTC &= ~(1<<PORTC6) ;
PORTD |= (1<<PORTD1) ;
PORTD &= ~(1<<PORTD1) ;
}
else{
PORTC |= (1<<PORTC6) ;
PORTD |= (1<<PORTD1);
}
}//ende pb_reset */