Witam
Problem mam następujący..
Walcze już od kilku dni nad przeniesieniem danych z excela a dokładnie z makr do atmegi 32 w BASCOM AVR.
Problem jest taki, że excel prawidłowo wylicza to makro, a mój program w BASCOMIE niestety nie ;(..
Podaje kod makra w excelu:
A oto co zrobiłem w bascom AVR:
Niestety przy wyliczeniu PMVval w bascomie ( nawet w symulacji) mam na wyświetlaczu -NAN
Co to oznacza??
Ma ktoś podobny problem
Problem mam następujący..
Walcze już od kilku dni nad przeniesieniem danych z excela a dokładnie z makr do atmegi 32 w BASCOM AVR.
Problem jest taki, że excel prawidłowo wylicza to makro, a mój program w BASCOMIE niestety nie ;(..
Podaje kod makra w excelu:
Sub PMV()
Private Sub CommandButton1_Click()
CLO = Worksheets("PMV").Range("d8")
MET = Worksheets("PMV").Range("d9")
TA = Worksheets("PMV").Range("d10")
TR = Worksheets("PMV").Range("d11")
VEL = Worksheets("PMV").Range("d12")
RH = Worksheets("PMV").Range("d13")
FNPS = Exp(16.6536 - 4030.183 / (TA + 235))
PA = RH * 10 * FNPS
ICL = 0.155 * CLO
M = MET * 58.15
If ICL < 0.078 Then
FCL = 1 + 1.29 * ICL
Else
FCL = 1.05 + 0.645 * ICL
End If
HCF = 12.1 * VEL ^ 0.5
TAA = TA + 273
TRA = TR + 273
TCLA = TAA + (35.5 - TA) / (3.5 * (6.45 * ICL + 0.1))
P1 = ICL * FCL
P2 = P1 * 3.96
P3 = P1 * 100
P4 = P1 * TAA
P5 = 308.7 - 0.028 * M + P2 * (TRA / 100) ^ 4
XN = TCLA / 100
XF = TCLA / 50
' xn=xf
N = 0
EPS = 0.0015
While Abs(XN - XF) > EPS
XF = (XF + XN) / 2
HCF = 12.1 * VEL ^ 0.5
HCN = 2.38 * Abs(100 * XF - TAA) ^ 0.25
If HCF > HCN Then
HC = HCF
Else
HC = HCN
End If
XN = (P5 + P4 * HC - P2 * (XF ^ 4)) / (100 + P3 * HC)
N = N + 1
Wend
TCL = 100 * XN - 273
'
'
' heat loss diff. through skin
'
HL1 = 3.05 * 0.001 * (5733 - 6.99 * M - PA)
'
'heat loss by sweating (comfort)
'
If M > 58.15 Then
HL2 = 0.42 * (M - 58.15)
Else
HL2 = 0
End If
'
'latent respiration heat loss
'
HL3 = 1.7 * 0.00001 * M * (5867 - PA)
'
' dry respiration heat loss
'
HL4 = 0.0014 * M * (34 - TA)
'
' heat loss by radiation
'
HL5 = 3.96 * FCL * (XN ^ 4 - (TRA / 100) ^ 4)
'
' heat loss by convection
'
HL6 = FCL * HC * (TCL - TA)
'
' thermal sensation trans coeff
'
TS = 0.303 * Exp(-0.036 * M) + 0.028
If VEL < 0.2 Then
TPO = 0.5 * TA + 0.5 * TR
Else
If VEL >= 0.2 And VEL <= 0.6 Then
TPO = 0.6 * TA + 0.4 * TR
Else
TPO = 0.7 * TA + 0.3 * TR
End If
End If
PMVval = TS * (M - HL1 - HL2 - HL3 - HL4 - HL5 - HL6)
Sheets("PMV").Range("d16") = TPO
Sheets("PMV").Range("d17") = PMVval
Sheets("PMV").Range("d25") = N
End Sub
A oto co zrobiłem w bascom AVR:
'$sim
$regfile = "m32def.dat"
$crystal = 11059200
$baud = 9600 ' predkość transmisji
$hwstack = 256 ' rozmiar stosu sprzętowego
$swstack = 128 ' rozmiar stosu
$framesize = 128
'********************* Konfiguracja wyświetlacza
Config Lcdpin = Pin , Rs = Portd.2 , E = Portd.3 , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7
Config Lcd = 20 * 4
Cursor Off
Declare Sub Pmv
Dim Fnps As Single
Dim Ta As Single
Dim Pa As Single
Dim Rh As Single
Dim Icl As Single
Dim Clo As Single
Dim M As Single
Dim Met As Single
Dim Fcl As Single
Dim Hcf As Single
Dim Vel As Single
Dim Taa As Single
Dim Tra As Single
Dim Tr As Single
Dim Tcla As Single
Dim Eps As Single
Dim Tpo As Single
Dim Pmvval As Single
Dim N As Single
Clo = 1
Met = 1
Ta = 20
Tr = 20
Vel = 0
Rh = 50
Cls
Do
Pmv
Locate 1 , 1
Print "Tpo: " ; Tpo
Lcd "Tpo: " ; Tpo
Locate 2 , 1
Print "PMV: " ; Pmvval
Lcd "PMV: " ; Pmvval
Locate 3 , 1
Print "N: " ; N
Lcd "N: " ; N
'Wait 3
'Cls
Loop
End
Sub Pmv
Local P1 As Single
Local P2 As Single
Local P3 As Single
Local P4 As Single
Local P5 As Single
Local Xn As Single
Local Xf As Single
Local Hcn As Single
Local Hc As Single
Local Tcl As Single
Local Hl1 As Single
Local Hl2 As Single
Local Hl3 As Single
Local Hl4 As Single
Local Hl5 As Single
Local Hl6 As Single
Local Ts As Single
Local Tcla1 As Single
Local Tcla2 As Single
Local P51 As Single
Local P52 As Single
Local Xn1 As Single
Local Xn2 As Single
Local Hl51 As Single
Local Hl52 As Single
Local Tpo1 As Single
Local Xnxf As Single
'Private Sub CommandButton1_Click()
'CLO = Worksheets("PMV").Range("d8")
'MET = Worksheets("PMV").Range("d9")
'TA = Worksheets("PMV").Range("d10")
'TR = Worksheets("PMV").Range("d11")
'VEL = Worksheets("PMV").Range("d12")
'RH = Worksheets("PMV").Range("d13")
' FNPS = Exp(16.6536 - 4030.183 / (TA + 235))
Fnps = Ta + 235
Fnps = 4030.183 / Fnps
Fnps = 16.6536 - Fnps
Fnps = Exp(fnps)
'Pa = Rh * 10 * Fnps
Pa = Rh * 10
Pa = Pa * Fnps
ICL = 0.155 * CLO
M = MET * 58.15
If ICL < 0.078 Then
'Fcl = 1 + 1.29 * Icl
Fcl = 1.29 * Icl
Fcl = 1 + Fcl
Else
' FCL = 1.05 + 0.645 * ICL
Fcl = 0.645 * Icl
Fcl = 1.05 + Fcl
End If
'HCF = 12.1 * VEL ^ 0.5
Hcf = Vel ^ 0.5
Hcf = 12.1 * Hcf
Taa = Ta + 273
Tra = Tr + 273
' TCLA = TAA + (35.5 - TA) / (3.5 * (6.45 * ICL + 0.1))
Tcla1 = 6.45 * Icl
Tcla1 = Tcla1 + 0.1
Tcla1 = 3.5 * Tcla1
Tcla2 = 35.5 - ta
Tcla2 = Taa + Tcla2
Tcla = Tcla2 / Tcla1
P1 = Icl * Fcl
P2 = P1 * 3.96
P3 = P1 * 100
P4 = P1 * Taa
'P5 = 308.7 - 0.028 * M + P2 *(tra / 100) ^ 4
P51 = Tra / 100
P51 = P51 ^ 4
P51 = P2 * P51
P52 = 0.028 * M
P52 = 308.7 - P52
P5 = P52 + P51
Xn = Tcla / 100
Xf = Tcla / 50
' xn=xf
N = 0
Eps = 0.0015
'While Abs(xn - Xf) > Eps
Do
'XF = (XF + XN) / 2
Xf = Xf + Xn
Xf = Xf / 2
'Hcf = 12.1 * Vel ^ 0.5
Hcf = Vel ^ 0.5
Hcf = 12.1 * Hcf
'HCN = 2.38 * Abs(100 * XF - TAA) ^ 0.25
Hcn = 100 * Xf
Hcn = Hcn - Taa
Hcn = Abs(hcn)
Hcn = Hcn ^ 0.25
Hcn = 2.38 * Hcn
If HCF > HCN Then
HC = HCF
Else
HC = HCN
End If
'XN = (P5 + P4 * HC - P2 * (XF ^ 4)) / (100 + P3 * HC)
Xn1 = P3 * Hc
Xn1 = 100 + Xn1
Xn2 = Xf ^ 4
Xn2 = P2 * Xn2
Xn = P4 * Hc
Xn = P5 + Xn
Xn = Xn - Xn2
Xn = Xn / Xn1
Incr N
Xnxf = Xn - Xf
Xnxf = Abs(xnxf)
If Xnxf > Eps Then Exit Do
Loop
'TCL = 100 * XN - 273
Tcl = 100 * Xn
Tcl = Tcl - 273
'
'
' heat loss diff. through skin
'
'HL1 = 3.05 * 0.001 * (5733 - 6.99 * M - PA)
Hl1 = 6.99 * M
Hl1 = 5733 - Hl1
Hl1 = Hl1 - Pa
Hl1 = Hl1 * 0.001
Hl1 = 3.05 * Hl1
'
'heat loss by sweating (comfort)
'
If M > 58.15 Then
'HL2 = 0.42 * (M - 58.15)
Hl2 = M - 58.15
Hl2 = 0.42 * Hl2
Else
HL2 = 0
End If
'
'latent respiration heat loss
'
'HL3 = 1.7 * 0.00001 * M * (5867 - PA)
Hl3 = 5867 - pa
Hl3 = Hl3 * M
Hl3 = Hl3 * 0.00001
Hl3 = 1.7 * Hl3
'
' dry respiration heat loss
'
'HL4 = 0.0014 * M * (34 - TA)
Hl4 = 34 - ta
Hl4 = M * Hl4
Hl4 = 0.0014 * Hl4
'
' heat loss by radiation
'
'HL5 = 3.96 * FCL * (XN ^ 4 - (TRA / 100) ^ 4)
Hl51 = Tra / 100
Hl51 = Hl51 ^ 4
Hl52 = Xn ^ 4
Hl5 = Hl52 - hl51
Hl5 = Fcl * Hl5
Hl5 = 3.96 * Hl5
'
' heat loss by convection
'
' HL6 = FCL * HC * (TCL - TA)
Hl6 = Tcl - ta
Hl6 = Hl6 * Hc
Hl6 = Fcl * Hl6
'
' thermal sensation trans coeff
'
'Ts = 0.303 * Exp( -0.036 * M) + 0.028
Ts = -0.036 * M
Ts = Exp(ts)
Ts = 0.303 * Ts
Ts = Ts + 0.028
If VEL < 0.2 Then
'TPO = 0.5 * TA + 0.5 * TR
Tpo1 = 0.5 * Tr
Tpo = 0.5 * Ta
Tpo = Tpo + Tpo1
Else
If VEL >= 0.2 And VEL <= 0.6 Then
'TPO = 0.6 * TA + 0.4 * TR
Tpo1 = 0.4 * Tr
Tpo = 0.6 * Ta
Tpo = Tpo + Tpo1
Else
'TPO = 0.7 * TA + 0.3 * TR
Tpo1 = 0.3 * Tr
Tpo = 0.7 * Ta
Tpo = Tpo + Tpo1
End If
End If
'PMVval = TS * (M - HL1 - HL2 - HL3 - HL4 - HL5 - HL6)
Pmvval = M - hl1
Pmvval = Pmvval - Hl2
Pmvval = Pmvval - Hl3
Pmvval = Pmvval - Hl4
Pmvval = Pmvval - Hl5
Pmvval = Pmvval - Hl6
Pmvval = Ts * Pmvval
'Sheets("PMV").Range("d16") = TPO
'Sheets("PMV").Range("d17") = PMVval
'Sheets("PMV").Range("d25") = N
End Sub
Niestety przy wyliczeniu PMVval w bascomie ( nawet w symulacji) mam na wyświetlaczu -NAN
Co to oznacza??
Ma ktoś podobny problem