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
Ich muss mich korregieren. Die Abfrage scheint in beiden Richtungen unzuverlässig zu sein.
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.
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°.
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.
>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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.