PSoC® 3 FirstTouch™ Starter Kit 例子源代码分析之Bubble Level Emulator
本帖最后由 wangku001wei 于 2012-9-24 09:33 编辑先找了个相对比较简单的代码进行分析 ;P
首先看原理图
dPort_AcclControl 控制加速度传感器的 ST/MODEMODEACC_ENABLE(注意先后顺序) 引脚PdPort_LSB 对应P2口的P2控制dPort_MSB 对应P4口的P4控制注意 PdPort_LSB 的最高位和 dPort_MSB的最低位都是由同一个控制寄存器 LED_Control_Reg 第3位 LED_Control_Reg 经反向后输出 是为了实现在水平位置时候将最中间的两个LED灯同时点亮之所以反向是因为电路设计为低电平点亮LED,高电平熄灭LED
代码分析void main(){ int16 BubbleValue=0;
/* 使能全局中断 */ CYGlobalIntEnable;
/* 关闭所有的LED灯 on PORT2(pin 0-3) and PORT4 pin(0-3) */ LED_Control_Reg_Write(0);
/* 设置加速度传感器的控制引脚 注1*/ dPort_AcclControl_Write(ACCL_SET_CONTROL);
/* 开始AD转换 */ ADC_Start(); ADC_StartConvert();
while(1) { /* 等待AD转换完成 */ ADC_IsEndConversion(ADC_WAIT_FOR_RESULT);
/* 读取AD转换的结果*/ BubbleValue = ADC_GetResult16(); /* 对转换结果值进行处理 注2*/ BubbleValue = ((BubbleValue - G_MEAN_VALUE)>>GAIN);
/* 将处理结果值加3以便将LED的显示偏移到中间 */ BubbleValue+=3;
/* 对测量的加速度结果超过限制阈值的处理 */ if(BubbleValue < 0) { BubbleValue = 0; } if(BubbleValue > 6) { BubbleValue = 6; }
/* 控制LED灯 */ /* 第3位控制了引脚3 4 以便实现当板子水平是很中间的两个LED点亮 */ LED_Control_Reg_Write(1<<BubbleValue); }}
注1Bubble.h 文件中宏定义了#define ACCL_SET_CONTROL ((uint8) 0x06)对应加速度传感器的引脚ENABLE=1, MODE=1, ST/MODE=LOW(可查找传感器的使用说明)
注2减去 3300 的意思在 Bubble.h 文件中有提到加速度传感器水平位置时候测量到的电压约为1.65V,对应12位ADC转换结果的数字为3300,因此减去3300得到实际的倾斜程度除以 GAIN(7)是由于采用7位的寄存器控制了8个LED灯,为了将不同程度的倾斜分成7段
关于ADC转换组件的使用 可参考帮助文档 在配置对话框框中
单击Data Sheet即可出现一个PDF
还是要赞一记 wangku001wei 发表于 2012-9-24 21:55 static/image/common/back.gif
木有啊,第一次接触只好先拿帮助文档 Tutorial Guide 之类的先上手 总觉得少了点什么 ...
哦………… 醉清风 发表于 2012-9-24 21:52 static/image/common/back.gif
LZ 以前学过么??
木有啊,第一次接触只好先拿帮助文档 Tutorial Guide 之类的先上手 总觉得少了点什么 LZ 以前学过么?? :lol很不错啊...哈哈哈顶一个 wangku001wei 发表于 2012-9-24 09:45 static/image/common/back.gif
争取两天一个吧
相当给力!!!:handshake到时候把楼主的教程整理一下,给学习者作参考~ xinxincaijq 发表于 2012-9-24 09:39 static/image/common/back.gif
期待楼主的连载~~~
争取两天一个吧 期待楼主的连载~~~:lol 抢个沙发顶一个~~~楼主很给力!
页:
[1]