Atmega nie liczy logarytmu
: 03 maja 2021, 14:39
Witam,
Transformator 600VA. Pomiędzy uzwojenia transformatora jest wsadzony termistor NTC 10k. Chciałem za pomocą Atmegi zmierzyć tą temperaturę, charakterystykę czujnika znam, podstawiłem dane w excelu żeby sprawdzić wzór i wszystko ok, a atmega nie chce tego policzyć. Wzór wygląda tak:
download/file.php?mode=view&id=731&sid= ... e7d41e6251
Wartości R1 , R2 , B , T1 są wartościami stałymi, ale chciałbym mieć możliwość je zmienić ( kalibracja czujnika )
Wzór liczony ręcznie daje prawidłowy wynik czyli jest dobry, natomiast atmega pokazuje głupoty. Poniżej jest krótki kod nad którym się męczę i nie wiem co jest nie tak.
Jak próbuję wyświetlać poszczególne zmienne na wyświetlaczu to problem pojawia się już przy próbie wyświetlenia zmiennej Ln2b.
Jeżeli wartość ADC jest ustawiona na 291, to zmienne powinny wyglądać tak:
LN1 -0,23428
LN2a 733
LN2b 2,51969
LN2 0,92414
LN3 13,02217
LN4 0,68986
LN5 13,71203
LN6 283,15000
LN7 10,00000
Transformator 600VA. Pomiędzy uzwojenia transformatora jest wsadzony termistor NTC 10k. Chciałem za pomocą Atmegi zmierzyć tą temperaturę, charakterystykę czujnika znam, podstawiłem dane w excelu żeby sprawdzić wzór i wszystko ok, a atmega nie chce tego policzyć. Wzór wygląda tak:
download/file.php?mode=view&id=731&sid= ... e7d41e6251
Wartości R1 , R2 , B , T1 są wartościami stałymi, ale chciałbym mieć możliwość je zmienić ( kalibracja czujnika )
Wzór liczony ręcznie daje prawidłowy wynik czyli jest dobry, natomiast atmega pokazuje głupoty. Poniżej jest krótki kod nad którym się męczę i nie wiem co jest nie tak.
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- $sim
- $regfile = "m8def.dat"
- $crystal = 16000000
- Cls
- Config Lcd = 16 * 2
- Config Lcdpin = Pin , Db4 = Portd.3 , Db5 = Portd.2 , Db6 = Portd.1 , Db7 = Portd.0 , E = Portd.4 , Rs = Portd.5
- Cursor Off
- Start Adc
- Const R1 = 7500
- Const R2 = 9480
- Const B = 3882.56
- Const T1 = 298.15
- Const Ln1 = Log(r1 / R2)
- Const Ln3 = B / T1
- Dim Tb As Word
- Dim Ln2a As Single
- Dim Ln2b As Single
- Dim Ln2 As Single
- Dim Ln4 As Double
- Dim Ln5 As Double
- Dim Ln6 As Double
- Dim Ln7 As Double
- '*******************************************************************************
- Do
- Tb = Getadc(1)
- Ln2a = 1024 - Tb
- Ln2b = Ln2a / Tb
- Ln2 = Log(ln2b)
- Ln4 = Ln1 + Ln2
- Ln5 = Ln4 + Ln3
- Ln6 = B / Ln5
- Ln7 = Ln6 - 273.15
- Locate 1 , 1 : Lcd Ln2
- Loop
- End
Jeżeli wartość ADC jest ustawiona na 291, to zmienne powinny wyglądać tak:
LN1 -0,23428
LN2a 733
LN2b 2,51969
LN2 0,92414
LN3 13,02217
LN4 0,68986
LN5 13,71203
LN6 283,15000
LN7 10,00000