当前位置:首页 > 嵌入式 > 嵌入式硬件
[导读]mega162具有以下特性:1. 双USART; 2. 低能耗,工作电压低; 3. 多个I/O可以当作外部中断,相比之下M16只有3个外部中断可用。当初选型mega162的时候是看中了它的双USART的功

mega162具有以下特性:1. 双USART; 2. 低能耗,工作电压低; 3. 多个I/O可以当作外部中断,相比之下M16只有3个外部中断可用。

当初选型mega162的时候是看中了它的双USART的功能;但是它却没集成A/D,当想要扩展A/D功能的时候,只有外部挂接A/D芯片了;这本不是AV先生的初衷,因为许多AVR 单片机 集成了A/D、EEPROM。

外部A/D芯片选用TI公司的TLC1543,这是一个11通道、10位的A/D,速度38ksps,应用非常广泛,下面是根据51BBS龙版主的C源码转嫁过来的。设计主要注意以下几个方面:

1。AVR具有 1指令/时钟周期的特性,同时又可以预取指令,提高了指令执行速度(1Mips/MHz);传统51是每 1指令/6个时钟周期。使在同样外部晶振的条件下,ADD和DEC的执行时间,AVR比51快了6倍(这个可能不太严格,由于内核构架的不同),所以在用nop或者i++/i--做芯片时序延时的时候,要考虑时间是否够。

2。AVR的端口是可设置方向的,相对于TLC为进的端口,AVR要设置为出,反之亦然。

3。AVR的端口逻辑有专门的寄存器,比如PINA是PA口的寄存器,这个寄存器只读,当判断AVR的端口电平高低的时候,只能访问它。

下面是我的代码:由于网页原因,格式总靠左。本来我是参照“华为编程规范”做的。

/*----------------------------------------------------------------

*File Name: UPSSpyMain_AD.c -

*Description: 从TLC1543读取采样值,形参port是采样的通道号 -

*Project: -

*MCU type: Mega162 7.3728mhz -

-

*Company: WY -

*Compiler: ICCAVR6.30 -

*MODIFY: 郭准 06.3.19 -

-----------------------------------------------------------------*/

#include

#include

#include

#include

#include

#include

#include

#include

//-----------------

#define uchar unsigned char

#define uint unsigned int

#define ulint unsigned long int

#define nop() NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();

//-----------------TLC1543 端口定义

#define CLOCK 0 //PORTC的0位

#define D_IN 1 //PORTC的1位

#define D_OUT 2 //PORTC的2位

#define _CS 3 //PORTC的3位

//-----------------端口电平变化的 定义

#define CLOCK_0 PORTC&=~(1<#define CLOCK_1 PORTC|=(1<

#define D_IN_0 PORTC&=~(1<#define D_IN_1 PORTC|=(1<

#define D_OUT_0 PORTC&=~(1<#define D_OUT_1 PORTC|=(1<

#define _CS_0 PORTC&=~(1<<_CS)

#define _CS_1 PORTC|=(1<<_CS)

//------------------------------------------------------

//功能:从TLC1543读取采样值

//入口:channel = 通道号 .0:0通道;1:1通道。。。。。。。

//出口:

//设计:郭准,伟业,2006/3/19

//------------------------------------------------------

uint read1543(uchar channel)

{

uint ad;

uint i;

uchar al=0;

uchar ah=0;

//----------------端口方向

PORTC = 0xFF; //PC0,PC1,PC3推挽1输出;PC2 I/O带上拉电阻输入

DDRC = 0xFB; //

CLOCK_0; //时钟源初始为低

_CS_0; //片选为低,选中芯片

//---------------等待一个设置时间+两个内部系统时钟的下降沿

for(i=0;i<21;i++)

{;}

//---------------把通道号打入1543

channel<<=4; //左移4位的作用是为了,下面高位比较方便

al=0;ah=0;

for (i=0;i<4;i++)

{

if((channel&0x80))

{

D_IN_1;

nop();

}

else

{

D_IN_0;

nop();

}

CLOCK_1; //时钟的下降沿 锁存数据,地址移入

nop();

CLOCK_0;

channel<<=1;

}

//---------------//填充6个CLOCK

for (i=0;i<6;i++) //采样一直持续6个 I/O CLOCK周期

{

CLOCK_1;

nop();

CLOCK_0;

nop();

}

nop();

//---------------//等待AD转换

_CS_1;

for(i=0;i<12;i++) //多个单周期延时nop,微秒级延时

{

nop();

}

_CS_0;

nop();

//---------------//取D9,D8

for (i=0;i<2;i++)

{

// D_OUT_1;

ah<<=1;

CLOCK_1;

if (PINC&(1< {

ah|=0x01;

}

CLOCK_0;

}

//---------------//取D7--D0

for (i=0;i<8;i++)

{

al<<=1;

CLOCK_1;

if (PINC&(1< {

al|=0x01;

}

CLOCK_0;

}

_CS_1; // 关闭1543

//---------------//得到AD值

ad=(uint)ah;

ad<<=8;

ad|=al;

return (ad);

}

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭