TWI (I2C) Problem bekomme den TWI nicht ans laufen

OP #1940937
Lesenswert?

Hallo zusammen,

habe ein Problem mit meinem Controller.

Möchte mit meinem Programm die Werte von einem LM75 per TWI abfragen.
LM75 ist ein Temperaturmessbaustein.

Habe bei dem Programm einiges ausprobiert.

Habe mich auch am Buch orientiert.

Das Problem liegt meiner Meinung daran das nach dem übertragen der 
Slaveadresse die Sache nicht weiter läuft.

Benutze übrigens einen ATmega 644 und AVR Studio

Datenblatt vom LM75 hänge ich mal mit an!

Hoffe mir kann jemand helfen!!

Hier mein Code:



#define F_CPU 16000000  // Taktfrequenz
#include <avr\io.h>    // AVR Register und Konstantendefinitionen
#include "i2cmaster.h"
#include "lcd.h"
#include <stdlib.h>    //Standard Libary integrieren
#include <avr/interrupt.h>
#include <inttypes.h>    // leerstellen löschen
#include <util/twi.h>
#include <util/delay.h>
#include <stdio.h>    // für sprintf Befehl


#define SLA_ADDRESS 0x91  //Slave Address 0b 1001000 und eine 1 als READ 
Befehl
#define FAKTOR 0xD2
#define TEILER 0x01




unsigned int DATA;
char Buffer [20];
unsigned int TWSRMODE;



void init (unsigned char faktor, unsigned char teiler)
{
  TWBR = faktor;        //TWI initialisieren
  TWSR = teiler;
}




int main(void)
{
  lcd_init(LCD_DISP_ON);

  TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);  //Startbedingungen

  while (!(TWCR & (1<<TWINT)));    //warten bis  Startbedingungen 
abgeschlossen

  if ((TWSR &  0x08) != TW_START)    //Statusabfrage I2C bereit
    {
    lcd_gotoxy(0,0);
    lcd_puts( "ERROR 1");    //Statusanzeige Start übermittelt
    }

  TWDR = SLA_ADDRESS;      //Slaveadresse senden

  TWCR = (1<<TWINT) | (1<<TWEN);

  while (!(TWCR & (1<<TWINT)));

  if ((TWSR & 0x40) !=TW_MT_SLA_ACK)
    {
    lcd_clrscr();
    lcd_gotoxy(0,0);
    lcd_puts( "Daten uebertragen");
    }

  DATA = TWDR;


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


while(1)
{

  sprintf(Buffer,"%u",DATA);
  lcd_gotoxy(0,1);
  lcd_puts(Buffer);

  TWSRMODE = TWSR;    //TWSR Register Status anzuzeigen

  sprintf(Buffer,"%u",TWSRMODE);
  lcd_gotoxy(10,0);
  lcd_puts(Buffer);

}

}
Angehängte Dateien:
Gast #2098968
Lesenswert?

Hi hast du mittlerweile dein Programm zum laufen gebracht ??
Ich habe nämlich fast das gleiche Problem verwende zwar einen anderen 
Temperatursensor aber selbst die Slaveaddresse ist gleich :).

Wenn ja würde ich mich über deine Auflösung freuen.

gruß

c_l

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren