Abfrage funktioniert nicht

OP #1972412
Lesenswert?

Hallo zusammen!

Wiedereinmal wende ich mich voller Hoffnung an dies Forum, mit folgendem 
Problem:
Ich versuche eine Abfrage hinzubekommen, doch leider ist irgentwo ein 
kleiner Fehler passiert.
Zur Aufgabe: Soll_Temperatur mit Ist_Temperatur verlgleichen und 
Aktionen ausführen. Leider passiert die "Heizung ausschalten" Aktion um 
0.5°C zu früh.
Ich seh einfach nicht wo der Fehler liegt (ich überprüfe immer alles mit 
LED`s). Im Anhang der Code. Ich bitte um Hilfe.

MfG Ronald
Angehängte Dateien:
Persönliche Seite #1972432
Lesenswert?

1
  {
2
// Wert 2 entspricht 1 Grad
3
// Wert 0 entspricht altem Verhalten (ohne Hysterese)
4
#define HYSTERESE 0 
5

6
    uint16_t Temperatur_Ist = 2*ist_digit + ist_decimal;
7

8
    if( Temperatur_Ist > Temperatur_Soll + HYSTERESE )
9
    {
10
      PORTD |= (1<<KUEHLEN_PIN);  //Kühlen einschalten 
11
      PORTD &= ~(1<<HEIZEN_PIN);  //Heizen ausschalten
12
    } 
13
    else if( Temperatur_Ist < Temperatur_Soll - HYSTERESE )
14
    {
15
      PORTD &= ~(1<<KUEHLEN_PIN); //Kühlen ausschalten
16
      PORTD |= (1<<HEIZEN_PIN);   //Heizen einschalten 
17
    } 
18
    else if( Temperatur_Ist == Temperatur_Soll )
19
    {
20
      PORTD &= ~(1<<KUEHLEN_PIN); //Kühlen ausschalten
21
      PORTD &= ~(1<<HEIZEN_PIN);  //Heizen ausschalten
22
    }
23
  }

Eine Hysterese wäre nicht schlecht. Ohne wird es zu schnellem Ein- und 
Ausschalten um den Vergleichswert kommen (Flattern)

Die Wahl von unsigned für die Temperatur kann kritisch ein. Im 
Reallife wurden schon negative (Celcius-)Temperaturen beobachtet.
Gast #1972435
Lesenswert?

1
  soll_digit   = Temperatur_Soll / 2;
2
  soll_decimal = Temperatur_Soll % 2;
3

4
  if((soll_digit + soll_decimal) < (ist_digit + ist_decimal))

Wenn Temperatur_Soll = 41 dann ist (soll_digit + soll_decimal) = 20+1 = 
21
Wenn Temperatur_Soll = 42 dann ist (soll_digit + soll_decimal) = 21+0 = 
21

Soll das so sein?
Du hast hier einen Fehler von 1° und suchst 0,5°.
OP #1972444
Lesenswert?

>Wenn Temperatur_Soll = 41 dann ist (soll_digit + soll_decimal) = 20+1 =
>21
>Wenn Temperatur_Soll = 42 dann ist (soll_digit + soll_decimal) = 21+0 =
>21

...vielen Dank! Das hab ich übersehen.
Eine Hysterese werd ich auch einbaun.
Werd mal ausprobieren ob es funktioniert.

Nochmals Danke!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren