Forum: Mikrocontroller und Digitale Elektronik Abfrage funktioniert nicht


von Ronald E. (ronald_1)


Angehängte Dateien:

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

von Ronald E. (ronald_1)


Lesenswert?

Ich muss mich korregieren. Die Abfrage scheint in beiden Richtungen 
unzuverlässig zu sein.

von Stefan B. (stefan) Benutzerseite


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.

von DirkB (Gast)


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°.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Ronald, statt nur auf die LED zu achten, kannst du doch die IST 
Temperatur auf das LCD ausgeben.

Wenn dir der Platz für SOLL und IST auf dem LCD fehlt, würde ich bei der 
Entwicklung eher SOLL weglassen, denn das kennst du aus der Source. 
Später wenn du SOLL mit den Tasten veränderst, dann die Source wieder 
umstellen.

von Ronald E. (ronald_1)


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!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.