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:
1 | #include <Wire.h>
|
2 |
|
3 | #define DS1621_ADDR 0x48
|
4 | #define CMD_START_CONVERT 0xEE
|
5 | #define CMD_READ_TEMP 0xAA
|
6 | #define CMD_ACCESS_CONFIG 0xAC
|
7 |
|
8 |
|
9 | void setup() {
|
10 | // put your setup code here, to run once:
|
11 | pinMode(4, INPUT);
|
12 | Serial.begin(9600);
|
13 | Wire.begin();
|
14 |
|
15 | Serial.println("DS1621 Temperaturmessung startet");
|
16 |
|
17 | Wire.beginTransmission(DS1621_ADDR);
|
18 | Wire.write(CMD_START_CONVERT);
|
19 | Wire.endTransmission();
|
20 | }
|
21 |
|
22 | void loop() {
|
23 | // put your main code here, to run repeatedly:
|
24 | float temp = readTemperature();
|
25 | int wert = digitalRead(4);
|
26 |
|
27 | Serial.print("Temperatur: ");
|
28 | Serial.print(temp);
|
29 | Serial.println(" °C");
|
30 | }
|
31 |
|
32 | float readTemperature(){
|
33 | int temp_high = 0;
|
34 | int temp_low = 0;
|
35 |
|
36 | Wire.beginTransmission(DS1621_ADDR);
|
37 | Wire.write(CMD_READ_TEMP);
|
38 | Wire.endTransmission();
|
39 |
|
40 | Wire.requestFrom(DS1621_ADDR, 2);
|
41 |
|
42 | if (Wire.available()>=2)
|
43 | {
|
44 | temp_high= Wire.read();
|
45 | temp_low= Wire.read();
|
46 | }
|
47 |
|
48 | float temperature = temp_high;
|
49 |
|
50 | return temperature;
|
51 | }
|
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!