四通道PWM
8路10位ADC,8个单端通道,2个具有可编程增益(1x, 10x, 或200x)的差分通道
端口A(PA7..PA0) 端口A 做为A/D 转换器的模拟输入端。端口A 为8 位双向I/O 口,具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特性,可以输出和吸收大电流。作为输入使用时,若内部上拉电阻使能,端口被外部电路拉低时将输出电流。在复位过程中,即使系统时钟还未起振,端口A 处于高阻状态。
端口B(PB7..PB0) 端口B 为8 位双向I/O 口,具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特性,可以输出和吸收大电流。作为输入使用时,若内部上拉电阻使能,端口被外部电路拉低时将输出电流。在复位过程中,即使系统时钟还未起振,端口B 处于高阻状态。
端口B 也可以用做其他不同的特殊功能.
端口C(PC7..PC0) 端口C 为8 位双向I/O 口,具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特性,可以输出和吸收大电流。作为输入使用时,若内部上拉电阻使能,端口被外部电路拉低时将输出电流。在复位过程中,即使系统时钟还未起振,端口C 处于高阻状态。如果JTAG接口使能,即使复位出现引脚 PC5(TDI)、 PC3(TMS)与 PC2(TCK)的上拉电阻被激活。端口C 也可以用做其他不同的特殊功能.
端口D(PD7..PD0) 端口D 为8 位双向I/O 口,具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特性,可以输出和吸收大电流。作为输入使用时,若内部上拉电阻使能,则端口被外部电路拉低时将输出电流。在复位过程中,即使系统时钟还未起振,端口D 处于高阻状态。端口D 也可以用做其他不同的特殊功能.
硬件方面基本懂了,剩下的是程序了,以下是该死的ADC数模转换器的大致使用,不太懂
***************************************************************************************************************************************
本程序简单的示范了如何使用ATMEGA16的ADC模数转换器 普通的单端输入 差分输入及校准 基准电压的校准 查询方式 中断方式 数据格式的变换 出于简化程序考虑,各种数据没有对外输出,学习时建议使用JTAG ICE硬件仿真器
***************************************************************************************************************************************
以下是例程
****************************************************/
#include #include #include #include //管脚定义 #define in_Single 0 //PA0(ADC0) #define in_Diff_P 3 //PA3(ADC3) #define in_Diff_N 2 //PA2(ADC2) //常量定义 //单端通道,不放大 #define AD_SE_ADC0 0x00 //ADC0 #define AD_SE_ADC1 0x01 //ADC1 #define AD_SE_ADC2 0x02 //ADC2 #define AD_SE_ADC3 0x03 //ADC3 #define AD_SE_ADC4 0x04 //ADC4 #define AD_SE_ADC5 0x05 //ADC5 #define AD_SE_ADC6 0x06 //ADC6 #define AD_SE_ADC7 0x07 //ADC7 //差分通道ADC0作负端,10/200倍放大 #define AD_Diff0_0_10x 0x08 //ADC0+ ADC0-, 10倍放大,校准用 #define AD_Diff1_0_10x 0x09 //ADC1+ ADC0-, 10倍放大 #define AD_Diff0_0_200x 0x0A //ADC0+ ADC0-,200倍放大,校准用 #define AD_Diff1_0_200x 0x0B //ADC1+ ADC0-,200倍放大 //差分通道ADC2作负端,10/200倍放大 #define AD_Diff2_2_10x 0x0C //ADC2+ ADC2-, 10倍放大,校准用 #define AD_Diff3_2_10x 0x0D //ADC3+ ADC2-, 10倍放大 #define AD_Diff2_2_200x 0x0E //ADC2+ ADC2-,200倍放大,校准用 #define AD_Diff3_2_200x 0x0F //ADC3+ ADC2-,200倍放大 //差分通道ADC1作负端,不放大 #define AD_Diff0_1_1x 0x10 //ADC0+ ADC1- #define AD_Diff1_1_1x 0x11 //ADC1+ ADC1-,校准用 #define AD_Diff2_1_1x 0x12 //ADC2+ ADC1- #define AD_Diff3_1_1x 0x13 //ADC3+ ADC1- #define AD_Diff4_1_1x 0x14 //ADC4+ ADC1- #define AD_Diff5_1_1x 0x15 //ADC5+ ADC1- #define AD_Diff6_1_1x 0x16 //ADC6+ ADC1- #define AD_Diff7_1_1x 0x17 //ADC7+ ADC1- //差分通道ADC2作负端,不放大 #define AD_Diff0_2_1x 0x18 //ADC0+ ADC2- #define AD_Diff1_2_1x 0x19 //ADC1+ ADC2- #define AD_Diff2_2_1x 0x1A //ADC2+ ADC2-,校准用 #define AD_Diff3_2_1x 0x1B //ADC3+ ADC2- #define AD_Diff4_2_1x 0x1C //ADC4+ ADC2- #define AD_Diff5_2_1x 0x1D //ADC5+ ADC2- //单端通道,不放大 #define AD_SE_VBG 0x1E //VBG 内部能隙1.22V电压基准,校准用 #define AD_SE_GND 0x1F //接地 校准用 //注: //差分通道,如果使用1x或10x增益,可得到8位分辨率。如果使用200x增益,可得到7位分辨率。 //在PDIP封装下的差分输入通道器件未经测试。只保证器件在TQFP与MLF封装下正常工作。 #define Vref 2556 //mV 实测的Vref引脚电压@5.0V供电 //#define Vref 2550 //mV 实测的Vref引脚电压@3.3V供电 //全局变量 unsigned int ADC_SingleEnded; //单端输入的ADC值 int ADC_Diff; //差分输入的ADC值 volatile unsigned int ADC_INT_SE; //中断模式用的单端输入ADC值,会在中断服务程序中被修改, //须加volatile限定 volatile unsigned char ADC_OK; //ADC状态,会在中断服务程序中被修改,须加volatile限定 unsigned int LED_Volt; //变换后的电压mV int LED_Curr; //变换后的电流100uA //仿真时在watch窗口,监控这些全局变量。 unsigned int read_adc(unsigned char adc_input)//查询方式读取ADC单端通道 { ADMUX=(0xc0|adc_input); //adc_input:单端通道 0x00~0x07,0x1E,0x1F //0xc0:选择内部2.56V参考电压 ADCSRA|=(1< // while ((ADCSRA&(1< ADCSRA|=(1< } int read_adc_diff(unsigned char adc_input)//查询方式读取ADC差分通道 { unsigned int ADC_FIX; ADMUX=(0xc0|adc_input); //adc_input:差分通道 0x08~0x1D _delay_ms(1); //等待差分增益稳定>125uS ADCSRA|=(1< ADCSRA|=(1< //第一次转换结果准确率很低。 //用户最好舍弃第一次转换结果。 ADCSRA|=(1< ADCSRA|=(1< //输出结果用2的补码形式表示 //可正可负 +/-9bit -512~+511 //即M16差分通道的ADC+输入端的电压可以大于ADC-,也可以小于ADC-。 //Tiny26就不行,ADC+输入端的电压必须大于或等于ADC-,为+10bit if (ADC_FIX>=0x0200) //负数要变换,正数不用 { ADC_FIX|=0xFC00; //变换成16位无符号整数 } return (int)ADC_FIX; } SIGNAL(SIG_ADC) //ADC中断服务程序 { //硬件自动清除ADIF标志位 ADC_INT_SE=ADC; //读取结果 ADC_OK=1; } int main(void) { long temp32; ADC_SingleEnded =0; ADC_Diff=0; ADC_INT_SE=0; //上电默认DDRx=0x00,PORTx=0x00 输入,无上拉电阻 PORTB=0xFF; //不用的管脚使能内部上拉电阻。 PORTC=0xFF; PORTD=0xFF; PORTA=~((1< ADCSRA=(1< while (1) { //实测的Vref引脚电压 =2556mV ADC_SingleEnded=read_adc(AD_SE_ADC0); //查询方式读取ADC0 temp32=(long)ADC_SingleEnded*Vref; LED_Volt=(unsigned int)(temp32/1024); ADC_Diff =read_adc_diff(AD_Diff3_2_10x); ADC_Diff-=read_adc_diff(AD_Diff2_2_10x);//校准OFFSET temp32=(long)ADC_Diff*Vref; LED_Curr=(unsigned int)(temp32/(512*10)); //[单位为100uA] //查询方式读取ADC3+,ADC2- 10倍放大 max +/-255.6mV //10欧姆 1mA=10mV max +/-25.56mA //分辨率约0.5mV=50uA,显示取整为100uA单位 ADCSRA|=(1< ADC_OK=0; //软件标志清零 ADCSRA|=(1< ADCSRA&=~(1< }
上一篇:AVR单片机的IO端口介绍
下一篇:51单片机程序转AVR的方法
推荐阅读
史海拾趣
进入21世纪后,高通在推动5G技术发展方面发挥了关键作用。作为真正的5G领军企业,高通在基础研发方面持续投入,拥有引领和参与标准制定的长期历史。高通的5G技术涵盖了从系统构建到多样化应用的各个方面,包括毫米波频谱的利用、大规模MIMO技术的演进等。这些突破性发明为现代蜂窝通信提供了强有力的支撑,使得高通在5G标准制定和技术实施方面占据了核心地位。高通已签订超过150份5G许可协议,为全球超过180亿台终端提供了技术支持。
随着电子行业的不断发展,客户对电子元器件的需求也在不断变化。Elprotronic Inc.紧跟市场趋势,不断推出具有创新性的产品和技术。其中,一项名为“高速数据传输技术”的创新成果引起了业界的广泛关注。这项技术可以大幅提高数据传输速度,同时保证数据的稳定性和安全性。这一突破性的技术创新为Elprotronic Inc.赢得了更多客户的信赖和支持,也进一步巩固了公司在行业中的地位。
Curtis Industries公司成立于20世纪初期,当时电子行业正处于起步阶段。创始人凭借对技术的热爱和对市场的敏锐洞察力,决定投身于电子行业。在初创阶段,公司面临了诸多困难,如资金紧张、技术难题等。然而,创始人始终坚信自己的理念,带领团队日夜兼程地研发新产品,不断寻求突破。正是这份坚定与坚持,为公司的发展奠定了坚实的基础。
为了进一步拓展业务版图,千志电子开始进军国际市场。2006年,千志电子在香港设立了千志电子(香港)有限公司,将其作为国际服务据点重心之一。这一举措使千志电子能够更好地了解国际市场需求和趋势,加强与国外客户的联系和合作。同时,千志电子还积极参加国际展览和论坛,展示其优质产品和先进技术,提高了品牌知名度和国际影响力。
随着市场竞争的加剧,Chip Supply Micro Devices意识到成本控制的重要性。公司开始着手优化供应链管理,通过引入先进的生产管理系统和自动化设备,提高了生产效率,降低了生产成本。同时,公司还与供应商建立了长期稳定的合作关系,确保了原材料的稳定供应和优质品质。这些措施使得Chip Supply Micro Devices在价格上具备了竞争优势,进一步提升了市场份额。
Altara高科技实现白皮书-拼接多幅鱼眼图像,产生全景视图 本白皮书讨论 Altera 和 Manipal Dot Net 开发的创新体系结构,利用 FPGA 拼接多幅鱼眼图像,产生全景视图。这一体系结构为驾驶员提供了车辆周围的全景图像,帮助他们更轻松的驾驶车辆。 鱼眼镜头具有超宽视角特性,性价 ...… 查看全部问答∨ |
近年来,在单片机系统中嵌入操作系统已经成为人们越来越关心的一个话题。本文通过对一种源码公开的嵌入式实时操作系统μC/OS-II的分析,以51系列单片机为例,阐述了在单片机中使用该嵌入式操作系统的优缺点,以及在应用中应当注意的一些问题。 关 ...… 查看全部问答∨ |
请问关于在注册表里面设置问题 【】 我的nandflash是64MB的,三个分区,一是bootloader 二是 wince系统预留,三是为用户的存储空间; 我在注册表里面用到了 [code] [HKEY_LOC ...… 查看全部问答∨ |
|
我的程序在Wince 下需要使用黑体, 但是Wince下没有黑体,我需要从Windows下 copy一份, 这样是否涉及到字体的版权问题,怎么解决才好呢?谢谢~ … 查看全部问答∨ |
|
本帖最后由 dontium 于 2015-1-23 11:32 编辑 1/f噪声 运算放大器的1/f 噪声也被称作闪烁噪声。在示波器上使用慢扫描来观察1/f噪声可以看到一条漂移的基线,因为高频噪声叠加在较大的低频成分上。1/f噪声和天气一样,是一个缓慢变化的过程,可能 ...… 查看全部问答∨ |