Fórum témák

» Több friss téma
Cikkek » HMC6352 iránytűmodul - I2C (TWI) használata AVR-rel
HMC6352 iránytűmodul - I2C (TWI) használata AVR-rel
Szerző: Fizikus, idő: Nov 27, 2010, Olvasva: 23822, Oldal olvasási idő: kb. 2 perc
Lapozás: OK   4 / 9

HMC6352 iránytűmodul

(kattints a képre)

A HMC6352 iránytűmodul a Föld mágneses mezejének az egymásra merőleges x és y komponensét méri. A modul a külvilággal az I2C buszon keresztül kommunikál. Attól függően, hogy milyen kimeneti adatmódot állítottunk be, a modulról lekérdezhetjük a nyers mérési adatokat, a kalibráció értékeivel korrigált adatokat vagy közvetlenül az ezekből az adatokból számított irányszöget is.

A modul gyárilag beállított alap I2C címe: 42(hex). Ez 10(hex) és F6(hex) között változtatható, és a modul EEPROM-jának 00(hex) memóriacímén van tárolva.

A modul egy, az I2C buszon keresztül küldött ‘A’ paranccsal utasítható egy mérés-sorozat elvégzésére. A mérés zajosságát csökkenti, hogy a modul alapbeállításban 4 mérés eredményét átlagolja (ez a szám 1 és 16 között állítható). Az ‘A’ parancs kiadása és a mért irányszögadatok lekérdezése között legalább 6ms-ot várni kell (ennyi időbe telik a modulnak a mérések elvégzése, az eredmények átlagolása és az irányszög kiszámolása).

A HMC6352 iránytűmodul 3 alap működési móddal rendelkezik (plusz az energiakímélő sleep mode):

Standby mód:
A modul a Master jelére vár. Egy ‘A’ parancs érkezése esetén a modul végrehajt egy mérés sorozatot, a mért adatokból kiszámolja az irányszöget, és az adatolvasási parancsra vár.

Query mód:
A modul a Master jelére vár. Egy ‘A’ parancs érkezése esetén a modul végrehajt egy mérés sorozatot, a mért adatokból kiszámolja az irányszöget, és az adatolvasási parancsra vár. Minden egyes adatkiolvasás után a modul automatikusan újra elvégez egy mérést. Az eredményt pedig az adatregiszterekbe írja, ahonnan az kiolvasható. Az ismételt mérések elvégzéséhez nem szükséges az ‘A’ parancs újbóli kiadása.

Folyamatos mód (Continuous Mode):
A modul egy előre megadott gyakorisággal (1Hz, 5Hz, 10Hz vagy 20Hz) folyamatosan végzi a méréseket és frissíti a kimeneti adatregisztereket az ‘A’ parancs kiadása nélkül is.

Bekapcsolás után a modul a gyárilag alapból beállított Heading Output módban indul el. Ekkor a modul kimenetként 2 bájtban közvetlenül az irányszöget adja meg tizedfokos felbontással egy 0-3599 közötti értékkel. A cikkben szereplő példában is ezt a módot használtam (akit a többi működési mód és a szenzor kalibrációja is érdekel, az nézze meg az adatlapban az ezzel kapcsolatos beállításokat – LINK ).

Az általam használt, az irányszöget I2C-n keresztül a modulról lekérdező függvény igy néz ki:

  1. #define HMC6352  0x42      // iranytumodul I2C cime
  2.  
  3. int iranymeres()
  4. {
  5.     unsigned char hi_byte;
  6.     unsigned char lo_byte;
  7.      i2c_init();    // I2C inicializalasa
  8.      i2c_start_wait(HMC6352+I2C_WRITE);  // iranytumodul I2C cim es adatirany (iras) megadasa
  9.      i2c_write('A');  //  iranyszogmeresre utasito parancs
  10.      i2c_stop();    // Stopjel kuldese, I2C bus szabadda tetele
  11.      _delay_ms(10);   // varakozas 10 ms-ig
  12.      i2c_rep_start(HMC6352+I2C_READ);  // ismetelt Start jel (Restart) + adatirany (olvasas)
  13.      hi_byte = i2c_readAck();    // iranyszog beolvasasa az iranytumodulrol(magas bajt)
  14.      lo_byte = i2c_readNak();    // iranyszog beolvasasa az iranytumodulrol(alacsony bajt)
  15.      i2c_stop();   // Stopjel kuldese, I2C bus szabadda tetele
  16.      return  ((hi_byte << 8) | lo_byte);
  17. }

 

Az iránytűmodult a korábbi cikkeimben is használt, dugdosós próbapanelen összerakott egyszerű ATMega8-as alapkapcsolásra illesztettem az alábbi ábrán látható módon:

(kattints a képre) 


A cikk még nem ért véget, lapozz!
Következő: »»   4 / 9
Értékeléshez bejelentkezés szükséges!
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem