$regfile = "m128def.dat" 'specify the used micro
$crystal = 16000000 'used crystal frequency
$baud = 19200 'dfs
$hwstack = 100
$swstack = 100
$framesize = 64
'===============================================================================
' Deklarasi
'===============================================================================
'------- Kompas ----------------------------
Config Scl = Portd.0 ' needed if using soft I2C -- portc.5
Config Sda = Portd.1 ' needed if using soft I2C -- portc.4
Config Twi = 400000 ' set the I2C bus to 'fast' speed
I2cinit
Const Hmc_w = &H3C ' HMC5883L Write address
Const Hmc_r = &H3D ' HMC5883L Read address
'------- Variabel Kompas -------------------
Dim Sudutmeja(4) As Integer
Dim Hmc_x As Integer
Dim Hmc_xl As Byte At Hmc_x + 0 Overlay
Dim Hmc_xh As Byte At Hmc_x + 1 Overlay
Dim Hmc_y As Integer
Dim Hmc_yl As Byte At Hmc_y + 0 Overlay
Dim Hmc_yh As Byte At Hmc_y + 1 Overlay
Dim Hmc_z As Integer
Dim Hmc_zl As Byte At Hmc_z + 0 Overlay
Dim Hmc_zh As Byte At Hmc_z + 1 Overlay
Dim Angle As Single
Dim X As Single
Dim Y As Single
Dim Z As Single
Dim Tempsingle1 As Single
'===============================================================================
' Program Utama
'===============================================================================
Waitms 500
Print "mulaiiii"
Gosub Hmc_initialize
Do
Gosub Getangle
Angle = Int(angle)
Print Angle
Loop
End 'end program
'===============================================================================
'------- HMC inisialisasi ------------------
Hmc_initialize:
Print "hmcinitial"
I2cstart
I2cwbyte Hmc_w
Print "end"
I2cwbyte &H00 ' set register possition to 0
I2cwbyte &B0101_1000 ' set ConfRegA [4samples, 75Hz, normal]
I2cwbyte &H0010_0000 ' set ConfRegC [gain to default (1090)]
I2cwbyte &H0000_0000 ' set free running mode
I2cstop
Return
'------- Get Angle --------------------------
Getangle:
I2cstart
I2cwbyte Hmc_w
I2cwbyte &H03 ' set read position
I2cstart
I2cwbyte Hmc_r
I2crbyte Hmc_xh , Ack ' read in high order x
I2crbyte Hmc_xl , Ack ' read in low order x
I2crbyte Hmc_zh , Ack ' read in high order z
I2crbyte Hmc_zl , Ack ' read in low order z
I2crbyte Hmc_yh , Ack ' read in high order y
I2crbyte Hmc_yl , Nack ' read in low order y
I2cstop
X = Hmc_x
Y = Hmc_y
Z = Hmc_z
' Calculate angle:
Angle = Atn2(y , X)
Angle = Angle * 57.29577951 ' (180 / 3.14159265)
Angle = Angle + 180
Print "angl " ; Angle
If Angle > 65 And Angle <= 82 Then
Tempsingle1 = Angle + 7
Angle = Tempsingle1
Elseif Angle > 82 And Angle <= 92 Then
Tempsingle1 = Angle + 12
Angle = Tempsingle1
Elseif Angle > 92 And Angle <= 112 Then
Tempsingle1 = Angle + 18
Angle = Tempsingle1
Elseif Angle > 112 And Angle <= 200 Then
Tempsingle1 = Angle + 23
Angle = Tempsingle1
Elseif Angle > 200 And Angle <= 298 Then
Tempsingle1 = Angle + 15
Angle = Tempsingle1
Elseif Angle > 298 And Angle <= 335 Then
Tempsingle1 = Angle + 8
Angle = Tempsingle1
End If
Return
0 komentar:
Posting Komentar