mikrocontroller.net

Forum: Projekte & Code DS18x20 lib für AVR


Autor: St. S. (clean-energy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

unter 
http://sicklinger.com/de/microcontroller-avr/58-at... 
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ß,

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Tut mir leid, du hast das Limit an Downloads, für diese Datei, 
erreicht"

Wenig hilfreich...

Oliver

Autor: St. S. (clean-energy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Oliver,

vielen Dank für den Hinweis!

Jetzt müsste es wieder funktionieren.

Vielen Dank nochmal!

Grüße,

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm,

da kommt jetzt eine 11 byte "grosse" Datei. Das wird wohl nicht alles 
sein, oder?

Oliver

Autor: St. S. (clean-energy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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,

Autor: Pete K. (pete77)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: St. S. (clean-energy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
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.

Autor: St. S. (clean-energy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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.

Autor: Tom (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
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.

Autor: St. S. (clean-energy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: Olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: St. S. (clean-energy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Björn Hiekel (firefunk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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;
}

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.