CONFIG CLOCK
Action
Configures the timer to be used for the TIME$ and DATE$ variables.
Syntax
CONFIG CLOCK = soft | USER [, GOSUB = SECTIC]
Remarks
Soft
Use SOFT for using the software based clock routines. Use USER to write/use your own code in combination with an I2C clock chip for example.
Sectic
This option allows to jump to a user routine with the label sectic.
Since the interrupt occurs every second you may handle various tasks in the sectic label. It is important that you use the name SECTIC and that you return with a RETURN statement from this label.
The usage of the optional SECTIC routine will use 30 bytes of the hardware stack. This option only works with the SOFT clock mode. It does not work in USER mode.
hört sich gut an, hast du da irgendwo ein Beispiel, dann verstehe ich es leichter.Erfasse jede Sekunde Deine Temperatur und addiere die Werte in single oder double Variable und bevor Du die Temperatur anzeigen möchtest teile den Wert einfach durch 300. 300 Messwerte geteilt durch 300 ergibt eine schöne über 5 Minuten gemittelte Temperatur. Oder nehme halt nur 60 Messwerte oder was auch immmer. Damit bekommst Du außerdem Schwankungen weg,
also los
'Mega8 intern 1Mhz
'KTY81-120 Temperaturfühler
$regfile = "m8def.dat"
$crystal = 1000000 'Externes Quarz Mhz
$framesize = 128
$hwstack = 40
$swstack = 30
Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.1 , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5
Config Lcd = 20 * 2
Initlcd
Cursor Off
Cls
Config Portb = Output
Deflcdchar 0 , 6 , 9 , 9 , 6 , 32 , 32 , 32 , 32 ' LCD-Sonderzeichen
Dim W0 As Word
Dim W1 As Word
Dim W2 As Word
Dim Volt As Single
Dim Licht As Single
Dim V As Single
Const Adc_multi = 0.004887585533
Const Refer = 2.0572 '1.1593 Fühler Konstante bei 0°C
Config Adc = Single , Prescaler = Auto , Reference = Avcc ' interen 5V
Ddrc.0 = 0 'AD Eingang für Mess
Ddrc.1 = 0 'AD Eingang für Temp
Ddrc.2 = 0 'AD Eingang für Licht
Ddrd.5 = 1
Relais Alias Portd.5 'Ausgang für Untersp.
Do
Start Adc
W0 = Getadc(0) ' auslesen des Span ADC0
W1 = Getadc(1) ' auslesen des Temp ADC1
W2 = Getadc(2) ' auslesen des Licht ADC2
Stop Adc
Volt = W0 * Adc_multi '5/1023 = 0.0048 Volt 10 Bit AD converter
Volt = Volt * 2.73 '2,73 Faktor vom Spannungsteiler
Volt = W0 * 0.014298
Licht = W2
V = W1 * Adc_multi '5/1023 = 0.0048 Volt 10 Bit AD converter
V = V - Refer
V = V / 0.0077125 ' 0.0077125 fühler konstante pro grad °C
V = V + 2 '2te möglichkeit den fühler abzugleichen
If Volt > 12.8 And Licht > 900 And Relais = 0 Then Relais = 1
If Volt < 11.0 Then Relais = 0 'Relais schaltet ab
If Licht < 850 Then Relais = 0 '0-1023 bereich Relais schaltet ab
'------- LCD ANZEIGE-----------------------------------------------------------
Locate 1 , 1
Lcd "Volt= " ; Fusing(volt , "##.##")
Waitms 100
If Volt < 11.0 Then ' ANZEIGE am LCD= voll oder leer
Locate 2 , 1
Lcd "Accu Leer"
Else
End If
If Volt > 13.5 Then
Locate 2 , 1
Lcd "Accu Voll"
Else
End If
Locate 1 , 14
Lcd Fusing(v , "#.#") ; Chr(0) ; "C" ' ANZEIGE am LCD= Temperatur
Wait 1
'anzeige nur bei W0-W2
'Locate 2 , 12
'Lcd W0
'Locate 2 , 16
'Lcd W2
Loop
End
Man müsste nun nochmals einen Blick in die Auflösung und Genauigkeit des ADC's werfen aber vermutlich wird der ADC an der Grenze seiner Auflösung betrieben.
Du solltest die Sensorspannung einfach mehrfach messen, und dann aus diesen Messungen mittels Division der Summen den Durchschnitt berechnen. Auf diese Weise bekommst Du ein stabileres Messergebnis.
Ich vermute das Zappeln kommt durch das Quantisierungsrauschen des ADC's.