单片机printf函数实验七 并行ADC 与DAC
AD:
1、时序详解
下降沿结束开始转化
结束转化
CONVST
1->0 0-0-0 0 0->1    1    1    1 下降沿结束开始转化
BUSY
0->1 1-1-1 1->0 0 0 0 0 转化时为高电平,芯片告
诉单片机正忙
CS
1->0 0->1    1 1->0 0 0    1 片选信号,低电平有效
RD
1    1    1 1->0 0 0    1 低电平时开始读取12位数
字量
BYTE
1
0 低电平时读取高8位,高电平时读取低四位数据(由于一次只能读取8位)
011D D
正在转化
D11-D 3
D3-d0
2、程序问题
将程序转化为库函数操作时,有如下情况:
SysCtlPeripheralEnable (SYSCTL_PERIPH_GPIOA);  //开启A 模块 SysCtlGPIOAHBEnable (SYSCTL_PERIPH_GPIOA);
GPIOPinTypeGPIOInput (GPIO_PORTA_BASE,GPIO_PIN_6|GPIO_PIN_7);  //A6,A7配置输入
上述程序段为库函数操作,等同于如下代码:
GPIO_PORTA_AHB_DIR_R = 0x00; //PA7,PA6数字输入
GPIO_PORTA_AHB_DEN_R = 0xc0;
相比较而言,寄存器操作可读性很差,而库函数操作可读性好更容易理解。
DA:
R/一起为低电平时,input latch(锁存器)接收CS:片选信号,与W
12位数字量,锁存器会把数据送到寄存器;与W
R/一起为高电平时,读回DAC register(寄存器)中的数字量。
接收数据后便开始把数字量转化为模拟量输出。
实验八三轴加速度传感器实验
加速度传感器是一种能够测量加速度的设备。
此实验是通过I2C总线对ADXL345芯片进行操作。
程序流程:
设置系统时钟--->UART初始化--->GPIO管脚配置--->ADXL345初始化--->循化下面两步:读取ADXL345中的6个数据寄存器中的数据--->
原始数据转化为对应加速度值并上传。
Problem:
1、下列代码对寄存器操作了什么?
char dataBuf2[2] = {0x2C, 0x18};
i2c_write(2,SLAVE_ADDRESS_W,dataBuf2);
如下图所示,
D7 D6 D5 D4 D3 D2 D1 D0
0 0 0 Low_POWER 速率
由实验指导书表8-2、3、4可知,0x2C是控制方式,表示数据速率及功率模式控制;0x0B是上表的八位寄存器值,表示功耗设为低功率模式,速率设为25Hz,带宽为12.5Hz。
由此可知其他ADXL345初始化操作过程类似。
2、if(I2C_RECV_DATA[1]>16)
{
I2C_RECV_DATA[1]=0xFF-I2C_RECV_DATA[1];
I2C_RECV_DATA[0]=0xFF-I2C_RECV_DATA[0];
mg[0]=I2C_RECV_DATA[0]*4+I2C_RECV_DATA[1]*1024;
UARTprintf("-%d mg      ",mg[0]);
}
表示X轴数据超过测量范围16时,取超过量的反,然后计算X轴加
速度。