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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.