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: 23922, Oldal olvasási idő: kb. 1 perc
Lapozás: OK   9 / 9

Tomi_Bp az előző oldalon említett modulok közül csak az I2C-t használót próbálta ki, és megosztotta velünk az  eredményeit. Köszönet érte!

(a videóhoz kattints a képre)

Ez a modul az I2C buszon keresztül a mágneses mező X és Y komponensét adja meg. Komponensenként 2 bájtban (egy magas és egy alacsony bájt). A mért adatokból egy ATMega16-ossal, trigonometriai függvények használatával számolja ki a tényleges irányszöget.

Az iránytűmodulról az alábbi I2C függvényekkel kérdezi le a mágneses mező X és Y komponensét:

  1. //iránytumodul I2C cime (adatlapbol)
  2. #define IRANYTU 0x60
  3. //iránytumodulbol nyert adatok
  4. unsigned char xhi_byte, xlo_byte;
  5. unsigned char yhi_byte, ylo_byte;
  6. i2c_init();
  7. i2c_start_wait(IRANYTU+I2C_WRITE);
  8. i2c_write(0x00);
  9. i2c_write(0x01);
  10. i2c_stop();
  11. _delay_ms(10);
  12. i2c_rep_start(IRANYTU+I2C_READ);
  13. yhi_byte = i2c_readAck();
  14. ylo_byte = i2c_readAck();
  15. xhi_byte = i2c_readAck();
  16. xlo_byte = i2c_readNak();
  17. i2c_stop();

A magas és alacsony bájtokból kiszámolja X és Y értékek:

  1. //a magas és alacsony bájtokból az X és Y értékek kiszámolása
  2. x_0 = ( xhi_byte << 8 ) | xlo_byte;
  3. y_0 = ( yhi_byte << 8 ) | ylo_byte;

A linkelt videón látható. hogy a mérést a modul kalibrációjával kezdi (a modult lassan körbeforgatja). Ekkor az AVR megkeresi az mért X és Y komponensek minimumát és maximumát (az ábrán Xmin, Xmax, Ymin és Ymax). Kiszámolja X és Y átlagértékét is (Xoffset, Yffset). Ezután kiszámolja az egyes irányszögeknél mért  X és Y értékek átlagtól való eltérését (deltaX és deltaY). Mivel a Föld mágneses mezeje Magyarországon nem vízszintes irányú, hanem enyhén "lefelé" mutat, ha a mért értékeket ábrázoljuk, akkor nem kört hanem egy ellipszist kapunk. Ezért az X és Y komponenseket normalizálja (elosztja deltaX-et és Y-t az adott komponenshez tartozó intervallummal: az ábrán Xsensitivity és Ysensitivity jelöli az intervallumot). Az átskálázott adatokból (a kódban xx és yy) egy atan() függvénnyel már kiszámolható az irányszög.

ATMega16 C kód (szerző: Tomi_Bp):
compass16.c

LCD driverek (szerző: gtk):
simple_driver.h
simple_driver.c

 

Következő: »»   9 / 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