HMC5883 yardım

Başlatan Dtmf, 17 Mayıs 2020, 19:44:44

Dtmf

Iyı aksamlar degerlı arkadaslar hmc5883 konusunda yardıma ıhtıyacım var. HMC5883 ıle haberlesmeye calısıyorum fakat hıc bır verı alamıyorum.bu modulun orjınalının L833 ve 16bıt sıcaklık verısı var,cakma denılen farklı bır versıyon olanının DA5883-DB5883 olarak pıyasada bulundugnu arastırıp ogrendım ve bu serıde sıcaklık senoru yok.3 versıyonundanda aldım.mevcut 3 modulun mercekle chıplerın uzerını okudum L883-DA5883-DB5883.data sheet baya kurcaladım hatta her bırının ı2c adreslerını garantı olsundıye ardunıo dan ı2c scaner ıle tarayarak bı koseye yazdım.sorun su suanda DA5883 versıyonunu breadborda kurdum yazma adresı=$3D okuma adresı=$3D
hıc bır verı alamıyorum.rıca etsem yardımcı olurmusunuz nerede hata yapıyorum.
Device = 16F877A
Xtal = 20           ; Kristal frekansı: 20 MHz
Declare All_Digital True   ; 16f877A nın tüm uçları Dijital
TRISA = %00000000:PORTA=0
TRISB = %00000000:PORTB=0
TRISC = %00000000:PORTC=0
TRISD = %00000000:PORTD=0
TRISE = %00000000:PORTE=0

Declare LCD_Type alpha  
Declare LCD_Lines 4
Declare LCD_Interface 4
Declare LCD_DTPin PORTB.4
Declare LCD_RSPin PORTB.0
Declare LCD_ENPin PORTB.1 

Dim XL As Byte
Dim XH As Byte

Dim YL As Byte
Dim YH As Byte

Dim ZL As Byte
Dim ZH As Byte 

Dim DRDY As Byte

Symbol SDA = PORTC.7  
Symbol SCL = PORTC.6 

Dim YAZ As Byte
Dim OKU As Byte
YAZ=$3C
OKU=$3D

I2COut SDA,SCL,YAZ,$00,[%11110000]  ;YAPILANDIRMA A   VARSAYILAN 7.BIT HERZAMAN 1 TEMIZLE
DelayMS 10
I2COut SDA,SCL,$YAZ,$01,[%00100000]  ;YAPILANDIRMA B
DelayMS 10
I2COut SDA,SCL,$YAZ,$02,[%10000001]  ;MOD AYAR
DelayMS 500
Cls    ;EKRANI TEMIZLE
;=======================START=======================
BASLA:
PORTD.0=1
Print At 1,1," HMC 5883 PUSULA "
I2COut SDA,SCL,OKU,$03,[XL] :DelayMS 2  ;X EKSEN
I2COut SDA,SCL,OKU,$04,[XL] :DelayMS 2  ;X EKSEN


I2COut SDA,SCL,OKU,$05,[YL] :DelayMS 2  ;Y EKSEN
I2COut SDA,SCL,OKU,$06,[YL] :DelayMS 2  ;Y EKSEN

I2COut SDA,SCL,OKU,$07,[ZL] :DelayMS 2  ;Z EKSEN
I2COut SDA,SCL,OKU,$08,[ZL] :DelayMS 2  ;Z EKSEN

I2COut SDA,SCL,YAZ,$09,[DRDY]  ;MOD AYAR

Print At 2,1,"XL:",Dec XL,"   ","XH:",Dec XH
Print At 3,1,"YL:",Dec YL,"   ","YH:",Dec YH

Print At 4,1,"DURUM.DRDY:",Bin DRDY.0  ;DATA HAZIR BITI OKU
PORTD.0=0
DelayMS 100
GoTo BASLA

ete

Ya şemada bir hata yapıyorsan!!!.Mesela Dta ve CLK hatlarına 2k2 pullup direnci bağladınmı?

Bağladın ise sorun yok demektir. Peki aşağıdaki data sheet'i inceledinmi? . Bir sürü örnek de vermiş adamlar.

https://cdn-shop.adafruit.com/datasheets/HMC5883L_3-Axis_Digital_Compass_IC.pdf

Diğer yandan programına bakıyorum hiç okuma komutu göremiyorum hep yazma komutun var. Hatan bu olsa gerek.
Örneğin 3 ve 4 nolu adreslerden yalnızca okuma yapılabiliyor sen oraya I2COUT komutu ile yazmaya çalışıyorsun. Sorun burada.
O kullandığın derleyicinin kullanım klavuzuna bir bak istersen I2C yazma ve Okuma nasıl ve hangi komutlarla yapılıyor. Öğren sonra tatbik et.

Ete

Dtmf

Hocam kusura bakmayin i2cin di okumalar ben yalnislikla gondermisim oruc kafaya vurdu bugun ozur dilerim:)

Dtmf

Direncler mevcut hocam i2cin ile okuma yapiyorum.datashett bir inceleyim

Dtmf

#4
ete hocam hayırlı sabahlar verdıgınız datasheetde kı orneklerı yenı gordumdaha dogrusu bu datasheet orneklı versıyonu elımde yoktu kodlarda degısıklıgı ornege gore yaptım fakat sonuc degısmedı.modulu 3.3v ıle beslıyorum modul uzerınde 4.7 k lık dırencler var pulup bunlarıdegıstırmemmı lazım.bu arada DRDY bıtı ekranda 1 olarakgozukuyor ve DRDY y baglı led aktıf fakat verı gelmıyor

Device = 16F877A
Xtal = 20           ' Kristal frekansı: 20 MHz
Declare All_Digital True   ' 16f877A nın tüm uçları Dijital
TRISA = %00000000:PORTA=0
TRISB = %00000000:PORTB=0
TRISC = %00000000:PORTC=0
TRISD = %00000000:PORTD=0
TRISE = %00000000:PORTE=0

Declare LCD_Type alpha  
Declare LCD_Lines 4
Declare LCD_Interface 4
Declare LCD_DTPin PORTB.4
Declare LCD_RSPin PORTB.0
Declare LCD_ENPin PORTB.1 

Dim XL As Byte
Dim XH As Byte

Dim YL As Byte
Dim YH As Byte

Dim ZL As Byte
Dim ZH As Byte 

Dim DRDY As Byte

Symbol SDA = PORTC.7  
Symbol SCL = PORTC.6 

Dim YAZ As Byte
Dim OKU As Byte
YAZ=$3C
OKU=$3D

I2COut SDA,SCL,YAZ,$00,[$71]  ;YAPILANDIRMA A   VARSAYILAN 7.BIT HERZAMAN 1 TEMIZLE
DelayMS 10
I2COut SDA,SCL,$YAZ,$01,[$A0]  ;YAPILANDIRMA B
DelayMS 10
I2COut SDA,SCL,$YAZ,$02,[$00]  ;MOD AYAR
DelayMS 500
Cls    ;EKRANI TEMIZLE
;===================================================START=======================
BASLA:
PORTD.0=1
Print At 1,1," HMC 5883 PUSULA "
I2CIn SDA,SCL,OKU,$03,[XL] :DelayMS 2  ;X EKSEN
I2CIn SDA,SCL,OKU,$04,[XL] :DelayMS 2  ;X EKSEN


I2CIn SDA,SCL,OKU,$05,[YL] :DelayMS 2  ;Y EKSEN
I2CIn SDA,SCL,OKU,$06,[YL] :DelayMS 2  ;Y EKSEN

I2CIn SDA,SCL,OKU,$07,[ZL] :DelayMS 2  ;Z EKSEN
I2CIn SDA,SCL,OKU,$08,[ZL] :DelayMS 2  ;Z EKSEN

I2CIn SDA,SCL,OKU,$09,[DRDY]  ;MOD AYAR

Print At 2,1,"XL:",Dec XL,"   ","XH:",Dec XH
Print At 3,1,"YL:",Dec YL,"   ","YH:",Dec YH

Print At 4,1,"DURUM.DRDY:",Bin DRDY.0  ;DATA HAZIR BITI OKU
PORTD.0=0
DelayMS 100
GoTo BASLA

ete

Modül dediğin bir hazır kartise ve üzerinde pullup dirençleri var ise değiştirmeye gerek yok.
O data sheet de bir işlemci ile nasıl bağlantı yapılacağıda detaylı olarak gösterilmiş.
Bana kalırsa örnekleri uygula sonuç almaya bak.
Alamıyorsan modül bozuktur demekten başka söyleyecek lafım olmaz.

Derleyicin Proton bana uzak. Modülü daha önce hiç kullanmadım onuda bilmiyorum.
Bilmem için oturup o data sheeti bir keç kez okumam ve uygulama yapmam lazım.
Bunada benim vaktim yok yada uğraşacak durumum yok, zaten elimde modul de yok.
Her şey senin elinde biraz uğraş bir yerlerde vardır bir kusurun. Kusur yoksa modül bozuktur.
Başka alternatif yok maalesef.
Ete

Dtmf

Sagolun hocam caniniz sagolsun :).modulleri ardunio da test ediyorum gayet guzel calisiyolar.ordunio kutuphanesindeki adrss,reg.adrsi vs degerleri ornek alarak aynisi gibi degistirdim yine fayda yok vardir ufak bisey ama takildim.bulurum insallah saglicakla kalin

dnaci

#7
Alıntı yapılan: Dtmf - 17 Mayıs 2020, 19:44:44Iyı aksamlar degerlı arkadaslar hmc5883 konusunda yardıma ıhtıyacım var. HMC5883 ıle haberlesmeye calısıyorum fakat hıc bır verı alamıyorum.bu modulun orjınalının L833 ve 16bıt sıcaklık verısı var,cakma denılen farklı bır versıyon olanının DA5883-DB5883 olarak pıyasada bulundugnu arastırıp ogrendım ve bu serıde sıcaklık senoru yok.3 versıyonundanda aldım.mevcut 3 modulun mercekle chıplerın uzerını okudum L883-DA5883-DB5883.data sheet baya kurcaladım hatta her bırının ı2c adreslerını garantı olsundıye ardunıo dan ı2c scaner ıle tarayarak bı koseye yazdım.sorun su suanda DA5883 versıyonunu breadborda kurdum yazma adresı=$3D okuma adresı=$3D
hıc bır verı alamıyorum.rıca etsem yardımcı olurmusunuz nerede hata yapıyorum.
Device = 16F877A
Xtal = 20           ; Kristal frekansı: 20 MHz
Declare All_Digital True   ; 16f877A nın tüm uçları Dijital
TRISA = %00000000:PORTA=0
TRISB = %00000000:PORTB=0
TRISC = %00000000:PORTC=0
TRISD = %00000000:PORTD=0
TRISE = %00000000:PORTE=0

Declare LCD_Type alpha  
Declare LCD_Lines 4
Declare LCD_Interface 4
Declare LCD_DTPin PORTB.4
Declare LCD_RSPin PORTB.0
Declare LCD_ENPin PORTB.1 

Dim XL As Byte
Dim XH As Byte

Dim YL As Byte
Dim YH As Byte

Dim ZL As Byte
Dim ZH As Byte 

Dim DRDY As Byte

Symbol SDA = PORTC.7  
Symbol SCL = PORTC.6 

Dim YAZ As Byte
Dim OKU As Byte
YAZ=$3C
OKU=$3D

I2COut SDA,SCL,YAZ,$00,[%11110000]  ;YAPILANDIRMA A   VARSAYILAN 7.BIT HERZAMAN 1 TEMIZLE
DelayMS 10
I2COut SDA,SCL,$YAZ,$01,[%00100000]  ;YAPILANDIRMA B
DelayMS 10
I2COut SDA,SCL,$YAZ,$02,[%10000001]  ;MOD AYAR
DelayMS 500
Cls    ;EKRANI TEMIZLE
;=======================START=======================
BASLA:
PORTD.0=1
Print At 1,1," HMC 5883 PUSULA "
I2COut SDA,SCL,OKU,$03,[XL] :DelayMS 2  ;X EKSEN
I2COut SDA,SCL,OKU,$04,[XL] :DelayMS 2  ;X EKSEN


I2COut SDA,SCL,OKU,$05,[YL] :DelayMS 2  ;Y EKSEN
I2COut SDA,SCL,OKU,$06,[YL] :DelayMS 2  ;Y EKSEN

I2COut SDA,SCL,OKU,$07,[ZL] :DelayMS 2  ;Z EKSEN
I2COut SDA,SCL,OKU,$08,[ZL] :DelayMS 2  ;Z EKSEN

I2COut SDA,SCL,YAZ,$09,[DRDY]  ;MOD AYAR

Print At 2,1,"XL:",Dec XL,"   ","XH:",Dec XH
Print At 3,1,"YL:",Dec YL,"   ","YH:",Dec YH

Print At 4,1,"DURUM.DRDY:",Bin DRDY.0  ;DATA HAZIR BITI OKU
PORTD.0=0
DelayMS 100
GoTo BASLA


@Dtmf bu sensörle Proton ile geçen sene bir pusula çalışması yapmıştım. Atan fonksiyonu ile yön bilgisi hesaplanıyor. Linkten çalışmanın kodlarını inceleyebilirsin. Kodlar hem 5883 hem de 5983 üzerinde çalışıyor. Kullandığım sensörler orjinaldi.

https://www.elektroinfo.org/2019/10/hmc5883l-hmc5983-pusula-devresi-proton.html


Isı ölçümü yapmaya çalışıyorsunuz sanırım ama bu sensörde ısı ölçümü özelliği yok bildiğim kadarıyla. Datasheet pdf dosyasını da inceledim ama göremedim. Yapılan ölçümlerin stabil olması için ısıya göre ölçüm düzeltme ile ilgili bir şeyler son sayfada var ama doğrudan ısı ölçümü değil. Arduino ile nasıl yapılmış olabilir? Arduino kodlarını veya kaynak varsa paylaşabilir misiniz?




Dtmf

Yardiminiz icin tesekkur ederim.soyle bir garip durum var suan elimde mevcut olan DA5883 ve DB5883 chipli modullerinin yazma ve okuma adresleri $1A ve $1B imis rusca dan turkceye cevirdigim bir datasheet de yaziyordu denedim oldu ? Anlam veremedim.

Dtmf

kodu paylasıyorum.suan calısıyor
Device = 16F877A
Xtal = 20           ; Kristal frekansı: 20 MHz
All_Digital True   ; 16f877A nın tüm uçları Dijital
TRISA = %00000000:PORTA=0
TRISB = %00000000:PORTB=0
TRISC = %11000000:PORTC=0
TRISD = %00000000:PORTD=0
TRISE = %00000000:PORTE=0

Declare LCD_Type alpha  
Declare LCD_Lines 4
Declare LCD_Interface 4
Declare LCD_DTPin PORTB.4
Declare LCD_RSPin PORTB.0
Declare LCD_ENPin PORTB.1 

Dim XL As Byte
Dim XH As BYTE

Dim YL As Byte
Dim YH As BYTE

Dim ZL As Byte
Dim ZH As BYTE

Dim DRDY As Byte

Symbol SDA = PORTC.7  
Symbol SCL = PORTC.6 

Dim YAZ As Byte
Dim OKU As Byte

YAZ=$1A ;YAZMA ADRESI DOGRU SILME     
OKU=$1B ;OKUMA ADRESI DOGRU SILME

DelayMS 500 
I2COut SDA,SCL,YAZ,$0B,[$01]  ;OLCUM MODU SUREKLI
DelayMS 10
I2COut SDA,SCL,YAZ,$09,[%10011001]  ;MOD AYAR
DelayMS 10
I2COut SDA,SCL,YAZ,$A0,[%10000001]  ;MOD AYAR


DelayMS 500
Cls    ;EKRANI TEMIZLE
;=======================START=======================
BASLA:
;I2COut SDA,SCL,YAZ,$0B,[$01]  ;OLCUM MODU SUREKLI
Print At 1,1,"      HMC 5883.  "
PORTD.0=1
;I2COut SDA,SCL,YAZ,$A0,[%10000001]  ;MOD AYAR

I2CIn SDA,SCL,OKU,$00,[XH]:DelayUS 20
I2CIn SDA,SCL,OKU,$01,[XL] :DelayUS 20

I2CIn SDA,SCL,OKU,$03,[YH]:DelayUS 20
I2CIn SDA,SCL,OKU,$04,[YL] :DelayUS 20

I2CIn SDA,SCL,OKU,$05,[ZH]:DelayUS 20
I2CIn SDA,SCL,OKU,$06,[ZL] :DelayUS 20


I2CIn SDA,SCL,OKU,$06,[DRDY] :DelayMS 2
Print At 2,1,"XL:",Dec XL,"   ","XH:",Dec XH
Print At 3,1,"YL:",Dec YL,"   ","YH:",Dec YH
Print At 4,1,"DRDY:",Bin DRDY
PORTD.0=0
DelayMS 100
GoTo BASLA

Dtmf

Ete hocam iyi aksamlar paylastiginiz dataheet inceledim.ben DA.5883 ve BD.olani calistirdim fakat bu L883 olan
Calismadi. anlayamadigim iki yer var.
1.Status reg.bolumndeki lock kilit bir turlu acamadim yani program da okuttugimda RDY ve LOCK  bitleri 1 gosteriyor lock kilitli oldugunda 6 bayt verinin kilitlendigini yeni gelen verinin kayda alinmayacagini soyluyor.status.reg.sadece okunabiliyor yazma yok malesef
2.dediginiz gibi ornekler var fakat

I2cout...$3c.$00[$70]
I2cout...$3c.$01[$A0]
I2cout...$3c.$02[$00]
 Ayarlarindan sonrasini anlayamadim
 Ozelliklen bu send $3c $3c(point to first data register 03)
 
Bu iki konuda vaktiniz varsa yardimci olurmusunuz

ete

Anladığım şu;
- I2COut.....$3c,$00,[$70]
- I2COut.....$3c,$01,[$A0]
- I2COut.....$3C,$02,[$00]
- 6 ms bekle, veya status registeri oku veya DRDY pinine bak.
- SOnra bir döngü kur
-  I2Cin.....$3D,$06,[6 adet byte oku]
- 3 adet 16 bitlik ikinin tamamlayıcısı olan hex değerleri desimale çevir ve bunları XYZ ye ata.
- I2COut.....$3C,$03,[]
- 67 ms bekle
- döngü sonu

Burada 6 byte okumadan sonrasına bende bir anlam veremedim doğrusu. Ne amaçla yazılmış ne yapıyor pek belli değil. Özellikle 6 byte okunurken benim bildiğim (okunacak byte lar 3 nolu adresten başladığına göre)
- I2Cin.....$3D,$03,[bir , iki, uc, dort,bes,altı} şeklinde okunmalıdır.
Sen yinede bu şekilde dene istersen.

Ete
 

Dtmf

ETE hocam ıyı aksamlar dedıgınız gıbı programı basıtce yazdım sadece verı alabılmek adına.sonuc olumlu :) chıp uzerınde L883 yazıyor sadece. DA5883 ve BD5883 olan chıp olan modullerı calıstırmıyor bu program.bence ılerıde arastırma yapan arkadaslara  bır ornek olur bu programlar.yalnız Z degerını alamadım x ve y degerlerı gayet guzel calısıyor.
Device=16F877A
Xtal=20           ' Kristal frekansı: 20 MHz
All_Digital True   ' 16f877A nın tüm uçları Dijital
TRISA = %00000000:PORTA=0
TRISB = %00000000:PORTB=0
TRISC = %00000000:PORTC=0
TRISD = %00000000:PORTD=0
TRISE = %00000000:PORTE=0

Declare I2C_Slow_Bus 0 ;- Off or 1 – 0
;Declare I2C_Bus_SCL 1;On - Off, 1 - 0 or True - False

Declare LCD_Type alpha  
Declare LCD_Lines 4
Declare LCD_Interface 4
Declare LCD_DTPin PORTB.4
Declare LCD_RSPin PORTB.0
Declare LCD_ENPin PORTB.1 

Dim X As Word
Dim Y As Word
Dim Z As Word

Dim DRDY As Byte

Dim X1 As Byte
Dim X2 As Byte

Dim Z1 As Byte
Dim Z2 As Byte

Dim Y1 As Byte
Dim Y2 As Byte

Dim S1 As Byte
Dim S2 As Byte

Symbol SD = PORTD.0  
Symbol SC = PORTD.1

Dim YAZ As Byte
Dim OKU As Byte
YAZ=$3C  ;3C YAZMA
OKU=$3D ;3D OKUMA
DelayMS 500

Cls;EKRANI TEMIZLE

I2COut SD,SC,YAZ,$00,[$70]  ;YAPILANDIRMA A   VARSAYILAN 7.BIT HERZAMAN 1 TEMIZLE
DelayMS 70
I2COut SD,SC,YAZ,$01,[$A0]  ;YAPILANDIRMA B CIHAZ KAZANCI
DelayMS 2                        
I2COut SD,SC,$3C,$02,[%00000000]  ;MOD AYAR
DelayMS 100 
;===================================================START=======================
BASLA:    
I2CIn SD,SC,OKU,$3,[X1,X2,Z1,Z2,Y1,Y2]  ;MOD AYAR
DelayMS 10
PORTC.0=1   ;PROGRAMIN CALISTIGININ BELLI OLMASI ICIN FLASOR AKTIF
DelayMS 2
I2CIn SD,SC,OKU,$08,[DRDY]  ;MOD AYAR

Print At 1,1,"X1:",Dec X1," ","X2:",Dec X2
Print At 2,1,"Z1:",Dec Z1," ","Z2:",Dec Z2 
Print At 3,1,"Y1:",Dec Y1," ","Y2:",Dec Y2

Print At 4,1,"DURUM:",Bin DRDY   ;status regıster bıtlerını oku

PORTC.0=0 ;;PROGRAMIN CALISTIGININ BELLI OLMASI ICIN FLASOR PASIF
;I2COut SD,SC,$3C,$3,[$3] ;bu komutun programda bır yararınıgoremedım 
DelayMS 100
GoTo BASLA

Dtmf

#13
ıyı aksamlar degerlı arkadasla bır kac ay once HMC5883 pusula modulu ıle bır calısmam olmustu hesaplamaları bır muhendıs arkadasla yaptık gayet guzel calısıyor.donuslerı derece olarak verıyor. belkı dıgıtal pusula yapmak ısteyen veya herhangıbır hava aracında kullanmak ısteyen olursa dıye paylasıyorum.onelı bır yer var hmc5883 modulu uzerındekı chıp mutlaka l883 kodu yazmalı.kalıbrasyon ayarı yazan yere bulundugunuz ılın manyetık yogunlugunu ınternet uzrerınden bulup yazmanız lazım manyetık kuzey ıcın. ıyı calısmlar

;====================HMC5883 PUSULA ENSORU============
Device =18F45K22
Xtal =64 ;pll aktıf edıp dahılı 16mhz x 4
All_Digital TRUE
 TRISA=0:PORTA=0
 TRISB=0:PORTB=0
 TRISC=0:PORTC=0
 TRISD=0:PORTD=0        
 TRISE=0:PORTE=0
;-------------------------------------
Declare LCD_Type alpha  
Declare LCD_Lines 2
Declare LCD_Interface 4
Declare LCD_DTPin PORTB.0
Declare LCD_RSPin PORTB.5
Declare LCD_ENPin PORTB.6

Declare SDA_Pin PORTC.7
Declare SCL_Pin PORTC.6
Declare Slow_Bus 1
Declare BUS_SCL 0
Symbol SDA =PORTC.7
Symbol SCL =PORTC.6
;============================================
Symbol ADRESS=$1E
Symbol OKU=$3D ;3D
Symbol YAZ=$3C ;3C

Symbol ACONFIG=$00
Symbol BCONFIG=$01
Symbol MODE=$02
Symbol STATUS_REGISTER=$09

Symbol Magnetometer_mXMSB=$03 
Symbol Magnetometer_mXLSB=$04  
Symbol Magnetometer_mZMSB=$05  
Symbol Magnetometer_mZLSB=$06  
Symbol Magnetometer_mYMSB=$07  
Symbol Magnetometer_mYLSB=$08 


Dim MX0 As Byte
Dim MX1 As Byte

Dim MY0 As Byte
Dim MY1 As Byte

Dim MZ0 As Byte
Dim MZ1 As Byte

Dim MX As SWord
Dim MZ As SWord
Dim MY As SWord
Dim DURUM As Byte

Dim XM As Float
Dim YM As Float


Dim HESAP As Float

Dim X As Float
Dim Y As Float
Dim ATA As Float
Dim PI As Float
PI=3.1453
;==========================================
DelayMS 250                                  
Cls                                          
I2COut SDA,SCL,YAZ,ACONFIG,[%01110000];[$10];[%01110001] STANDAT %0,NUMUNE SAYISI 8 ALINDI %11 ,3 EKSENDE VERI YAZMA HIZI VARSAYILAN YAPILCDI %100,CIHAZ NORMAL OLCUM MODU %00 NEGATIF VE POZITIF ALANDA 
DelayMS 100 
I2COut SDA,SCL,YAZ,BCONFIG,[%00100000];[$20]   ;%00000 ILK 5 BIT 0 OLARK YRLANIR STANDART,7.6.VE 5. BITLER SENSOR LANI MENZILI GAUS VARSAYILAN 1.3 GAUS AYARLNDI 
DelayMS 100
I2COut SDA,SCL,YAZ,MODE,[%00000000] ;%0 YUKSEK HILI I2C AKTIF/PASIF ETME 3400KHZ,%00000 SORAKI 5 BIT ,%00 SUREKLI OLCUM MODU %01 TEK OLCUM %11 VE %10 BEKLEME DODU
DelayMS 100
;=======================================================================================================================
BASLA:
;====================X EKSENI======================
I2CIn SDA,SCL,OKU,Magnetometer_mXMSB,[MX1]
I2CIn SDA,SCL,OKU,Magnetometer_mXLSB,[MX0]
MX=(MX1<<8)+MX0; BURAYA KADAR ARDUNIO ILE AYNI DEGERLER DOGRU
XM=MX*0.00092
;====================Z EKSENI========================
I2CIn SDA,SCL,OKU,Magnetometer_mZMSB,[MZ.HighByte]
I2CIn SDA,SCL,OKU,Magnetometer_mZLSB,[MZ.LowByte]
;===================Y EKSENI=========================
I2CIn SDA,SCL,OKU,Magnetometer_mYMSB,[MY1]
I2CIn SDA,SCL,OKU,Magnetometer_mYLSB,[MY0]
MY=(MY1<<8)+MY0
YM=MY*0.00092

HESAP=XM/YM
ATA=ATan HESAP;0.419 ;Y NIN ALIDGI DEGER RADYAN CINSINDEN BULUYORUZ

Y=Y+0.073 ;KALIBRASYON AYARI

Y=ATA*180/PI

;If XM>0 And YM>0 Then Y=90-Y ;+,+
;If XM>0 And YM<0 Then Y=270-Y  ;+,-
;If XM<0 And YM<0 Then Y=270-Y ;-,-
;If XM<0 And YM>0 Then Y=90-Y ;-,+ 

If XM>0 And YM>0 Then Y=90-Y ;+,+
If XM>0 And YM<0 Then Y=270-Y  ;+,-
If XM<0 And YM>0 Then Y=90-Y ;-,+ 
If XM<0 And YM<0 Then Y=270-Y ;-,-


If MY=0  Then Y=180
If Y=0.000 Then Y=90
If Y=90 And MY<65000 Then Y=270
If Y=180 And MX>200 Then Y=360

Print At 1,1,"   HMC5883 PUSULA   "
Print At 2,1,"DERECE:",Dec Y

If Y>112 And Y<165 Then Print At 3,1,"YON: KUZEY >"
If Y>165 And Y<200 Then Print At 3,1,"YON: KUZEY DOGU >"
If Y>200 And Y<234 Then Print At 3,1,"YON: DOGU >"
If Y>234 And Y<264 Then Print At 3,1,"YON: GUNEY DOGU >"

If Y>264 And Y<295 Then Print At 3,1,"YON: GUNEY >"
If Y>295 And Y<330 Then Print At 3,1,"YON: GUNEY BATI >"
If Y>330 And Y<360 Then Print At 3,1,"YON: BATI >"
If Y>1 And Y<114 Then Print At 3,1,"YON: KUZEY BATI>"


DelayMS 50
I2CIn SDA,SCL,OKU,STATUS_REGISTER,[DURUM] 
;I2COut SDA,SCL,YAZ,BCONFIG,[%11100000]
Print At 1,1,"                   "
Print At 2,1,"                   "
Print At 3,1,"                   "
Print At 4,1,"                   "
GoTo BASLA

ete

Güzel çalışma. Tebrik ederim.
Bir iki konu açıklığa kavuşması lazım. Birinisi bulunduğunuz yerin manyetik yoğunluğu hangi siteden alınıyor. Bunun birimi nedir. Bu parametreyi programda nerede kullanıyorsunuz. Yada sizin ywrinizin manyetik yoğunluğu kaç?

Aslında hesaplama kısmında bir detay görülmüyor. Hesapları burada ayrıca verirseniz üyelerimiz kendi programlarında kullanabilirler.
Ete

Powered by EzPortal