Hallo, unter http://sicklinger.com/de/microcontroller-avr/58-atmel-avr-atmega-ds18x20-library-in-c.html gibt es eine einfache float basierte DS18x20 lib für AVR. Sie ist sehr einfach gehalten. Ich habe Sie getestet von -45°C bis 120°C. Gruß,
"Tut mir leid, du hast das Limit an Downloads, für diese Datei, erreicht" Wenig hilfreich... Oliver
Hallo Oliver, vielen Dank für den Hinweis! Jetzt müsste es wieder funktionieren. Vielen Dank nochmal! Grüße,
Hm, da kommt jetzt eine 11 byte "grosse" Datei. Das wird wohl nicht alles sein, oder? Oliver
Hallo Oliver, jetzt wird es echt peinlich sorry... Hatte die Dateien aus Versehen in der Datenbank gespeichert und das funktionierte nicht richtig... Jetzt sollte es endlich klappen... Nochmal sorry und vielen Dank für den Hinweis! Grüße,
Warum hängst Du die Lib nicht einfach hier in das Forum? Dann findet man die Datei auch in dre Jahren noch, wenn der Link oben schon längst tot ist ... Edit: Habe gerade die Beschreibung gelesen: > 5. Es kann nur ein Sensor pro ATMEGA Pin benutzt werden Das ist schon eine starke Einschränkung. Schau mal in die Sourcen von Peda, wie man meherer Sensoren anspricht. > 6. Für kurze Leitungslängen (<1m) vom DS18x20 zum Microcontroller reichen die internen Pullup Widerstände des MCU. Für längere Leitungslängen benötigt man externe 4.7k Pullup Widerstände Verstehe ich nicht. Die 10k vom AVR reichen nicht, aber externe 4k7?
Pete K. schrieb: > Warum hängst Du die Lib nicht einfach hier in das Forum? Dann findet man > die Datei auch in dre Jahren noch, wenn der Link oben schon längst tot > ist ... > Weil ich Remository mit SVN gekoppelt habe und nur einen Link warten moechte > Edit: Habe gerade die Beschreibung gelesen: > >> 5. Es kann nur ein Sensor pro ATMEGA Pin benutzt werden > > Das ist schon eine starke Einschränkung. Schau mal in die Sourcen von > Peda, wie man meherer Sensoren anspricht. Dafuer muss man sich auch nicht mit dem bestimmen von dem 64bit Identifikationscode auseinandersetzen. > >> 6. Für kurze Leitungslängen (<1m) vom DS18x20 zum Microcontroller reichen die > internen Pullup Widerstände des MCU. Für längere Leitungslängen benötigt > externe 4.7k Pullup Widerstände > > Verstehe ich nicht. Die 10k vom AVR reichen nicht, aber externe 4k7? Die internen Pull-ups der IO-Pins haben zw. 20 und 50 k und sind in Kombination mit der Anschlussleitung zu gross um in der benoetigten Zeit wieder ein High zu erreichen. Dies haben meine Tests ergeben. Laut DS18x20 Datenblatt sollte man jedoch immer 4.7k Pull-ups verwenden.
St. S. schrieb: > Pete K. schrieb: >> Warum hängst Du die Lib nicht einfach hier in das Forum? Dann findet man >> die Datei auch in dre Jahren noch, wenn der Link oben schon längst tot >> ist ... >> > Weil ich Remository mit SVN gekoppelt habe und nur einen Link warten > moechte >>> 5. Es kann nur ein Sensor pro ATMEGA Pin benutzt werden >> > float basierte Alles in allem: rechne besser nicht damit, dass wir hier von microcontroller.net deine Lib gross weiterempfehlen werden.
> Alles in allem: rechne besser nicht damit, dass wir hier von > microcontroller.net deine Lib gross weiterempfehlen werden. Es ist ja auch für Einsteiger gedacht...(steht in der Beschreibung) Ich denke nicht, dass man z.B. für ein Thermometer mit 7-Segment Anzeige mehrere Sensoren pro Pin benötigt werden und float aus Gründen der Performance ein Problem darstellt.
Servus, ich versteh euer Problem nicht? Da ist jemand so nett und stellt seine Library kostenlos zur Verfügung und wird nur kritisiert. Klar kann man manche sachen besser machen, aber gleich als unbrauchbar abzustemplen find ich etwas hart. Scheint wohl generell ein Phänomen dieses Forums zu sein, ja selbst die Modaratoren mischen mit. Braucht man sich nicht wundern wenn bald niemand mehr Code postet. Also Danke für die Library.
Tom schrieb: > Servus, > > ich versteh euer Problem nicht? Da ist jemand so nett und stellt seine > Library kostenlos zur Verfügung und wird nur kritisiert. Klar kann man > manche sachen besser machen, aber gleich als unbrauchbar abzustemplen > find ich etwas hart. Scheint wohl generell ein Phänomen dieses Forums zu > sein, ja selbst die Modaratoren mischen mit. Braucht man sich nicht > wundern wenn bald niemand mehr Code postet. > > Also Danke für die Library. Danke Tom!
Hallo, Ich finde die Lib. durchaus klar durchdacht. Eine Frage habe ich, um die Routine sprintf(temp_po_str,"%.1f C",temp_po); //Convert temp. puffer oben to string aufzulösen: Wo finde ich diese Routine und Wo wird Sie geladen? ein Include von stdio.h kann ich nicht finden. Olaf
Hallo Olaf, vielen Dank für den Hinweis. Ich habe stdio.h hinzugefügt. Der Fehler entstand als ich die Lib vom Ursprungsprogramm extrahiert habe. Warum das Programm ohne Fehler trotzdem kompiliert muss ich bei Gelegenheit nochmal untersuchen. Vielen Dank nochmal! Beste Grüße, St.S.
Hallo Stefan, vielen Dank für die schnelle Antwort. Mein Compiler lief auch ohne Fehler durch, das hat mir gezeigt es muss doch irgendwo stdio geladen werden, was nicht der Fall war, warum das so ist kann ich mir nicht erklären. Danke für die Änderung Vielen Dank für die Library. Viele Grüße Olaf
Hallo Stefan, ich verwende deine DS18B20 Lib - Link: http://www.sicklinger.com/en/atmel-avr-atmega-ds18... Ich bin quasi blutiger Anfänger und bin zu blöd den Temperaturwert an mein Display zu übergeben. Mein genaues Problem habe ich unten im Code kommentiert. Bitte Helf mir. hier mein Main: #define F_CPU 16000000UL #include <avr/io.h> #include <util/delay.h> #include <string.h> #include "i2cmaster.h" #include "ds18x20lib.h" #include <stdio.h> #include <stdlib.h> //********************************************************************** ************************ // Display Ausgabe //********************************************************************** ************************ #define SLAVE_ADDRESS1 0xa0 void max6953_1(char cmd, char data) { i2c_start(SLAVE_ADDRESS1 | I2C_WRITE); i2c_write(cmd); i2c_write(data); i2c_stop(); } void writestr1(char *s) { char i; for (i = 0; i < 4; i++) max6953_1(0x20 | i, s[i]); } void main(void) { unsigned char temp_po_str[8]; float temp_po; ds1820_init(DS1820_pin_po); //Initialize DS1820 Lufttemp temp_po = ds1820_read_temp(DS1820_pin_po);//Get temperature from DS1820 Lufttemp sprintf(temp_po_str,"%.0f",temp_po); //Convert temp. Lufttemp to string unsigned char i; unsigned char a; char msg []= "Hallo"; Anstatt "Hallo" (Funktioniert, auch Zahlen gehen), wollte ich den Temperatur Wert Temp_po_str an das Char Array msg übergeben. Nur leider bekomme ich nur ein völliges Wirwar angezeigt. Ich möchte die Temperaturwerte auf eine Nachkommastelle und mit Vorleichen angezeigt bekommen, aber ohne das eigentliche Komma. z.B. +12,7°C = +127 oder -6,9°C = -69 Pins und Ports habe ich geändert und das Signal ist gut messbar auf der Datenleitung. Verwende DS18B20 und Atmega16 bei 16 MHz Habe auch 4,7k Pullus dran. Habe auch versucht temp_po_str direkt für msg einzusetzen auber da kommt auch nur müll raus. i2c_init(); if (i2c_start(SLAVE_ADDRESS2 | I2C_WRITE) != 0) { DDRB |= (1<<0); // falls Addresse 0 dann LED an PORTB.0 an. PORTB &= ~(1<<0); // erste LED } i2c_stop(); max6953_1(0x01, 0xFF); // Intensität 10 max6953_1(0x02, 0xFF); // Intensität 32 max6953_1(0x03, 0x01); // scan limit max6953_1(0x04, 0x01); // kein shutdown max6953_1(0x07, 0x00); // display test mode _delay_ms(2000); // 2 Sekunden warten for (i = 0x60; i < 0x63; i++) max6953_1(i, 0); // schreibe D0, D1 _delay_ms(4000); while(1) { if (++i > strlen(msg) - 4) i = 0; writestr1(msg + i); // schreibe vier Zeichen _delay_ms(250); } return 0; }
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.