L3G4200D的焊接和使用问题
各位前辈,小弟最近在taobao上,下手买了一块L3G4200D和配套的测试板,贴片零件要自己焊上去。其他零件都搞定了,唯独这个LGA-16的L3G4200D处理不好。硬件安装上,L3G4200D的所有脚都在片子下,没法直接焊接。目前我的解决方法是在测试板和芯片背后分别上锡,然后对准,用热风枪吹。但是这测试板和芯片两侧的焊点似乎不能存很多焊锡,因此非常怀疑吹上后,有虚焊,但焊脚在芯片下方,也没法检测。
接线上,我只接了测试板的SDA、SCL以及VDD GND。测试板上CS已经是上拉了,Vdd_IO接VDD。
软件上,我目前用Arduino nano(atmega 328)来驱动这款芯片,用Wire库,但程序跑不通,Wire.available() 始终= 0。
目前有几点不明:
1.SA0该怎么接。DR和INT应该不是必须接的吧。
2.通信上,淘宝卖家给的C51例程中I2C有ACK函数:
/********************************************************************
应答子函数
函数原型: void Ack_I2c(bit a);
功能: 主控器进行应答信号(可以是应答或非应答信号,由位参数a决定)
********************************************************************/
void Ack_I2c(bit a)
{
if(a==0)SDA=0; /*在此发出应答或非应答信号 */
else SDA=1;
Delay1us(3);
SCL=1;
Delay1us(5); /*时钟低电平周期大于4μs*/
SCL=0; /*清时钟线,钳住I2C总线以便继续接收*/
Delay1us(2);
}
但是Arduino 的Wire库里,没有对应的函数,反而多了一个Wire.available()这个c51例程里没有的函数。这样一来,我就不知道怎么移植代码了。
之前,我在调试mma7455的i2c中,Wire库很正常,但mma7455的i2c操作都是读取单字节信息。这次的L3G4200D要一次读6个字节。
现在硬件问题和软件问题交迫。测试非常困难。
望得到前辈指教! #include "L3G4200D.h"
#define ClrGyCS() GPIOC->BSRR = 1 << (16 + 3)
#define SetGyCS() GPIOC->BSRR = 1 << 3
#define ClrGyCK() GPIOA->BSRR = 1 << (16 + 1)
#define SetGyCK() GPIOA->BSRR = 1 << 1
#define ClrGyIO() GPIOA->BSRR = 1 << (16 + 0)
#define SetGyIO() GPIOA->BSRR = 1 << 0
#define StateGyIO() (GPIOA->IDR & 1)
extern void Delay_us(INT32U cnt);
void L3G4200DInit(void)
{
SetGyCS();
SetGyCK();
Delay_us(100000);
ClrGyCS();
L3G4200DWriteByte(0x60);
L3G4200DWriteByte(0xEF);
L3G4200DWriteByte(0x00);
L3G4200DWriteByte(0x00);
L3G4200DWriteByte(0xD1);
L3G4200DWriteByte(0x00);
SetGyCS();
}
void L3G4200DReadData(INT16S *px, INT16S *py, INT16S *pz)
{
ClrGyCS();
L3G4200DWriteByte(0xE8);
*px= (INT16U)L3G4200DReadByte() << 8;
*px |= (INT16U)L3G4200DReadByte();
*py= (INT16U)L3G4200DReadByte() << 8;
*py |= (INT16U)L3G4200DReadByte();
*pz= (INT16U)L3G4200DReadByte() << 8;
*pz |= (INT16U)L3G4200DReadByte();
SetGyCS();
}
void L3G4200DWriteByte(INT8U dat)
{
INT8U i;
Delay_us(1);
for(i = 0; i < 8; i++) {
if(dat & 0x80) SetGyIO();
else ClrGyIO();
dat <<= 1;
Delay_us(1);
ClrGyCK();
Delay_us(1);
SetGyCK();
}
Delay_us(1);
}
INT8U L3G4200DReadByte(void)
{
INT8U i,dat = 0;
SetGyIO();
for(i = 0; i < 8; i++) {
Delay_us(1);
ClrGyCK();
Delay_us(1);
dat <<= 1;
if(StateGyIO()) dat++;
SetGyCK();
}
Delay_us(1);
return dat;
} 我们家供应L3G4200DLSM303DLH 特价现货 样品也可以出售哦
联系电话15889617160 QQ1085092729 谢谢1楼的程序,尽管不是arduino的,今天把芯片调通了,软硬件都没问题了。 回复【3楼】dongfang_a
-----------------------------------------------------------------------
你好,我这两天也在调这个片子,现在有几个地方不大明白。
1.寄存器的配置。使用时需要对其寄存器进行配置吗?需要的话,怎么PDF里没有寄存器的地址说明啊。
2.SUB-ADDRESS的含义。我需要不断的采集他的数据,这个SUB-ADDRESS该怎么写?
谢谢了。 楼主试过用SPI读写吗? 楼主,可否把陀螺仪的相关电路共享一下啊...^_^ 回复【5楼】wulax
-----------------------------------------------------------------------
1L的代码是3线SPI 各位前辈
请问下让L3G4200D是不是给控制寄存器ctrl——reg1 赋值 0x47然后读值就可以 ?
我是 先发地址 0x20再发数据 0x47 ; 这里设置ctrl_reg1 = 0x47
再发地址 0xa8 读数据 ;这里读X轴的低位
可是看SDO引脚没有信号输出啊? 供应L3G4200D 50RMB/PCSLSM303DLH 100RMB/PCS 特价现货
联系电话15889617160 QQ1085092729 楼主能否分享一下你之前错在哪里使自己没有调出来吗? LZ 能不能共享下电路图,本人也在研究这款芯片!colinedeng@163.com
谢谢! L3G4200D iPhone三轴陀螺仪 买芯片送PCB(图)调试程序
L3G4200D已经满刻度的± 250 / ± 500 / ± 2000 DPS,是能够测量用户可选择的带宽率。这些伟大的游戏和虚拟现实的输入设备,GPS导航系统和机器人技术的工作 。
LSM303DLH iPhone三轴加速度计买芯片送PCB(图)调试程序
LSM303DLH是一个三轴加速度计与三轴磁传感器相结合。该传感器具有一个易于使用的I2C接口。电源电压应在2.5和3.3 VDC之间
热线15889617160 QQ108592729 anyever@walsoon.com贾生 回复【3楼】dongfang_a
-----------------------------------------------------------------------
您好,可否提供您的arduino下I2C测试代码给小弟学习下,我现在也在弄这个,目前还没有思路。谢谢!
Email:dingfang1@lenovo.com 楼主热风枪是对着什么方向吹的啊? 回复【10楼】frankshen
-----------------------------------------------------------------------
不知道你解决了没有,我也是按照这个顺序去读写没有数据。也不不知道是芯片坏了,还是时序、电路有问题。我会读0x20地址也读不出来写进去的值 我也是这样焊接的,不过容易把芯片搞坏。 这个要多少钱来着? mark 我焊这种芯片的时候一半是画板的时候把焊盘向外延伸0.8-1mm,焊的时候先把芯片翻过来,拿锡丝在芯片引脚上镀锡,然后摆正,烙铁头上挂锡加热焊盘固定。然后再各个边的焊盘上锡焊接,原先固定的那边也要把固定的锡刮掉,上点流动性好的新锡。我经常用这种办法焊加速度计,问题不大,偶尔放歪了才需要拿热风枪加热调整 楼主能不能把电路图发一下。
aricc@sohu.com 回复【4楼】show41
-----------------------------------------------------------------------
你去www.alldatasheet.com去下载。我一开始和你情况差不多,没寄存器的索引。 回复【18楼】lxl_lw
-----------------------------------------------------------------------
我一般直接吹芯片,或者四周先吹一下 回复【楼主位】dongfang_a
-----------------------------------------------------------------------
楼主可否发一下你的寄存器的一些配置? 回复【楼主位】dongfang_a
-----------------------------------------------------------------------
我也想知道是什么原因导致先前调试失败......./emotion/em007.gif 学习了,这是模拟SPI.用同志用硬件stm32的SPI调通的没有呀 我的做法是 用热风枪吹 并且加助焊膏助焊膏有一定的最高温度 能保护芯片不至于太高温度 并且焊锡受热均匀 溶化后能把芯片浮起来 自动对准 Name_006 发表于 2012-3-5 23:58 static/image/common/back.gif
我的做法是 用热风枪吹 并且加助焊膏助焊膏有一定的最高温度 能保护芯片不至于太高温度 并且焊锡受热均匀 ...
请问,热风枪温度设置多少比较合适呢/ HYZ1989 发表于 2012-9-6 00:19 static/image/common/back.gif
请问,热风枪温度设置多少比较合适呢/
一般的芯片 貌似 最高温度 都在 270到 350 之间一般热风枪 250度左右就足够了 这东西的确不容易焊,你为什么不直接买焊好的模块呢? 谢谢L3G4200D资料分享
页:
[1]