Hola muchachos. bueno le di a la brujulita y decidi dejarla con una resolucion de 30º. se debe tomar la brujula y tomar mediciones junto con una brujula normal para saber los valores q genera dependiendo de donde estaapuntada, debido a los campos magneticos, como batria,cables, motores alteran las lecturas. en mi proyecto quedo asi con mi codigo. gracias por su ayuda
'****************************************************************
'* Name : BRUJULA *
'***************************************************************
' *******************************************
' Comfiguracion de la LCD
' *******************************************
INCLUDE "modedefs.bas"
define OSC 4
DEFINE OSC 4
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 2
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 3
DEFINE LCD_BITS 4
TRISB=$00
TRISC=$00
Dout var portd.0
En var portd.2
Clk var portd.3
Reset CON %00000000
Measure CON %1000
Report CON %1100
Ready CON %1100
NegMask CON %1111100000000000
z VAR Word
y VAR Word
statuus VAR byte
angle VAR Word
inicio:
call Compass_Get_Axes
CALL CALC_ANGLE
lcdout $fe,$C0, "angle = ",DEC angle, "degrees"
PAUSE 2000
goto inicio
Compass_Get_Axes:
lcdout $FE,1,"LLL"
HIGH En
LOW En
SHIFTOUT Dout,clk,MSBFIRST,[Reset\4]
HIGH En
LOW En
SHIFTOUT Dout,clk,MSBFIRST,[Measure\4]
statuUs = 0
REPEAT
lcdout $FE,1,"1111"
HIGH En
LOW En
SHIFTOUT Dout,clk,MSBFIRST,[Report\4]
SHIFTIN dout,clk,MSBPOST,[Statuus\4]
UNTIL STATUUS=ready
SHIFTIN dout,clk,MSBPOST,[z\11,y\11]
HIGH En
lcdout $fe,1,#Y," ",#Z," ",#statuus
;IF (y.BIT10 = 1) THEN y = y | NegMask
;IF (z.BIT10 = 1) THEN z = z | NegMask
RETURN
CALC_ANGLE:
IF Y<2020 AND y>2015 AND z<1993 AND z>1998 THEN angle=0
IF y<5 AND y>0 AND z<2007 AND z>2013 THEN angle=30
IF Y<17 AND Y>11 AND z<2037 and z>2031 THEN angle=60
IF Y<13 AND Y>7 AND Z<7 AND Z>3 THEN ANGLE=90
IF y<5 AND z<12 AND z<11 AND Z>7 THEN ANGLE=120
IF Y<2035 AND Y>2030 AND Z<32 AND Z>27 THEN ANGLE=150
IF Y<2043 AND Y>2038 AND Z<30 AND Z>26 THEN ANGLE=180
IF Y<2038 AND Y>2033 AND Z<37 AND Z>32 THEN ANGLE=210
IF Y<2030 AND Y>2026 AND Z<24 AND Z>28 THEN ANGLE=240
IF Y<2023 AND Y>2019 AND Z<12 AND Z>8 THEN ANGLE=270
IF Y<2022 AND Y>2018 AND Z<2035 AND Z>2031 THEN ANGLE=300
IF Y<2021 AND Y>2017 AND Z<2007 AND Z>2001 THEN ANGLE=330
RETURN
end