Probleme beim Bit-Löschen

Gast #4522068
Lesenswert?

Hallo zusammen,

leider komme ich bei meinen kleinen Anfänger Projekt zur Zeit nicht
weiter, bin mir aber sicher, das ich mal wieder den Wald vor Bäumen 
nicht sehe.

Möchte einen Ausgang setzen bis eine gewisse Temperatur erreicht ist, 
und ihn dann wieder löschen bzw. ausschalten.

Bisher dachte ich mir das so:

 if ((ist_temp+5)<=soll_temp)
   {
     PORTD|=(1<<PD7);  //Heizelement ein
   }

    else if ((ist_temp)>=soll_temp)
    {
     PORTD&=~(1<<PD7);  //Heizelement aus
    }

Nun schaltet das Element zwar ein, jedoch nicht wieder ab wenn der Wert 
erreicht ist?


Jemand eine Idee

Gruß
#4522120
Lesenswert?

@ Socke (Gast)

>Bisher dachte ich mir das so:

Bitte nicht soviel um die Ecke denken, das bringt nix. Schreib DIREKT 
hin was gemeint ist. Eher so. Und wenn man das mit ein paar #define 
macht, ist es sogar sehr direkt und sehr einfach lesbar. Siehe auch

Strukturierte Programmierung auf Mikrocontrollern

1
#define HEIZER_EIN PORTD |= (1<<PD7)
2
#define HEIZER_AUS PORTD &= ~(1<<PD7)
3

4
if(ist_temp <= (soll_temp-5)) {
5
  HEIZER_EIN;
6
} else if(ist_temp >= soll_temp) {
7
  HEIZER_AUS;
8
}

>Nun schaltet das Element zwar ein, jedoch nicht wieder ab wenn der Wert
>erreicht ist?

Hmm, an sich ist dein Code korrekt, der Fehler liegt woanders. Woher 
weißt du, dass ist_temp >= soll_temp ist?
Gast #4522131
Lesenswert?

Die Solltemperaturen lege ich so fest:

soll_temp=40;

Die Temperaturwerte stammen von einen DS18B20, die passen auch, diese 
habe ich mit einem zweiten Thermometer kontrolliert. Zusätzlich auch 
noch einmal separat auf einem Display ausgeben lassen um zu 
kontrollieren ob die Werte nach der Wandlung von float in ganze Zahlen 
immer noch passt.

Gruß
Gast #4522291
Lesenswert?

Socke schrieb:
> Zusätzlich auch noch einmal separat auf einem Display ausgeben lassen
> um zu kontrollieren ob die Werte nach der Wandlung von float in
> ganze Zahlen immer noch passt.

Die Dynamik eines Float-Datentyps für eine Temperaturangabe bei einem 
Sensor, der allenfalls zwischen -55 und +125°C arbeite, 9 Bit liefert 
und damit weder im mK- noch im GK-Bereich misst, ist dem Problem wohl 
nicht ganz angemessen. Aber eine Fixkommarechnung zu verwenden und für 
die Anzeige das Komma/Punkt an geeigneter Stelle auszugeben, ist wohl 
out. Irgendwie muss der Prozessor schließlich beschäftigt werden.
#4522332
Lesenswert?

@Socke (Gast)
>    Code.txt (2,03 KB, 0 Downloads)

>Hier mal der Codeausschnitt worauf es eigentlich ankommen sollte.

Und wenn du das code.c genannt hättest, würden wir alle schönes 
Syntax-Highlighting genießen können. Hmm.

Du rechnest mit int, nicht float.

>   if (restzeit<105&restzeit>90)//Solange Restzeit kleiner 105 und

Fehler. Da muss ein && hin, KEIN &!

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