Hi

Hier habe ich mein Ergebnis:


"i2c.h"
Code:
#define TAKT 8000000UL 
#define ADRESSE_R 0b10010001 //Lesen 
#define ADRESSE_W 0b10010000 //Schreiben
#define FAKTOR 32
#define TEILER 1

void TWI_init(unsigned char faktor, unsigned char teiler)
{
TWBR = faktor;
TWSR = teiler;
}

void TWI_send(unsigned char adres, unsigned char daten)
{
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
loop_until_bit_is_set(TWCR, TWINT);
TWDR = adres;
TWCR = (1<<TWINT)|(1<<TWEN);
loop_until_bit_is_set(TWCR, TWINT);
TWDR = daten;
TWCR = (1<<TWINT)|(1<<TWEN);
loop_until_bit_is_set(TWCR, TWINT);
TWCR = (1<<TWINT)|(1<<TWSTO)|(1<<TWEN);
}


 char dat1, dat2;

 char TWI_empf(unsigned char adres)
{

TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
loop_until_bit_is_set(TWCR, TWINT);
TWDR = adres;
TWCR = (1<<TWINT)|(1<<TWEN);
loop_until_bit_is_set(TWCR, TWINT);
TWCR = (1<<TWINT)|(1<<TWEN);
loop_until_bit_is_set(TWCR, TWINT);
dat1 = TWDR ;
TWCR = (1<<TWINT)|(1<<TWEA)|(1<<TWEN);

TWCR = (1<<TWINT)|(1<<TWEN);
loop_until_bit_is_set(TWCR, TWINT);
dat2 = TWDR ;

loop_until_bit_is_set(TWCR, TWINT);
TWCR = (1<<TWINT)|(1<<TWSTO)|(1<<TWEN);

return dat1;
}
und die MAIN:

Code:
#include <avr/io.h> 
#include <avr/interrupt.h>
#include <stdlib.h>
#include <util/delay.h>
#include "uart.h"
#include "i2c.h"

int main (void) {

USART_Init( UBRR_VAL ) ;

uart_puts ("\033[2J");
uart_puts ("\033[32m");
uart_puts ("Hallo Welt\r\n")  ;
uart_putc ( 0x01);
uart_puts ("\r\nHallo Welt 2 ")  ;

_delay_ms(10000);

TWI_init(FAKTOR, TEILER);
char temperatur;
char einer;
char zehner;
char c = 248;

    while(1)
    {

    uart_puts ("\033[2J");

    temperatur = TWI_empf(ADRESSE_R);
    einer = ( temperatur % 10 ) + 48;
    zehner = ( temperatur / 10 ) + 48;

    
    if (dat2 >= 0b10000000)
    {
    uart_puts ("\r\nTemperatur ")  ;
    uart_putc (zehner);
    uart_putc (einer);
    uart_puts (",5 ");
    uart_putc (c);
    uart_puts ("C \r\n")  ;
    
    }

    else
    {
    uart_puts ("\r\nTemperatur ")  ;
    uart_putc (zehner);
    uart_putc (einer);
    uart_puts (",0 ");
    uart_putc (c);
    uart_puts ("C \r\n")  ;
    
    }
    _delay_ms(1000);

    }
}
Das Problem war das mein terminal Ales in ascii interpretiert hat also auch die werte die von dem LM75 kommen man muste diesen wert erst um Rechnen so das Er dem ascii Code entspricht und ich auch mein gewünschten dezimal werte bekomme.

Das geht so auf http://www.torsten-horn.de/techdocs/ascii.htm kan man erkennen das Stele 48 mit 0 beginnt und stelle 57 mit 9 endet, also musste ich meinen wert erst mal unterteilen um die einer zu erhalten teilt man durch 10 und merkt sich den Rest das geht mit "%10" Dan verschiebt man den wert um 48 stellen nach hinten also +48 und erhält das gewünschte ascii Zeichen, um die zehner zu erhalten, teilt man das ganze durch /10 und verschiebt das Ergebnis um 48 stellen also wider +48 jetzt nur noch nacheinander ausgeben und fertig.

THX

by Ferdinand