Hola pues eso tengo problemas con las operaciones matemáticas del proton ds(metal) unas las realiza correctamente y otras me dan como resultado cero cuando el resultado esperado debería ser distinto e seguido las recomendaciones para instalar el proton ds instalarlo en la raíz de c utilizar nombres de archivo cortos, la carpeta de proyectos esta también en c y utilizo nombres de archivo cortos, también tengo instalado el mpsam versión 4.10 según dicen que si no esta instalado no compila pero yo e probado quitando el mpsam y si lo ase pero por no dejar esta instalado.
Ase tiempo que utilizo el proton ds y la verdad es que no me había dado problemas asta ahora que me veo en la necesidad de realizar operaciones matemáticas y no tengo ni puta idea de que esta pasando espero me puedan echar una manita para ver que esta pasando por que unas operaciones si las ase y otras no para darme a entender mejor les marco en el programa donde tengo problemas.
Nota1, me chute las rutinas para la conversión de la temperatura y altura del amigo navaismo espero no te molestes.
Nota2, el programa esta en borrador por lo cual hay muchas burradas por depurar como setear los bits de configuración correctamente, los registros tris y port entre otras cosas
Así que no sean muy duros con migo que todavía no termino la tarea.
Device 18F252
XTAL=20
'****** configuracion puerto serie fisico *****
HSERIAL_BAUD=9600
HSERIAL_RCSTA=%10010000
HSERIAL_TXSTA=%00100000
HSERIAL_CLEAR=On
'****** configuracion puerto analogico/digital ***
Declare ADIN_RES 8
Declare ADIN_TAD frc
Declare adin_delay 50
TRISA=%00000111
ADCON1=%00000000
'============ configuracion bus 12c por programa =========
SCL_PIN = PORTC.3
SDA_PIN = PORTC.4
'========= variables temperatura =========
Dim samples As Word
Dim sample As Byte
Dim temp As Byte
Dim mv As Float
Dim temp2 As Float
samples=0
'========variables presion =======
Dim vadc As Byte
Dim vout As Float
Dim p As Float
Dim c As Float
Dim b As Float
Dim i As Float
Dim VSS As Float
Symbol P_0 = 1013.3
'======== variables altura =========
Dim hp As Float
Dim defp As Float
Dim loga As Float
Dim m1 As Float
Dim m2 As Float
Dim h As Float
'=========== variables luxometro ========
Dim vadc2 As Byte
Dim vout2 As Float
Dim mvolts As Float
Dim uwats As Float
'======== variables rtc =======
Dim SEGUNDOS As Byte
Dim MINUTOS As Byte
Dim HORA As Byte
Dim dia As Byte
Dim fecha As Byte
Dim mes As Byte
Dim ano As Byte
'======== inicializar rtc ======
BusOut %11010000,7,[%00010000] 'int externa 1hz
BusOut %11010000,0,[0] 'inicialisa ds1
DelayMS 40
'========= hora actual del pc =============
If PORTB.0=0 Then
DelayMS 40 ' Delay for 100ms for debounce
SEGUNDOS=HRSin ' Read the Seconds serially
MINUTOS=HRSin ' Read the Minutes serially
HORA=HRSin ' Read the Hours serially
fecha=HRSin ' Read the Date serially
mes=HRSin ' Read the Month serially
ano=HRSin ' Read the Year serially
SetTime:
BusOut $D0,$00,[SEGUNDOS,MINUTOS,HORA,dia,fecha,mes,ano] ' write time
EndIf
'============= rutina principal =================
While 1=1
High PORTC.0
GoSub temperatura
GoSub precion_altimetro
GoSub luxometro
GoSub GetTime
HRSOut "time"," ", HEX2 HORA,":",HEX2 MINUTOS,":",HEX2 SEGUNDOS," ","data"," ",HEX2, fecha ,"/",HEX2,mes,"/",HEX2 ano ,10,13
HRSOut 10,13
HRSOut "temperatura="," ",DEC2 temp2,"c"," ","precion="," ","kpa",Dec p," ","haltura=",Dec h,"mts"," ","LUXOMETRO=",DEC2 uwats,"uw",DEC2 mvolts ,DEC2 vout2 ,10,13
Low PORTC.0
DelayMS 250
Wend
' ************ mcp9700 **********************
temperatura:
For sample=1 To 20
temp=ADIn 0
samples=samples+temp
DelayMS 250
Next sample
temp=samples/20
mv=(temp * .0195-.400)
temp2=mv/.0195
'HRSOUT "temperatura="," ",dec2 temp2,"C" ,10,13
samples=0
Return
'************** precion altimetro mpx4115as ****
precion_altimetro:
vadc = ADIn 1
vout =(vadc * 5)/256 '<----- resultado ok
precion: 'get_Presion: <-----est es la rutina original
c = .475 'c = .095 * 5 <------ esta operacion da 0 cuando deveria dar .475
b = .045 'b = .009 * 5 <------ esta operacion da 0 cuando deveria dar .045 [0 por lo cual tuve que realizar_
p = (vout + c)/(b) 'P = (vout + c)/(b)
'====== altura =====
hp = p * 10
defp = P_0 / hp
loga = Log defp
m1 = 8430.153 * loga
m2 = (loga * .095)+1
h = m1 / m2
Return
luxometro:
vadc2=ADIn 2
vout2=(vadc2 * 5)/256 '<------- a qui si meda el resultado correcto
mvolts =(vout2/1000)'<--------- esta operacio me da como resultado 0 (cero)
uwats =(mvolts/19) '<--------- esta operacion me da como resultado 0
Return
'================== leer la hora actual =============
GetTime:
BusIn $D1,$00,[ SEGUNDOS,MINUTOS,HORA,dia,fecha,mes,ano]
Return