You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
If you are experiencing trouble but not certain of the cause, or need help using this code, ask on the appropriate forum. This is not the place to ask for support or help, even directly related to this code. Only use this form you are certain you have discovered a defect in this code!
Please verify the problem occurs when using the very latest version, using the newest version of Arduino and any other related software.
Describe your problem.
There are intermittent CRC errors when running the OneWire DS18S20, DS18B20, and DS1822 Temperature Example on these boards. When running on an Arduino UNO R3, there are no CRC errors.
Board : Arduino UNO R4 (both Minima and WIFI)
Shields / modules used : None
Arduino IDE version 2.1.1
Teensyduino version (if using Teensy)
Version info & package name (from Tools > Boards > Board Manager): Arduino UNO R4 Boards version 1.0.2
Operating system & version: Ubuntu 23.04
Any other software or hardware? None.
Arduino Sketch
#include<OneWire.h>// OneWire DS18S20, DS18B20, DS1822 Temperature Example//// http://www.pjrc.com/teensy/td_libs_OneWire.html//// The DallasTemperature library can do all this work for you!// https://github.com/milesburton/Arduino-Temperature-Control-Library
OneWire ds(10); // on pin 10 (a 4.7K resistor is necessary)voidsetup(void) {
Serial.begin(9600);
}
voidloop(void) {
byte i;
byte present = 0;
byte type_s;
byte data[9];
byte addr[8];
float celsius, fahrenheit;
if ( !ds.search(addr)) {
Serial.println("No more addresses.");
Serial.println();
ds.reset_search();
delay(250);
return;
}
Serial.print("ROM =");
for( i = 0; i < 8; i++) {
Serial.write('');
Serial.print(addr[i], HEX);
}
if (OneWire::crc8(addr, 7) != addr[7]) {
Serial.println("CRC is not valid!");
return;
}
Serial.println();
// the first ROM byte indicates which chipswitch (addr[0]) {
case0x10:
Serial.println(" Chip = DS18S20"); // or old DS1820
type_s = 1;
break;
case0x28:
Serial.println(" Chip = DS18B20");
type_s = 0;
break;
case0x22:
Serial.println(" Chip = DS1822");
type_s = 0;
break;
default:
Serial.println("Device is not a DS18x20 family device.");
return;
}
ds.reset();
ds.select(addr);
ds.write(0x44, 1); // start conversion, with parasite power on at the enddelay(1000); // maybe 750ms is enough, maybe not// we might do a ds.depower() here, but the reset will take care of it.
present = ds.reset();
ds.select(addr);
ds.write(0xBE); // Read Scratchpad
Serial.print(" Data = ");
Serial.print(present, HEX);
Serial.print("");
for ( i = 0; i < 9; i++) { // we need 9 bytes
data[i] = ds.read();
Serial.print(data[i], HEX);
Serial.print("");
}
Serial.print(" CRC=");
Serial.print(OneWire::crc8(data, 8), HEX);
Serial.println();
// Convert the data to actual temperature// because the result is a 16 bit signed integer, it should// be stored to an "int16_t" type, which is always 16 bits// even when compiled on a 32 bit processor.int16_t raw = (data[1] << 8) | data[0];
if (type_s) {
raw = raw << 3; // 9 bit resolution defaultif (data[7] == 0x10) {
// "count remain" gives full 12 bit resolution
raw = (raw & 0xFFF0) + 12 - data[6];
}
} else {
byte cfg = (data[4] & 0x60);
// at lower res, the low bits are undefined, so let's zero themif (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 mselseif (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 mselseif (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms//// default is 12 bit resolution, 750 ms conversion time
}
celsius = (float)raw / 16.0;
fahrenheit = celsius * 1.8 + 32.0;
Serial.print(" Temperature = ");
Serial.print(celsius);
Serial.print(" Celsius, ");
Serial.print(fahrenheit);
Serial.println(" Fahrenheit");
}
Errors or Incorrect Output
If you see any errors or incorrect output, please show it here. Please use copy & paste to give an exact copy of the message. Details matter, so please show (not merely describe) the actual message or error exactly as it appears.
ROM = 28 3D 47 C9 63 20 1 75
Chip = DS18B20
Data = 1 6A 1 4B 46 7F FF C 10 B8 CRC=B8
Temperature = 22.62 Celsius, 72.72 Fahrenheit
No more addresses.
ROM = 28 3D 47 C9 63 20 1 75
Chip = DS18B20
Data = 1 50 5 4B 46 7F FF C 10 1C CRC=1C
Temperature = 85.00 Celsius, 185.00 Fahrenheit
No more addresses.
The text was updated successfully, but these errors were encountered:
Please use this form only to report code defects or bugs.
For any question, even questions directly pertaining to this code, post your question on the forums related to the board you are using.
Arduino: forum.arduino.cc
Teensy: forum.pjrc.com
ESP8266: www.esp8266.com
ESP32: www.esp32.com
Adafruit Feather/Metro/Trinket: forums.adafruit.com
Particle Photon: community.particle.io
If you are experiencing trouble but not certain of the cause, or need help using this code, ask on the appropriate forum. This is not the place to ask for support or help, even directly related to this code. Only use this form you are certain you have discovered a defect in this code!
Please verify the problem occurs when using the very latest version, using the newest version of Arduino and any other related software.
----------------------------- Remove above -----------------------------
Description
Describe your problem.
There are intermittent CRC errors when running the OneWire DS18S20, DS18B20, and DS1822 Temperature Example on these boards. When running on an Arduino UNO R3, there are no CRC errors.
Steps To Reproduce Problem
Run the temperature example.
Hardware & Software
Board : Arduino UNO R4 (both Minima and WIFI)
Shields / modules used : None
Arduino IDE version 2.1.1
Teensyduino version (if using Teensy)
Version info & package name (from Tools > Boards > Board Manager): Arduino UNO R4 Boards version 1.0.2
Operating system & version: Ubuntu 23.04
Any other software or hardware? None.
Arduino Sketch
Errors or Incorrect Output
If you see any errors or incorrect output, please show it here. Please use copy & paste to give an exact copy of the message. Details matter, so please show (not merely describe) the actual message or error exactly as it appears.
ROM = 28 3D 47 C9 63 20 1 75
Chip = DS18B20
Data = 1 6A 1 4B 46 7F FF C 10 B8 CRC=B8
Temperature = 22.62 Celsius, 72.72 Fahrenheit
No more addresses.
ROM = 28 3D 47 C9 63 20 1 75
Chip = DS18B20
Data = 1 50 5 4B 46 7F FF C 10 1C CRC=1C
Temperature = 85.00 Celsius, 185.00 Fahrenheit
No more addresses.
The text was updated successfully, but these errors were encountered: