DS1624s mit ATmega128l

OP #1507683
Hallo Leute!
Habe folgendes Problem.

Ich möchte gerne mit einem ATMega128L, über den TWI Bus, die Temperatur 
aus einem DS1624S Temperatursensor auslesen. Leider klappt es nicht so 
wie ich es mir vorstelle. Es wäre schön, wenn Ihr mir helfen könntet. 
Vielen Dank!

Mein Quellcode sieht so aus:

#include <avr/io.h>
#include <util/delay.h>
#include <stdlib.h>
#include <stdio.h>
#include "lcd.h"
#include "twi.h"

#include "atmega128l.h"

#ifndef F_CPU
#define F_CPU 8000000UL
#endif

#define SCL_CLOCK  90000L



void twi_start (void) {
  TWCR = (1<<TWINT)|(1<<TWEA)|(1<<TWSTA)|(1<<TWEN);
  while (!(TWCR &(1<<TWINT)));
  }
void twi_stop (void) {
  TWCR = (1<<TWINT)|(1<<TWEA)|(1<<TWSTO)|(1<<TWEN);
  while (!(TWCR &(1<<TWINT)));
  }
void twi_write (unsigned char data) {
  TWDR = data;
  TWCR = (1<<TWINT)|(1<<TWEA)|(1<<TWEN);
  while (!(TWCR &(1<<TWINT)));
  }

void twi_init (void) {
  DDRD  = 0x00;     // PD1 (SDA) und PD0 (SCL) auf Input
  PORTD |= (1<<PD1)|(1<<PD0);          // mit Pullups
  TWSR = 0;
  TWBR = 37;//((F_CPU/SCL_CLOCK)-16)/2;
  TWCR = (1<<TWEA)|(1<<TWEN);   // enable TWI
  //Temperaturmessung starten
  twi_start();
  twi_write(0b10010010);  // ID=1001, Addr.=001, Write=0
  twi_write(0xEE); // Start conversion
  twi_stop();
  }

unsigned char twi_read (void) {
  TWCR = (1<<TWINT)|(1<<TWEA)|(1<<TWEN);
  while (!(TWCR &(1<<TWINT)));
  return TWDR;
  }
int ds_read_temp (void) {
  union {unsigned char data[2]; int value;} u;
  twi_start();
  twi_write(0b10010010);  // ID=1001, Addr.=001, Write=0
  twi_write(0xAA);        // Command: Read Temperature
  twi_start();
  twi_write(0b10010011);  // ID=1001, Addr.=001, Read=1
  u.data[1] = twi_read(); // high Byte
  u.data[0] = twi_read(); // low Byte
  twi_stop();
  return u.value/8;
  }





int main()
{


  char buffer[15];
  int temp = 0;

  lcd_init(LCD_DISP_ON);

  twi_init();    //an dieser Stelle bleibt der µC hängen


  while(1)
  {

    lcd_clrscr();

    temp = ds_read_temp();

                //Umwandlung für Display Darstellung

                itoa(temp, buffer, 10);

    lcd_clrscr();
     lcd_gotoxy(0,0);
     lcd_puts("Temperatur");
    lcd_gotoxy(0,1);
    lcd_puts(buffer);
    lcd_gotoxy(4,1);
    lcd_puts("Grad");

    _delay_ms(1000);
  }
}
Angehängte Dateien:

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.