首先,如果阿莫觉得我这个帖子的位置不对请帮我转移一下,谢谢
为了做SI4432的实验我做了C8051F920开发板并且预留了4432模块的接口,使用CP2102将串口转为USB方便开发使用
先上个图:
C8051F920开发板
(原文件名:调整大小 C8051F920_4.JPG)
上面放置了两个容性触摸按键,利用920内部支持的容性比较器,本来是想要做可以用USB供电的,后来考虑使用笔记本可能会烧毁南桥。就没做,供电方面
既可以使用EC6仿真器供电也可以使用5~9V直流电源供电,在外接适配器接口处我放置一颗MBR0520L二极管,下版可能会在USB处加入一颗ESD保护器件。所有的IO接口都引出,板子的布局始终不太满意,希望大家能给点建议。
原理图
原理图
ourdev_624144IHWZ7P.pdf(文件大小:323K) (原文件名:C8051F930B.pdf)
板子的性能测试下来还是没有什么问题的,预留了32768HZ和外接晶振,电源部分使用一颗AMS1117-3.3的,之前用LM1117-3.3发现在轻载条件下纹波是差不多的。出于成本考虑就用AMS1117-3.3了。
小弟做C8051F系列的单片机有3年的时间了,希望大家不吝指教,虚心学习一下
-----------------------------------------------------------------------
TouchSense是在TOPLAYER,不同于F8XX系列,按键是在TOP,到MCU的线在BUTTOM。
而且就按键的样式来说,和CS0 MODE也截然不同。C8051F920是通过配置IO为
模拟然后通过内部的比较器来实现触摸按键的,而且不提供Auto Scan模式
楼主,有没有 C8051F920 的AD采集程序? AD采集的数值,和万用表量出来的差距很大,而且数值基本上上不会变化
我用的是 Burst 模式采集(具备自动平均值的功能),采样精度是12位,定时器2 的下降沿 被配置为 burst AD 转化的条件
//-----------------------------------------------------------------------------
// ADC0_Init
//-----------------------------------------------------------------------------
// Configures ADC0 to make single-ended analog measurements on pin P1.6
// AD采用 Burst 模式采集,具备自动平均值的功能,采样精度是12位
// 定时器2 的下降沿 被配置为 burst AD 转化的条件.
//-----------------------------------------------------------------------------
void ADC0_Init (void)
{
//ADC0MX = 0x0E; // Select P1.6=Temp as the ADC input pin ****** AD 只能选择一个引脚?***
ADC0MX = 0x0F; // Select P1.7=Temp as the ADC input pin
ADC0CN = 0x42; // ADC0 无效, 开启 Burst 模式, ********* ?ADC0无效? ******
// 在 TMR2 下降沿的时候开启
ADC0AC = 0x13; // 010:右对齐。右移2位。
// 011:执行和累加16次转换。
REF0CN = 0x18; // REF0CN 选择地基准 和 电压基准
// REFSL:11 电压基准选为内部1.65V高速电压基准
ADC0CF = ((SYSCLK/8300000))<<3; //*********Set SAR clock to 8.3MHz********
ADC0CF |= 0x00; // Select Gain of 0.5,这样值可以翻倍,因为参考电压是1.65v
EIE1 |= 0x08; // Enable ADC0 conversion complete int.
}
//-----------------------------------------------------------------------------
// ADC0_ISR
//-----------------------------------------------------------------------------
// This ISR averages 2048 samples then prints the result to the terminal. The
// ISR is called after each ADC conversion which is triggered by Timer2.
//-----------------------------------------------------------------------------
INTERRUPT(ADC_ISR, INTERRUPT_ADC0_EOC)
{
uint i;
unsigned long result;
unsigned long mV; // measured voltage in mV
//static unsigned char sample_count = 0;
AD0INT = 0; // clear ADC0 conv. complete flag
result = ADC0; // copy ADC0 into result
// The 12-bit ADC value represents the voltage applied
// to P1.4 according to the following equation:
//
// Vref (mV)
// measurement (mV) = --------------- * result (bits)
// ((2^10)-1)*2^2 (bits)
mV = result * 3300 / 4092; // 0xC86 (3206) --> 1.56V
for(i = 0;i <501;i++) // 查表,i 为温度值
{
if(mV >= VT_Table)
{
temperature = i;
break;
}
}
LED = ~LED;
}
万用表测出来 1.59V的,但程序仿真 结果 mV = 0XC67 即 3207 ; 当温度值变化时,万用表测是有变化的,但AD值基本不变 很奇怪
大家帮忙看一下程序有没有问题吧 ,谢谢
QQ截图20120611113313.jpg (279.38 KB, 下载次数: 0)
下载附件
C8051F920_AD 采集
2012-6-11 11:34 上传
一周热门 更多>