Forum: Mikrocontroller und Digitale Elektronik Fehler Temperatur kleinster und größter Wert (Bascom)


von Conrad (Gast)


Lesenswert?

Hallo zusammen,
bei mir taucht leider immer wieder ein Fehler auf, den ich nicht finden 
kann. Vielleicht kann mir hier ja jemand helfen.
Auf meinem LCD wird die aktuelle Temperatur angezeigt. Zusätzlich habe 
ich das Programm so programmiert, dass jeweils der kleinste und der 
größte gemessene Wert als Minimal- bzw. Maximaltemperatur in der zweiten 
Zeile meines Displays angezeigt wird. Mit dem größten Wert klappt dies 
auch einwandfrei, aber beim kleinsten wird immer 0°C angezeigt, obwohl 
dieser Wert nie gemessen wurde. Kann den Fehler jedoch nicht entdecken.
Meiner Meinung nach habe ich nämlich bei der Minimal und 
Maximaltemperatur dasselbe entsprechend den Werten programmiert. Wo ist 
der Fehler?


  ' Vorlage-Datei für Attiny-Platine
'**********************************************************
$regfile = "attiny2313.dat"                                 'Attiny2313
$crystal = 4000000                                          '4 MHz
$baud = 9600                                                ' Baudrate 
RS232

'******************* Deklarationen ************************
   Config Lcd = 16 * 2
   Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , 
Db7 = Portb.0 , E = Portb.4 , Rs = Portb.6
   Config Lcdbus = 4
   Initlcd
   Cls
Config Scl = Portb.5
Config Sda = Portb.7

Dim Aktuell As Byte
Dim Mindest As Byte
Dim Maximal As Byte

Dim X As Byte
Dim Y As Byte
'****************** Initialisierung ***********************

Ddrb = &B11111111                                           'Port B als 
Ausgangsport
Ddrd = &B01110000                                           'D4, D5, D6 
als Ausgang; Rest als Eingang
Portd = &B10001111                                          'Eingänge 
auf high legen




'******************** Hauptprogramm ***********************

  Do

    Deflcdchar Print , 32 , 3 , 3 , 32 , 32 , 32 , 32 , 32  ' replace ? 
with number (0-7)
I2cstart
I2cwbyte 145
I2crbyte Aktuell , Nack
I2cstop
Locate 1 , 1


Lcd Aktuell
      Lcd Chr(0)
      Lcd "C"
   Locate 1 , 0



 I2cstart
I2cwbyte 145
I2crbyte Aktuell , Nack
I2cstop


Locate 2 , 1

If Mindest > Aktuell Then
Mindest = Aktuell
End If
Lcd Mindest

 Lcd Chr(0)
 Lcd "C"



 I2cstart
I2cwbyte 145
I2crbyte Aktuell , Nack
I2cstop
If Maximal < Aktuell Then
  Maximal = Aktuell
End If

Locate 2 , 7
 Lcd Maximal
 Lcd Chr(0)
 Lcd "C"
Cursor Off


Wait 1
Loop

End

von Marc (Gast)


Lesenswert?

so wie ich das sehe musst du Mindest einen Startwert zuweisen, denn am 
anfang ist er 0 und das ist immer kleiner als die aktuelle Temperatur, 
setzte dein Minimal beim ersten durchgang auf den aktuellen wert oder 
auf den größten wert.

Gruß Marc

von Conrad (Gast)


Lesenswert?

ich habe jetzt mal Mindest=Aktuelle eingegeben, aber das funktioniert 
nicht. Die Temperatur ist dann immer die aktuelle. Welchen Befehl 
benötige ich denn, um den Startwert zuzuweisen?

von Helfer (Gast)


Lesenswert?

1
'****************** Initialisierung ***********************
2
Mindest = 255      ' <===== 
3
Ddrb = &B11111111  ' Port B als

von U.R. Schmitt (Gast)


Lesenswert?

Conrad schrieb:
> ich habe jetzt mal Mindest=Aktuelle eingegeben, aber das funktioniert
> nicht. Die Temperatur ist dann immer die aktuelle. Welchen Befehl
> benötige ich denn, um den Startwert zuzuweisen?

Lesen hilft.

Marc schrieb:
> setzte dein Minimal beim ersten durchgang
Du sollst nur beim ersten Durchlauf (oder falls möglich vor deiner 
Schleife) dem Min Wert die aktuelle Temperatur zuweisen.
Übrigens auch dem Max Wert, sonst hast du bei einer Umgebung die 
dauerhaft unter 0 Grad ist das selbe Problem mit der Max Anzeige.

von Conrad (Gast)


Lesenswert?

tausend Dank...funktioniert perfekt;-)

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.