Arduino Mini Pro mit DS1621 Probleme

Hallo zusammen,

da ich totaler Anfänger bin was Arduino und Elektrotechnik angeht, wäre es super, wenn die Antworten möglichst einfach beschrieben sind :slight_smile: Falls ich mich falsch ausdrücke, bitte korrigiert mich, damit ich das richtig lerne!

Also ich möchte eigentlich nur mein Arduino mit dem DS1621 Temperatursensor verbinden. Ich habe im Internet in einem Forum bereits das passende Programm gefunden aber ich habe noch ein wenig Probleme mit der Verkabelung.

Der DS1621 hat 8 Pins (SDA,SCL,Tout,GND,A2,A1,A0,VDD)
Als erstes habe ich vom Mini Arduino Pro VCC -> VDD und GND -> GND angeschlossen. Ich denke das sollte doch schon mal richtig sein.
In dem Programm steht :

// SDA pin is Analog4
// SCL pin is Analog5
// DS1621 has A2, A1, and A0 pins connected to GND

Da kommt schon meine 1. Frage. Auf dem Board gibt es A0-A3 und laut Spezifikation des Arduino-Boards sind das Analog-Inputs. Müssen die wirklich an analog angeschlossen werden? Müssen die nicht an digital angeschlossen werden?

Auf dem Board gibt es noch 2-13 Anschlüsse, daher habe ich SDA->4 und SCL -> 5 angeschlossen.

Nun steht dort noch das ich vom Chip A0,A1 und A2 an GND anschließen soll. Ich habe an alle drei Pins ein Kabel angelötet und die andere Seite zusammen gelötet. An diesen Dreier-Block habe ich dann noch ein Kabel zum GND Pin gelötet.

Da weder etwas in Rauch aufgegangen ist noch irgendwas stinkt, die Ausgabe aber immer 0 ist, würde ich vermuten, dass etwas falsch angeschlossen ist. Kann mir da evt jemand helfen?

Außerdem habe ich noch die Frage wie das mit der Adressierung funktioniert? In dem DS1621 Beispiel steht :

#define DEV_ID 0x90 >> 1                    // shift required by wire.h


void setup()
{
 Serial.begin(9600);

 Wire.begin();
 Wire.beginTransmission(DEV_ID);           // connect to DS1621 (#0)
 Wire.send(0xAC);                          // Access Config
 Wire.send(0x02);                          // set for continuous conversion
 Wire.beginTransmission(DEV_ID);           // restart
 Wire.send(0xEE);                          // start conversions
 Wire.endTransmission();
}


void loop()
{
 int tempC = 0;
 int tempF = 0;

 delay(1000);                              // give time for measurement
 Wire.beginTransmission(DEV_ID);
 Wire.send(0xAA);                          // read temperature
 Wire.endTransmission();
 Wire.requestFrom(DEV_ID, 1);              // request one byte from DS1621
 tempC = Wire.receive();                   // get whole degrees reading
 tempF = tempC * 9 / 5 + 32;               // convert to Fahrenheit

 Serial.print(tempC);
 Serial.print(" / ");
 Serial.println(tempF);
}

0x90 und 0xAA etc. Wo steht, an welchen Port er das Signal schickt und wo er das Ergebnis her bekommt? Gibt es dafür irgendwelche Anleitungen wie das funktioniert? Englisch wäre auch okay. Das 0x90 etc Hex-Werte sind ist mir klar, aber woher kenne ich die?

Vielen vielen Dank und viele Grüße und ein schönes Wochenende,
Hauke

Hallo Hauke

Da stellt ich mir doch als Erstes gleich mal die Frage, warum Du als Anfänger es nicht einfach mal so machst wie es beschrieben ist? :wink:

Der Temperatursensor wird über den I²C Bus angesprochen (Zwei Leitungen: SDA und SCL). Der Arduino unterstützt I²C direkt, die Anschlüsse dafür sind fest mit Analog4 und Analog5 verdrahtet. Du musst also diese beiden Pins verwenden.
Analog0-5 können übrigens auch als ganz normale digitale Pins verwendet werden.
Die Frage bezüglich welcher Port hat sich damit wohl auch erledigt.

Gruß
Manfred

Hi Manfred,

Ich habe mir gerade das Board noch einmal genauer angesehen und habe A4 und A5 gefunden. Die sind nicht in der Reihe der anderen Analog-Ports, sondern etwas versetzt dahinter :slight_smile:
Hätte ich die vom Anfang an gesehen, wäre glaube ich die Frage überflüssig. Aber erstmal will ich das versuchen und dann melde ich Erfolg oder Misserfolg.

Vielen Dank und viele Grüße,
Hauke

Hi Manfred,

vielen Dank. Nun funktioniert es :slight_smile: 22 Grad hier im Zimmer.

Danke und bis bald,

Hauke

Hallo Aferamoon
Zusatzinfos:
I2C Bausteine werden ueber eine 7-bitige Adresse identifiziert. Damit mehrere gleiche Bausteine verwendet werden koennen, sind die unteren 3 Bits der Adresse nicht fix programmiert sondern als Eingaenge am IC herausgefuehrt. So kannst Du 8 gleiche IC gleichzeitig verwenden.

A0, A1 und A2 musst Du deshalb auf Masse legen und kannst ihn mit der Adresse 0x48 ansprechen.
Der moegliche Adressbereich des DS1621 ist von 0x48 bis 0x4F je nach Logikpegel an A0 bis A2.

#define DEV_ID 0x90 >> 1 //(wird nach dem Shift 0x48)
...
Wire.beginTransmission(DEV_ID);

Das Datenblatt sagt:
SLAVE ADDRESS
A control byte is the first byte received following the START condition from the master device. The
control byte consists of a 4-bit control code; for the DS1621, this is set as 1001 binary for read and write
operations. The next 3 bits of the control byte are the device select bits (A2, A1, A0). They are used by
the master device to select which of eight devices are to be accessed. These bits are in effect the 3 least
significant bits of the slave address.

Gruesse Uwe