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));
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
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.