INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
DS 2401 One Wire
18.05.2014, 19:56
Beitrag #1
DS 2401 One Wire
Hallo zusammen,

hat vllt. jemand schon Erfahrungen mit den One-Wire Bausteinen 'DS2401' gemacht?

Ich wollte mir welche bestellen um Schalt(er)-Zustände auszuwerten. Habe dazu viel im Internet gefunden, aber leider nicht viel für Arduino.
Von daher wollte ich mal die Frage öffentlich machen, ob jemand die Bausteine im Einsatz hat und von der Programmierung her keine größeren Schwirigkeiten anliegen, wie bei einem DS18B20.


Mit freundlichen Grüßen

Robin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.05.2014, 19:37
Beitrag #2
RE: DS 2401 One Wire
Hallo Robin,
Zitat:von der Programmierung her keine größeren Schwirigkeiten anliegen, wie bei einem DS18B20.
Naja, einen 1820 auszulesen ist ja nicht soooo schwer Smile
Wie man einen 2401 auslesen kann steht zB. hier: https://forum.sparkfun.com/viewtopic.php?f=32&t=34208
Sind eigentlich nur die Grundfunktionen der 1-Wire Library zu benutzen. Keine große Sache, denke ich Huh

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.05.2014, 11:44
Beitrag #3
RE: DS 2401 One Wire
Hallo Ricardo,

danke für deinen Link, jedoch kann ich doch damit nicht eindeutig die Sensoren zu ordnen oder hab ich was überlesen?

Der fragt doch alle am One-Wire Bus anliegenden Sensoren ab!?


Mit freundlichen Grüßen

Robin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.05.2014, 13:10
Beitrag #4
RE: DS 2401 One Wire
Hallo Robin,

zum zuordnen der Sensoren musst du erstmal die Deviceadressen abfragen.
Da die Adressen im 1-Wire in aller Regel das gleiche Format haben, kannst du das einfach mit dem Adressfinder machen:
Code:
#include <OneWire.h>
OneWire  ds(3);  // Pin für den 1-Wire Bus
void setup(void) {
  Serial.begin(9600);
  discoverOneWireDevices();
}
void discoverOneWireDevices(void) {
  byte i;
  byte present = 0;
  byte data[12];
  byte addr[8];

  Serial.print("Suche nach 1-Wire Geräten...\n\r");
  while (ds.search(addr)) {
    Serial.print("\n\rGefunden \'1-Wire\' Gerät mit Adresse:\n\r");
    for ( i = 0; i < 8; i++) {
      Serial.print("0x");
      if (addr[i] < 16) {
        Serial.print('0');
      }
      Serial.print(addr[i], HEX);
      if (i < 7) {
        Serial.print(", ");
      }
    }
    if ( OneWire::crc8( addr, 7) != addr[7]) {
      Serial.print("CRC nicht korrekt!\n");
      return;
    }
  }
  Serial.print("\n\r\n\rFertig!\r\n");
  ds.reset_search();
  return;
}
void loop(void) {
  // nothing to see here
}
Geräte gleichen Types haben an einer Stelle der Adresse alle den gleichen Wert.
Nachdem du die Adressen hast, kannst du diese in deinen Projektsketchen über DeviceAddress fest "verankern" und die ausgelesenen Werte Variablen zuweisen.

Wenn du eine ein-eindeutige Zuweisung machen möchtest, kannst du auch mehrere 1-Wire Buse an mehreren Pins betreiben und jedem Bus nur ein Device zuweisen.

Hope it helps! (Wenn nicht einfach nochmal fragen)

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.05.2014, 08:36
Beitrag #5
RE: DS 2401 One Wire
Hallo Ricardo,

danke, für die Information. Werde nun erstmal bestellen und dann kommen bestimmt noch Fragen. Vielen Dank und schönes Wochenende.


Mit freundlichen Grüßen

Robin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.06.2014, 13:20
Beitrag #6
RE: DS 2401 One Wire
Hallo,

habe jetzt die DS2401 bekommen und stehe vor dem Problem, dass ich keine vernünftige Lösung finde, die Chips abzufragen.

Ich habe mir die Sensoren-Adressen aufgeschrieben und wollte jetzt diese vergleichen. Beispielsweiße, ist der Sensor vorhanden -> digitalWrite(M1, HIGH) oder ist der Sensor nicht vorhanden -> digitalWrite(M1, LOW).

Hat vllt. einer einen Denkanstoss? Mit dem Tutorial von Sparkfun komme ich nicht weiter, da ich nur alle abfrage Sad

Schon mal Danke.


Mit freundlichen Grüßen

Robin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.06.2014, 14:25
Beitrag #7
RE: DS 2401 One Wire
Hi,
dazu müsstest Du die Sensoren-Adressen irgendwo im Coding hinterlegen (oder im EEPROM). Diese Adressen dann mit denen vergleichen, die die "discover..."-Routine findet.
Wo genau ist dabei das Problem?
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.06.2014, 14:43 (Dieser Beitrag wurde zuletzt bearbeitet: 16.06.2014 14:59 von robin.)
Beitrag #8
RE: DS 2401 One Wire
Hallo Thorsten,

also das ist mein Code für die Temperatur-Sensoren, da wollte ich jetzt am selben One-Wire Bus die DS2401 mit anbinden.

Code:
Code:
#include <DallasTemperature.h>
#include <Wire.h>
#include <OneWire.h>

OneWire ds(2);

DeviceAddress sensor1 = { 0x28, 0x70, 0x9C, 0xB, 0x5, 0x0, 0x0, 0xB1 };      // DS18B20
DeviceAddress sensor2 = { 0x28, 0x68, 0x1, 0xB, 0x5, 0x0, 0x0, 0x10 };       // DS18B20
DeviceAddress sensor21 = { 0x01, 0x00, 0x05, 0xE2, 0x16, 0x00, 0x00, 0x3A }; // DS2401
DeviceAddress sensor22 = { 0x01, 0xF8, 0x2B, 0xE2, 0x16, 0x00, 0x00, 0xB3 }; // DS2401


DallasTemperature sensors(&ds);
int numSensors;
float temp1,temp2;
int M1 = 0;
int M2 = 0;

void setup ()
{
  
  Serial.begin(9600);
  Serial.flush();
  
  delay(1000);
sensors.begin();
  Serial.println("Temperatur-Sensoren auf dem One-Wire-Bus werden ermitteln.");
  Serial.println();
  Serial.println("Bitte warten...");
  numSensors = sensors.getDeviceCount();
  if(numSensors > 0)
  {
    Serial.print(numSensors);
    Serial.println( " Temperatur-Sensoren gefunden.");
    Serial.println();
    sensors.setResolution(sensor1, 10);
    sensors.setResolution(sensor2, 10);
  }
  
  else
  {
    Serial.println("Keine Temperatur-Sensoren gefunden.");
  }
   discoverOneWireDevices();
}

void loop()
{
sensors.requestTemperatures();
  temp1 = sensors.getTempC(sensor1);
  temp2 = sensors.getTempC(sensor2);


  if (temp1 == -127.00) Serial.print("Fehler Sensor1");
  
  else
  {
    Serial.print("Temp1: ");
    Serial.println(temp1);
  }
  
  if (temp2 == -127.00) Serial.print("Fehler Sensor2");
  
  else
  {
    Serial.print("Temp2: ");
    Serial.println(temp2);
  }
delay(3000);

}

void discoverOneWireDevices() {
  byte i;
  byte present = 0;
  byte data[12];
  byte addr[8];

  Serial.print("Suche nach 1-Wire Geräten...\n\r");
  while (ds.search(addr)) {
    Serial.print("\n\rGefunden \'1-Wire\' Gerät mit Adresse:\n\r");
    for ( i = 0; i < 8; i++) {
      Serial.print("0x");
      if (addr[i] < 16) {
        Serial.print('0');
      }
      Serial.print(addr[i], HEX);
      if (i < 7) {
        Serial.print(", ");
      }
    }
    if ( OneWire::crc8( addr, 7) != addr[7]) {
      Serial.print("CRC nicht korrekt!\n");
      return;
    }
  }
  Serial.print("\n\r\n\rFertig!\r\n");
  ds.reset_search();
  return;
}

Ich dachte mir, dass ich über "!ds.search" evtl. die Adressen mit denen auf den Bus vergleichen kann, aber ich bekomme dann kein Ergebnis.

Der Vergleich zwischen den festgelegten Adressen und denen auf dem Bus scheitert.

Mit freundlichen Grüßen

Robin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  DUE und WIRE Stephan_56 9 988 14.03.2016 21:36
Letzter Beitrag: Stephan_56
  1-Wire gemischte Versorgung? rkuehle 0 901 02.03.2014 18:48
Letzter Beitrag: rkuehle

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste