Forum: Mikrocontroller und Digitale Elektronik DS1621 mit Arduino Uno in SimulIDE 1.1.0-SR2 at Rev 260312


von Peter (david_h88)


Angehängte Dateien:

Lesenswert?

Hey Leute,

ich möhte jetzt einen Sensor mit meinen Arduino Uno in der SimulIDE 
verbinden. Ausgwählt habe ich den DS1621. Zur Schaltplan- und 
Firmwareerstellung habe ich die dazugehörigen Datenblätter gelesen und 
mir  von ChatGPT zur Überprüfung einen Entwurf zeichnen/programmieren 
lassen. Dieser ist im Bild 1 dargestellt. Darin ist zu erkennen, dass 
die Adresse des Sensor's (Slaves) über A0, A1 und A2 vorgegeben wird. 
Zur Kommunikation über I²C ist Pin3 und Pin4 mit SDA und SCL verbunden, 
wobei in beide Leitungen ChatGPT zwei PullUp-Widerstände gezeichnet hat 
(keine Ahnung, woher es diese Information hat, aber in den Datenblättern 
habe ich nichts dazu gefunden??). Der ermittelte Temperaturwert Tout 
wird ja über 2 Bytes dargestellt und habe ich demzufolge den digitalen 
Eingangspin 4 zugeführt. Ist das so richtig?
Die Firmware sieht wie folgt aus:

#include <Wire.h>

#define DS1621_ADDR 0x48
#define CMD_START_CONVERT 0xEE
#define CMD_READ_TEMP 0xAA
#define CMD_ACCESS_CONFIG 0xAC


void setup() {
  // put your setup code here, to run once:
  pinMode(4, INPUT);
  Serial.begin(9600);
  Wire.begin();

  Serial.println("DS1621 Temperaturmessung startet");

  Wire.beginTransmission(DS1621_ADDR);
  Wire.write(CMD_START_CONVERT);
  Wire.endTransmission();
}

void loop() {
  // put your main code here, to run repeatedly:
  float temp = readTemperature();
  int wert = digitalRead(4);

  Serial.print("Temperatur: ");
  Serial.print(temp);
  Serial.println("   °C");
}

float readTemperature(){
  int temp_high = 0;
  int temp_low = 0;

  Wire.beginTransmission(DS1621_ADDR);
  Wire.write(CMD_READ_TEMP);
  Wire.endTransmission();

  Wire.requestFrom(DS1621_ADDR, 2);

  if (Wire.available()>=2)
  {
    temp_high= Wire.read();
    temp_low= Wire.read();
  }

  float temperature = temp_high;

  return temperature;
}

Stimmt diese oder sind die von ChatGPT generierten Lösungen mit Vorsicht 
zu genießen? Kann ich die Aktualwerte aus der Firmware beim Laufen der 
Simulation irgendwie abfragen? In SimulIDE/Arduino IDE habe ich keinen 
Reiter dazu gefunden? Vielen Dank euch!
von Hans W. (hanswieland)


Lesenswert?

Peter schrieb:
> Stimmt diese

Probiere es aus, dann weisst du es.

> oder sind die von ChatGPT generierten Lösungen mit Vorsicht
> zu genießen?

Immer: ja. Auf die Ausgaben von LLM ist kein Verlass.

Vin soll mit Sicherheit nicht mit GND verbunden werden. Das ergibt 
keinen Sinn.

> Ausgwählt habe ich den DS1621.

Der I2C Bus kann ohne Pull-Up Widerstände nicht funktionieren. 100 Ohm 
ist falsch. 1-3 mA sollen bei Low Pegel fließen, also eher etwa 3 kOhm 
Vermutlich verwendest du ein Modul das neben dem Chip auch Widerstände 
enthält.
: Bearbeitet durch User
von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Peter schrieb:
> Zur Kommunikation über I²C ist Pin3 und Pin4 mit SDA und SCL verbunden,

I2C liegt beim UNO auf A4 und A5, nicht 3 und 4
von Hans W. (hanswieland)


Lesenswert?

Zwieschen die Ausgaben würde ich eine Pause einbauen.

Die Werte in den Variablen "wert" und "temp_low" werden nicht genutzt. 
Aktiviere alle Compiler Warnungen, der meldet sowas meistens.
: Bearbeitet durch User
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
Noch kein Account? Hier anmelden.