mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Abfrage funktioniert nicht


Autor: Ronald E. (ronald_1)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Ronald E. (ronald_1)
Datum:

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

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
  {
// Wert 2 entspricht 1 Grad
// Wert 0 entspricht altem Verhalten (ohne Hysterese)
#define HYSTERESE 0 

    uint16_t Temperatur_Ist = 2*ist_digit + ist_decimal;

    if( Temperatur_Ist > Temperatur_Soll + HYSTERESE )
    {
      PORTD |= (1<<KUEHLEN_PIN);  //Kühlen einschalten 
      PORTD &= ~(1<<HEIZEN_PIN);  //Heizen ausschalten
    } 
    else if( Temperatur_Ist < Temperatur_Soll - HYSTERESE )
    {
      PORTD &= ~(1<<KUEHLEN_PIN); //Kühlen ausschalten
      PORTD |= (1<<HEIZEN_PIN);   //Heizen einschalten 
    } 
    else if( Temperatur_Ist == Temperatur_Soll )
    {
      PORTD &= ~(1<<KUEHLEN_PIN); //Kühlen ausschalten
      PORTD &= ~(1<<HEIZEN_PIN);  //Heizen ausschalten
    }
  }

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.

Autor: DirkB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
  soll_digit   = Temperatur_Soll / 2;
  soll_decimal = Temperatur_Soll % 2;

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

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ronald E. (ronald_1)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.