mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik DS1620 mit Attiny2313


Autor: Daniel B. (inox5) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Wie schickt man dem DS1620 Daten? Mit dem UART oder?
Gibt es eine Library für die AVR? Hab nämnlich bisher nur Code für 8051 
gefunden.

MfG
Inox

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
UART um den Messwert an den PC weiterzugeben. Mit dem Sensor selbst 
redet der AVR über einen 1-Wire Bus, der beim AVR an einem nahezu 
beliebigen Pin eingerichtet werden kann.

In der Codesammlung finde ich auf die Schnelle auch nix. Such mal so 
hier im µC & Elektronik-Forum: 
http://www.mikrocontroller.net/forum/mikrocontroll...

2. Treffer ist die Frage von Autor Oliver P. Da sind Routinen für 
Atmega16 in C drin. Die sollten sich umschreiben lassen. Kannst du C?

Autor: Daniel B. (inox5) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
C kann ich einigermaßen. Laut Datenblatt ist das aber en 3-Wire Bus.

Das Problem bei Oliver P.s Code ist, dass er nicht seine 1620.h 
mitgeschickt hat. Weil sein Code schien ja den Sensor ordnungsgemäß 
lesen zu können.

MfG
Inox

Autor: Michael A. (aim)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast Recht, sorry!!!

Hier schon mal prophylaktisch für mich der Link zum Datenblatt, wenn 
weitere Fragen auftauchen oder Behauptungen zu machen sind ;-)
http://pdfserv.maxim-ic.com/en/ds/DS1620.pdf

In der ds1620.h stehen sicher die Definitionen drin, an welchem Port der 
Sensor hängt und welche Pins für welche Leitung benutzt wird. Es sollte 
nicht schwer sein, das selbst zu schreiben.

Also in der Art (Port und Pins je nach Hardwareaufbau)

#include <avr/io.h>        // für die Definitionen unten
// hier ggf. weitere Includes

#define DDR_DS1620   DDRB
#define PORT_DS1620  PORTB
#define PIN_DS1620   PINB
#define DQ_DS1620    PB5
#define CLK_DS1620   PB6
#define RES_DS1620   PB7

// Und hier die Prototypen der Funktionen in ds1620.c

// Und hier die Deklarationen für externe Variablen in ds1620.c


Autor: Daniel B. (inox5) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> In der ds1620.h stehen sicher die Definitionen drin, an welchem Port der
> Sensor hängt und welche Pins für welche Leitung benutzt wird. Es sollte
> nicht schwer sein, das selbst zu schreiben.
>
> Also in der Art (Port und Pins je nach Hardwareaufbau)

Schonmal ein wichtiger Hinweis!
>
>
> 
> #include <avr/io.h>        // für die Definitionen unten
> // hier ggf. weitere Includes
> 
> #define DDR_DS1620   DDRB
> #define PORT_DS1620  PORTB
> #define PIN_DS1620   PINB
> #define DQ_DS1620    PB5
> #define CLK_DS1620   PB6
> #define RES_DS1620   PB7
> 
> // Und hier die Prototypen der Funktionen in ds1620.c
Was ist das?
> 
> // Und hier die Deklarationen für externe Variablen in ds1620.c
Hier werden die Variablen deklariert ala int x, char y,...?
> 
> 

Hab noch nie eine Header-Datei geschrieben.
Aber vom Prinzip her muss ich nur die Header Datei anpassen und dann 
könnte ich den Code benutzen?

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Daniel B. wrote:

> Hab noch nie eine Header-Datei geschrieben.

Dann wird es Zeit! Braucht man doch bei C alle Nase lang, wenn man ein 
Programm in mehrere übersichtlichere Module aufteilt. Da gibt es auch 
einiges in der Artikelsammlung unter dem Stichwort [[Include-Files (C)]] 
und natürlich im AVR-GCC-Tutorial

Prototypen und extern Deklaration hat mal Karl heinz Buchegger 
ausführlich erklärt: Beitrag "Re: Den Befehl extern"

> Aber vom Prinzip her muss ich nur die Header Datei anpassen und dann
> könnte ich den Code benutzen?

Denke schon. Probier's und melde dich mit dem Projekt als Archiv im 
Anhang, wenn es hakt. Simulieren/Debuggen kann ich, nur den Sensor habe 
ich nicht da.

Autor: Daniel B. (inox5) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
da atmega32user so nett war mir die Header Datei zu schicken, muss ich 
jetzt nur noch die schon vorhandene Header-Datei anpassen.
:-)
#ifndef _DS1620_H
#define _DS1620_H


#include <avr/io.h>

#define DDR_DS1620 DDRA
#define PORT_DS1620 PORTA
#define PIN_DS1620 PINA
#define DQ_DS1620 PA2
#define CLK_DS1620 PA1
#define RES_DS1620 PA0

/*initialization --> data direction register*/
extern unsigned char ds1620_init (void);

extern unsigned char ds1620_read_temp (void);
extern unsigned char ds1620_read_temp_L(void);
extern unsigned char ds1620_read_temp_H(void);
int ollis_ds1620_get_temp (void);
/*the following functions are low level routines,
normally they should not be used directly*/

/*sends command to DS1620*/
void ds1620_cmd (unsigned char command);
/*sends byte to DS1620*/
void ds1620_put_byte (unsigned char byte);
/*reads byte from DS1620*/
unsigned char ds1620_get_byte (void);
/*write configuration-register*/
void ds1620_write_config (unsigned char byte);
/*read configuration-register*/
unsigned char ds1620_read_config (void);

unsigned char ds1620_get_byte_TH(void);
unsigned char ds1620_get_byte_TL(void);
void ds1620_write_TL (unsigned char byte);
void ds1620_write_TH (unsigned char byte);
void ds1620_put_byte_THL (unsigned char byte);
#endif

Das was dabei rauskommt poste ich dann wieder...

MfG
Inox

Autor: Daniel B. (inox5) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So das mit dem Anpassen ging ziemlich schnell :)

Das was rausgekommen sieht so aus:
#ifndef _DS1620_H
#define _DS1620_H


#include <avr/io.h>

#define DDR_DS1620 DDRB
#define PORT_DS1620 PORTB
#define PIN_DS1620 PINB
#define DQ_DS1620 PB2
#define CLK_DS1620 PB1
#define RES_DS1620 PB0

/*initialization --> data direction register*/
extern unsigned char ds1620_init (void);

extern unsigned char ds1620_read_temp (void);
extern unsigned char ds1620_read_temp_L(void);
extern unsigned char ds1620_read_temp_H(void);
int ollis_ds1620_get_temp (void);
/*the following functions are low level routines,
normally they should not be used directly*/

/*sends command to DS1620*/
void ds1620_cmd (unsigned char command);
/*sends byte to DS1620*/
void ds1620_put_byte (unsigned char byte);
/*reads byte from DS1620*/
unsigned char ds1620_get_byte (void);
/*write configuration-register*/
void ds1620_write_config (unsigned char byte);
/*read configuration-register*/
unsigned char ds1620_read_config (void);

unsigned char ds1620_get_byte_TH(void);
unsigned char ds1620_get_byte_TL(void);
void ds1620_write_TL (unsigned char byte);
void ds1620_write_TH (unsigned char byte);
void ds1620_put_byte_THL (unsigned char byte);
#endif

Kann das richtig sein?

MfG
Inox

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Frage wäre nur zu beantworten, wenn man den Schaltplan kennen würde. 
Also wo der DS1620 wie an den Attiny2313 angeschlossen ist. Das betrifft 
die #define Zeilen. In den anderen Zeilen sehe ich keine Kommentare von 
dir, dass du dort was geändert hast, hast du nicht, oder?

Autor: Daniel B. (inox5) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja so wie ich die #defines gemacht hab werd ich auch anschließen also:

DQ-->PB2
CLK-->PB1
RES-->PB0

Am Rest hab ich nichts geändert, weil das ja für alle AVR gleich ist, 
oder?

MfG
Inox

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, ist es.

Autor: Daniel B. (inox5) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit ds1620_get_temp() lese ich die unteren acht Bit des 
Temperaturregisters aus. Das bedeutet ich lese die ganzzahlige 
Temperatur aus, richtig?

Nur mal so nebenbei: Ich will den Senso für ein riesiges 
Outdoor-LED-Thermometer verwenden und deswegen kommt es mir nicht so auf 
die Genauigkeit an. Ich leg wahrscheinlich auch en Artikel im Wiki an, 
später.

MfG
Inox

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meine Ansicht zur Auswertung kannst du in der Diskussion mit Oliver P. 
nachlesen. Leider hat sich Oliver P. nicht mehr gemeldet und ich weiss 
nicht, ob das mit dem Kalibrieren und den Minusgraden und der 
Nachkommastelle geklappt hat.

Na ja, wenn du schon misst, kannst du es auch genau machen. Sonst 
könntest du ja was preiswerteres als den 6,10€ (Reichelt) bzw. 6,10€ 
(Conrad) teuren DS1620 benutzen ;-)

Autor: Daniel B. (inox5) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja also ich hab für meinen DS1620 2,5€ bezahlt?!
Ich bin einfach nur die Listen durchgegangen und da fand ich den^^

Nein aber ich nehme für eine LED-Reihe immer 2°C. Von daher muss es 
wirklich nicht genau sein und zudem hat der 2313 nicht gerade soviel 
Speicher.

Und bezüglich meiner Frage, da wollte ich mich nochmal vergewissern, 
weil ihr habt ja als erstes die Alarmtemperaturen ausgelesen....

MfG
Inox

PS: Ich hätt auch lieber einen AVR mit ADC genommen, aber ich hab hier 
zuhaus noch 3 2313 herumliegen gehabt.

Autor: Daniel B. (inox5) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab nochmal nachgeschlagen ich hab genau 3,5€ bezahlt. Immer noch 
ziemlich günstig im Vergleich zu den Rei/Con Preisen.

--->>> http://www.elpro.org/shop.php?p=DS%201620

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.