Hallo an alle

Ich hab nun die I2C Routine fertig geschrieben Jedoch funktioniert sie noc nicht. Ich finde jedoch keinen Fehler

Hier der Code

Code:
#include <avr/io.h>
#include <stdlib.h>
#include "lcd.h"

#define TRUE 1
#define FALSE 0
#define ACK TRUE
#define NACK FALSE

#define START 0x08
#define TW_MT_SLA_ACK 0x18
#define TW_MT_DATA_ACK	0x28

void lm75_read(void);
void i2c_init(void);
int i2c_send_start(uint8_t adress);
int i2c_send_byte(uint8_t data);
void i2c_send_stop(void);
int i2c_read(uint8_t adress, uint8_t ackflag);


  struct TEMPERATUR {
  uint8_t high;
  uint8_t low;
  } temp;
  
void i2c_init(void)
{
	TWBR |= (1 << 5); //TWBR = 32 = 10 0000
	// Prescaler = 1
}

int i2c_send_start(uint8_t adress)
{
	TWCR |= ((1 << TWINT) | (1 << TWSTA) | (1 << TWEN)); //Sende start Condition
	while(!(TWCR & (1 << TWINT))); //Warte bis ende
	
	if((TWSR & 0xF8) != START)
		return -1;
	
	TWDR = adress;
	TWCR = (1 << TWINT) | (1 << TWEN);
	while(!(TWCR & (1 << TWINT)));
	
	if((TWCR & 0xF8) != TW_MT_SLA_ACK)
		return -1;
	
	return 0;
}

int i2c_send_byte(uint8_t data)
{
	TWDR = data;
	TWCR = (1 << TWINT) | (1 << TWEN);
	
	while(!(TWCR & (1 << TWINT)));
	
	if((TWSR & 0xF8) != TW_MT_DATA_ACK)
		return -1;
		
	return 0;
}

void i2c_send_stop(void)
{
	TWCR = (1 << TWINT) | (1 << TWEN) | (1 << TWSTO);
	while(!(TWCR & (1 << TWSTO)));
}

int i2c_read(uint8_t adress, uint8_t ackflag)
{
	if(ackflag == ACK)
		TWCR = (1 << TWINT) | (1 << TWEN) | (1 << TWEA);
	else
		TWCR = (1 << TWINT) | (1 << TWEN);
	
	while(!(TWCR & (1 << TWINT)));
	
	return TWDR;
}

void lm75_read(void)
{
  i2c_send_stop();
  i2c_send_start(0x9E);
  temp.high = i2c_read(0x9F,ACK);
  temp.low = i2c_read(0x9F, NACK);
  i2c_send_stop();
}

int main(void)
{
	uint8_t nachkomma, ganzzahl;
	
	i2c_init();
	lcd_init(LCD_DISP_ON);
	lcd_home();
	lcd_clrscr();
	

	lcd_clrscr();
	lm75_read();
	
	if(bit_is_set(temp.low, 0))
		nachkomma = 5;
	else
		nachkomma = 0;
		
	temp.low >>= 1;
	temp.high <<= 7;
	ganzzahl= temp.low | temp.high;
	
	lcd_put_d(ganzzahl);
	lcd_putc('A');
	lcd_put_d(nachkomma);

	
	return 0;
}
Ich hoffe es kann mir wer helfen.

Danke im Voraus

Gruß Robert