Saturday, March 20, 2010

Devantech Magnetic Compass (CMPS03)



Komponen sistem navigasi yang cukup baik, efektif, mudah digunakan dan murah meriah adalah dengan kompas digital. Banyak jenis kompas digital yang diproduksi khusus untuk keperluan robotika, salah satu yang sangat populer adalah CMPS03 Magnetic Compass buatan Devantech Ltd. CMPS03 yang berukuran 4 x 4 cm ini menggunakan sensor medan magnet Philips KMZ51 yang cukup sensitif untuk mendeteksi medan magnet bumi.


Kompas digital ini hanya memerlukan supplai tegangan sebesar 5V DC, dengan konsumsi arus 15mA. Pada CMPS03, arah mata angin dibagi dalam bentuk derajat yaitu : Utara (00), Timur (900), Selatan (1800) dan Barat (2700). Ada dua cara untuk mendapatkan informasi arah dari modul kompas digital ini yaitu dengan membaca sinyal PWM (Pulse Width Modulation) pada pin 4 atau dengan membaca data interface I2C pada pin 2 dan 3.

1. Cara pembacaan data devantech magnetic compass (CMPS03)
     berikut adalah langkah percobaannya :
  1. Buka Aplikasi CodeVisionAVR C Compiler
  2. Klik File -> New muncul seperti gambar di bawah ini    

       3. Pilih project OK
       4. klik Yes
       5. Lakukan Settingan Seperti pada gambar, lalu terakhir “Gunakan Generate,Save and Exit

           
NB:       Untuk Chip dan Clock Sesuaikan Dengan Yang anda Gunakan dan simpan nama filesesuai nama yang anda inginkan (sebaiknya semuanya dengan nama yang sama) 
Example :   kompas.c      (untuk file source C)
                  kompas.prj    (untuk file project)
                  kompas.cwp  (untuk file Code Wizard Project) 

6. Klik Project >> Configure >> C Compiler, pada pilihan (s)printf Feature pilih float, width, precision. Seperti pada gambar dibawah ini. “Ini bisa tidak di setting, sesuaikan dengan penggunaan data yang anda gunakan”




     Dibawah ini merupakan contoh program CMPS03 menggunakan CodeVision :
    //mega32.h

    #include       
     //stdio.h
    #include         
    //delay.h
    #include   
     
    unsigned char data,posisi; 
    unsigned char baca_data[16];

    // I2C Bus functions
    #asm
       .equ __i2c_port=0x1B ;PORTA
       .equ __sda_bit=3
       .equ __scl_bit=2
    #endasm

    //i2c.h
    #include

    // Alphanumeric LCD Module functions
    #asm
       .equ __lcd_port=0x15 ;PORTC
    #endasm

    //lcd.h
    #include
    void baca_compass(void)
    {
            i2c_start();
            i2c_write(0xC0);
            i2c_write(0x01);
            i2c_start();
            i2c_write(0xC1);
            data=i2c_read(0);
            i2c_stop();          
    }

    void main(void)
    {
    DDRA=0x00;
    DDRB=0x00;
    DDRC=0x00;
    DDRD=0x00;
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    SFIOR=0x00;

    // I2C Bus initialization
    i2c_init();

    // LCD module initialization
    lcd_init(16);
     
    while (1)
          {
          baca_compass();
          posisi=data;
          sprintf(baca_data,"Data =  %d",data);
          lcd_gotoxy(0,0);lcd_puts(baca_data);
          lcd_gotoxy(0,1);lcd_putsf("Data Kompas");

          };
    }
     






      

    No comments:

    Post a Comment