Abgastemperaturanzeige MAX6675 ab 665°Negativ werte

Hallo, ich habe mir eine Abgastemperatur anzeige gebaut mit einem Arduino Uno, einem 0.96" OLED Display, einem MAX6675 und einer K-Type Sonde.
Soweit funktioniert auch alles und ich bin der meinung die Werte stimmen, aber ab 665°C geht es mit -664°C absteigend weiter.
Hatte das schon mal jemand oder hat jemand eine Lösung dazu?

Gruß Lars

Hallo,
sieht so aus, als wenn bei einer Berechnung ein WerteBereich überschritten wird.
Aber kein Sketch, (in Codetags - Editor oben links </>), keine Datenblätter- so richtig nichts. Ich habnur mal so geraten.
Gruß und Spaß
Andreas

#include "U8glib.h"
#include <SPI.h>
#include <Wire.h>
#include "max6675.h"
U8GLIB_SSD1306_128X64 u8g(10, 9, 12, 11, 13);   // SW SPI Com: SCK = 10, MOSI = 9, CS = 12, A0 = 11, RST = 13

int currentTemp = 0;
String thisTemp = "";
int maxTemp = 0; // maximum temperature reached
int minTemp = 0; // minimum temperature reached
int pad = 0;
int thermoDO = 1;
int thermoCS = 2;
int thermoCLK = 3;
MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);
void draw(void) {
u8g.setFont(u8g_font_profont29);
u8g.drawStr(1, 25, "EGT");
u8g.setFont(u8g_font_10x20);
// show max temp reached
u8g.drawStr(50, 15, "Max");
if (maxTemp <= currentTemp) {
maxTemp = currentTemp;
}
thisTemp = String(maxTemp);
thisTemp = thisTemp + "\260C";
const char* maxTempC = (const char*) thisTemp.c_str();
u8g.drawStr(90, 15, maxTempC);
// show the min temp reached
u8g.drawStr(50, 30, "Min");
if (minTemp >= currentTemp) {
minTemp = currentTemp;
}
thisTemp = String(minTemp);
thisTemp = thisTemp + "\260C";
const char* minTempC = (const char*) thisTemp.c_str();
u8g.drawStr(90, 30, minTempC);
u8g.setFont(u8g_font_profont29);
if (currentTemp > 99) {
pad = 2;
}
if (currentTemp > 9 && currentTemp < 100) {
pad = 10;
}
if (currentTemp < 10) {
pad = 18;
}
thisTemp = String(currentTemp);
thisTemp = thisTemp + "\260C";
const char* newDispC = (const char*) thisTemp.c_str();
u8g.drawStr(pad, 55, newDispC);
}
void setup(void) {
Serial.begin(9600);
Wire.begin();
delay(1000);
// u8g.setRot90();
delay(500); // wait for MAX chip to stabilise
currentTemp = thermocouple.readCelsius();
minTemp = int(thermocouple.readCelsius());
maxTemp = int(thermocouple.readCelsius());
}
void loop(void) {
currentTemp = 0;
for (int f = 0; f < 50; f++) {
currentTemp = thermocouple.readCelsius() + currentTemp;
}
currentTemp = currentTemp / 50; // averages out 50 readings
// picture loop
u8g.firstPage();
do {
draw();
} while ( u8g.nextPage() );
// rebuild the picture after some delay
delay(250);
}

Hallo, hab hier mal den Code angehängt :-X

Hallo,
ich würde aus den ganzen "int" mal "double" machen, weiß der Teufel...

z.B.

"int currentTemp = 0;" in "double currentTemp = 0;

Gruß und Spaß
Andreas
P.S. alles richtig verdrahtet?

Okay danke probiere ich morgen mal aus.
Ja ist alles richtig verdrahtet funktioniert auch alles super nur eben bei der Überschreitung nicht.

Gruß

ich würde aus den ganzen "int" mal "double" machen, weiß der Teufel...

Bitte long, nicht double.

Oder habe ich was übersehen?

Hallo,
in die Lib- in die ich geschaut habe, ist es "float" und "double".
Vielleich hat er ja mal einen Link zu seiner?
Gruß und Spaß
Andreas

in die Lib- in die ich geschaut habe, ist es "float" und "double".

Float und Double ist auf AVRs das gleiche.
Der UNO gehört dazu.

Aber int zu float ist schon eine andere Nummer...
(habe mir die Lib nicht angesehen)

Wie auch immer...
Mit debuggen sollte man die Stelle finden, an der es schief läuft.

Hallo,
jetzt wo Du es sagst...dann macht auch Dein "long" Sinn.
Wir schau´n mal wie weit er kommt... wenn´s ein SchneeFlug ist, dann machen MinusGrade ja auch Sinn. :wink:
Gruß und Spaß
Andreas

for (int f = 0; f < 50; f++) {
currentTemp = thermocouple.readCelsius() + currentTemp;
}
currentTemp = currentTemp / 50; // averages out 50 readings

Du summierst 50 Werte für den Mittelwert in einer signed int Variable. Die Variable geht bis 32767 dann fängt sie mit -32768 wieder an. 32767 / 50 sind halt ca 655

Benutz ein unsgned int, ein unsigned long oder nimm weniger Werte für den Mittelwert oder verwende einen gleitenden Mittelwert.

Grüße Uwe

SkobyMobil:
Hallo,
jetzt wo Du es sagst...dann macht auch Dein "long" Sinn.
Wir schau´n mal wie weit er kommt... wenn´s ein SchneeFlug ist, dann machen MinusGrade ja auch Sinn. :wink:
Gruß und Spaß
Andreas

Schade, der MAX6675 mißt keine Negativgrade. Dazu braucht er den MAX31655 :wink: :wink: :wink:

Hallo,
das unterscheidet natürlich wieder einen "Brattain Member" vom Rest der kleinen ArduinoWelt.
Gruß und Spaß
Andreas

keine Negativgrade

Wenn gar keine negativen Werte auftreten können, dann ist es ja geradezu absurd einen vorzeichenbehafteten Datentype zu verwenden.

SkobyMobil:
Hallo,
das unterscheidet natürlich wieder einen "Brattain Member" vom Rest der kleinen ArduinoWelt.
Gruß und Spaß
Andreas

Muß mal schauen was nach Brattain kommt Bis über 80000 ist noch Brattain :wink: :wink: :wink: :wink:
Faule Ausreden. Ihr hattet nur keine Lust den Sketch anzuschauen. :wink: :wink: :wink: :wink: :wink:

Grüße Uwe

Hallo,
als Sterblicher komme ich aber an den Schlüssel nicht dran. Wo stehen denn die 80.000 ?
Gruß und Spaß
Andreas

https://forum.arduino.cc/index.php?action=mlist;sort=posts;start=0;desc

uwefed:

for (int f = 0; f < 50; f++) {

currentTemp = thermocouple.readCelsius() + currentTemp;
}
currentTemp = currentTemp / 50; // averages out 50 readings




Du summierst 50 Werte für den Mittelwert in einer signed int Variable. Die Variable geht bis 32767 dann fängt sie mit -32768 wieder an. 32767 / 50 sind halt ca 655

Benutz ein unsgned int, ein unsigned long oder nimm weniger Werte für den Mittelwert oder verwende einen gleitenden Mittelwert.

Grüße Uwe

Dankeschön :slight_smile:

ich probiere es später aus und gebe rückmeldung.
Gruß

LARzzz:
aber ab 665°C geht es mit -664°C absteigend weiter.

SkobyMobil:
wenn´s ein SchneeFlug ist, dann machen MinusGrade ja auch Sinn. :wink:

Na ja, Celsius Grade gehen nur bis -273,15, danach ist Sense.

Whandall:
Na ja, Celsius Grade gehen nur bis -273,15, danach ist Sense.

Sei nicht so kleinlich ... :wink: :wink: ;D 8) ;D :smiley: :sunglasses:

SkobyMobil:
wenn´s ein Schneepflug ist, dann machen MinusGrade ja auch Sinn. :wink:

In den Abgasen? Dat wäre eine Sensation!

Übrigens auch -665°C würde die Schlagzeilen in "Nature" machen und dir ein Nobelpreis sicherstellen.