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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.