![]() |
|
Tài trợ cho PIC Vietnam |
PIC - Thiết kế và Ứng dụng Ý tưởng cho các sản phẩm sử dụng PIC/dsPIC và các sản phẩm của Microchip |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#1 |
Nhập môn đệ tử
Tham gia ngày: Apr 2012
Bài gửi: 4
: |
Cảm biến góc ADXL345 +Pic 16f877a
Xin chào tất cả mọi người.
Mình tham gia diễn đàn đã khá lâu rồi nhưng không có đóng góp gì cho diễn đàn, mà chôm từ diễn đàn thì khá nhiều. Mình mới giao tiếp với con ADXL345 (cảm biến góc) dùng i2c với pic 16f877a. Mà chưa thấy ai post cả, Bạn nào có hứng thú làm điều khiển xe bằng góc nghiêng, hay đo góc thì có thể dùng con này. #include <16F877A.h> #use delay(clock=20000000) #include <def_877A.h> #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) #use i2c(Master, sda=PIN_C4, scl=PIN_C3) #fuses HS,NOPROTECT, BROWNOUT, PUT, NOLVP //#include <lcd_lib_4bit_use.c> #include <stdio.h> void write(int dv, byte address, byte val); byte read(int dv, byte address) ; void ini_adxl345() //cai dat ban dau cho adxl345 { write(0x53,0x38,0x9f); write(0x53,0x31,0x00); write(0x53,2C,0x0d); delay_us(10); write(0x53,0x2D,0x08); } void main() { set_tris_e(0x00); set_tris_d(0x00); set_tris_a(0xff); set_tris_c(0x00); ini_adxl345(); while(true) { int id, pow; id= read(0x53,0x00); //lay dia chi id adxl345 va dia chi luon la e5 pow=read(0x53,0x2D); // lay gia tri cai dat POWER_CONTROL int16 x,z,y; //lay gia tri x,y,z x=(read(0x53,0x33)*256) | (read(0x53,0x32)); y=(read(0x53,0x35)*256) | (read(0x53,0x34)); z=(read(0x53,0x37)*256) | (read(0x53,0x36)); printf(" x= %ld, y= %ld, z=%ld id=%x, pow=%x",x,y,z,id,pow); //hien thi len rs232 puts(" "); } } //ham viet gia tri vao void write(int dv, byte address, byte val) { i2c_start(); i2c_write(dv<<1); i2c_write(address); i2c_write(val); i2c_stop(); } //ham doc gia tri ra byte read(int dv, byte address) { int value; i2c_start(); i2c_write(dv<<1); i2c_write(address); i2c_start(); i2c_write(dv<<1|0x01); value=i2c_read(0); i2c_stop(); return value; } video: http://youtu.be/fbldodPhFRU |
![]() |
![]() |
|
|