www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik I2C-ds1621


Autor: Peter Eberle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mein Programm läuft nicht mehr wenn ich ds1621_init() aufrufe.Ohne den
Aufruf läuft das Programm.
Ich benutze zum programmieren CodeVisionAVR und einen ATMega8-16P.
Ist ein Fehler in der ds1621.lib?
Bin noch Anfänger und finde den Fehler nicht.

Danke an alle im Voraus.

Hier folgt die ds1621.lib

/*
  Dallas Semiconductor DS1621 I2C bus
  thermometer/thermostat functions

  CodeVisionAVR C Compiler
  (C) 1998-2000 Pavel Haiduc, HP InfoTech S.R.L.
*/

union ds1621_temp {
                  unsigned char b[2];
                  int w;
                  };

unsigned char ds1621_get_status(unsigned char chip)
{
unsigned char i2c_address,status;
i2c_address=0x90|(chip<<1);
i2c_start();
i2c_write(i2c_address);
i2c_write(0xac);
i2c_start();
i2c_write(++i2c_address);
status=i2c_read(0);
i2c_stop();
return status;
}

void ds1621_set_status(unsigned char chip,unsigned char status)
{
i2c_start();
i2c_write(0x90|(chip<<1));
i2c_write(0xac);
i2c_write(status);
i2c_stop();
}

void ds1621_set_temp(unsigned char chip,unsigned char cmd,char data)
{
i2c_start();
i2c_write(0x90|(chip<<1));
i2c_write(cmd);
i2c_write(data);
i2c_write(0);
i2c_stop();
while (ds1621_get_status(chip) & 0x10);
}

void ds1621_start(unsigned char chip)
{
i2c_start();
i2c_write(0x90|(chip<<1));
i2c_write(0xee);
i2c_stop();
}

#if funcused ds1621_stop
void ds1621_stop(unsigned char chip)
{
i2c_start();
i2c_write(0x90|(chip<<1));

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wo ist denn besagte 'ds1621_init()' funktion?

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry !
Habe aus Versehn nicht die ganze Datei kopiert.
Hier folgt alles.

/*
  Dallas Semiconductor DS1621 I2C bus
  thermometer/thermostat functions

  CodeVisionAVR C Compiler
  (C) 1998-2000 Pavel Haiduc, HP InfoTech S.R.L.
*/

union ds1621_temp {
                  unsigned char b[2];
                  int w;
                  };

unsigned char ds1621_get_status(unsigned char chip)
{
unsigned char i2c_address,status;
i2c_address=0x90|(chip<<1);
i2c_start();
i2c_write(i2c_address);
i2c_write(0xac);
i2c_start();
i2c_write(++i2c_address);
status=i2c_read(0);
i2c_stop();
return status;
}

void ds1621_set_status(unsigned char chip,unsigned char status)
{
i2c_start();
i2c_write(0x90|(chip<<1));
i2c_write(0xac);
i2c_write(status);
i2c_stop();
}

void ds1621_set_temp(unsigned char chip,unsigned char cmd,char data)
{
i2c_start();
i2c_write(0x90|(chip<<1));
i2c_write(cmd);
i2c_write(data);
i2c_write(0);
i2c_stop();
while (ds1621_get_status(chip) & 0x10);
}

void ds1621_start(unsigned char chip)
{
i2c_start();
i2c_write(0x90|(chip<<1));
i2c_write(0xee);
i2c_stop();
}

#if funcused ds1621_stop
void ds1621_stop(unsigned char chip)
{
i2c_start();
i2c_write(0x90|(chip<<1));
i2c_write(0x22);
i2c_stop();
}
#endif

void ds1621_init(unsigned char chip,signed char tlow,signed char
thigh,
unsigned char pol)
{
//set configuration register
ds1621_set_status(chip,8+(pol<<1));
//set low temperature
ds1621_set_temp(chip,0xa2,tlow);
//set high temperature
ds1621_set_temp(chip,0xa1,thigh);
//start temperature conversions
ds1621_start(chip);
//while ((ds1621_get_status(chip) & 0x80)==0);
}

#if funcused ds1621_temperature_10
int ds1621_temperature_10(unsigned char chip)
{
union ds1621_temp tt;
unsigned char i2c_addr;
i2c_addr=0x90|(chip<<1);
i2c_start();
i2c_write(i2c_addr);
i2c_write(0xaa);
i2c_start();
i2c_write(++i2c_addr);
tt.b[1]=i2c_read(1);
tt.b[0]=i2c_read(0);
i2c_stop();
return (tt.w>>7)*5;
}
#endif

Autor: franz Hund (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter, ich hab im mikrocontroller.net Forum gelesen, dass du mit
dem DS 1621 bastelst. Ich hab da etwa den gleichen Effekt wie den, den
Du beschrieben hast. Läuft das Programm bei dir inzwischen? Könnt ich
da bei Dir mal ne geistige Anleihe bekommen? Ich bekommnämlich langsam
nen Vogel.

Wär schön, wenn du mir per Mail mal deinen Code schicken könntest. Ich
mach da in C rum.

Danke

Franz

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.