ad1674应用电路
本电路设计有查询、中断和DMA 三种数据传输方式。通过一拨码盘开关来选择不同的的传输方式。如图3 所示,当A/D 转换完毕时,标志位STS 由高电平变为低是电平,从而引起D 触发器U20A 触发,U20A 的输出Q 由低电平变成高电平。当拨码盘开关S1 选择为查询方式时,该U20A 的输出Q 通过一个三态门(端口地址为0X23F)与数据线D6 相连,提供计算机查询;在中断方式下,该U20A 的输出Q 直接与硬中断引脚IRQ2 相连,当Q 由低电平变成高电平时,引起计算机中断。在前两种方式下,通过软件编程,向一锁存器U22 的最低位写入0 或1,选择读取A/D 转换数据的高八位或低四位,且由专门的端口(地址为0X23D)读取A/D 转换的数据。实现的硬件电路简单。而在DMA 方式下,通过
应答信号DACK1 寻址,并不由专门的端口读取A/D 转换的数据,故选择A/D 转换数据的高八位或低四
位的功能必须由硬件电路来实现,比较而言,电路更复杂一些。
下面介绍DMA 方式下的具体实现电路。DMA 请求电路由两个D 触发器组成,当A/D 转换完毕时,U20A 的输出Q 由低电平变成高电平,DRQ1=1,DMA 通道1 发出请求,DRQ1 被认可后进行两次DMA传输。在第一次DMA 传输期间,触发器U20B 的输出Q 为低电平,A/D 转换数据的高八位传输到指定内存单元。在第一次DMA 传输结束时,DACK1 由低电平变成高电平,触发器U20B 的输出为高电平,但触发器U20A 的输出Q 仍然是高电平,该电平申请第二次DMA 传输。在第二次DMA 传输期间,触发器U20B 的输出为高电平,A/D 转换数据的低四位传输到指定的内存单元。当第二次DMA 传输结束时,DACK1 由低电平变成高电平,使触发U20B 输出低电平,同时触发器U20A 的输出Q 变为低电平,DRQ1=0 变为低电平,DRQ1=0,DMA 通道1 的请求被撤销,结束一次A/D 转换12 位数据传输过程。
2 软件设计
该接口电路支持各种带有口指令操作的高级语言和8086/8088 汇编语言。以下就以Turbo C 为例对
相应的部分编程,经供参考。
2.1 A/D 编程
该编程适合于中断或查询方式下的编程,端口地址=0x238~0x23f。
outportb(0x23c,0x00); /*初始化清零*/
outportb(0x23a,0x00); /*选择传输高8 位数据并为A/D 转换作准备*/
{
}; /*启动A/D 并检查A/D 是否转换完毕*/
dh=inportb(0x23d); /*输入高八位数据*/
outporth(0x23a,0x01); /*选择传输低四位数据*/
dl=inportb(0x23d); /*输入低四位数据*/
outportb(0x23a,0x00); /*选择传输高8 位数据并为A/D 转换作准备*/
dl=dl>>4;
dh1=dh;
dl=(dh14)+dl;
dh=dh>>4; /*将高八位低四位数据转化为高四位低八位数据*/
d=dh*256+dl; /*拼合12 位数据*/
u=(d-2047)*10.0/4096; /*转换电压值*/
2.2 写启动和查询方式的编程
outportb(0x23d,0x00); /*写启动A/D 转换*/
if(inporth(0x23e)0x80);/*D7=1 则A/D 转换完毕*/
2.3 8253 定时器编程
outportb(0x23b,0x03); /*set 8253 timer into writing mode word state*/
outportb(0x23f,0x36); /*set 0 channel working with mode 3*/
outportb(0x23f,0x74); /*set 1 channel working with mode 2*/
outportb(0x23b,0x00); /*set to write data to 0 Channel mode */
outportb(0x23f,0x02); /*write low data to 0 channel*/
outportb(0x23f,0x00); /*write high data to 0 channel*/
outportb(0x23b,0x01); /*set to write data to 1 channel*/
outportb(0x23f,LC1); /*write low data to 1 channel*/
outportb(0x23f,HC1); /*write high data to 1 channel*/
outportb(0x23b,0x0c); /*启动CH0,CH1 工作*/
其中采样频率决写入计数器1 的计数值。
2.4 DMA 方式下PC 主机中8237A DMA 控制器编程
8237A DMA 控制器具有4 个DMA 通道,该接口电路使用通道1。
outportb(0x0x,0x05); /*mask DMA channel 1*/
outportb(0x0c,0x00); /*clear byet pointer flip*/
outportb(0x0b,0x55); /*write mode word.demand mode,address tincrease,autoinitialization,write trasfer
and select 1*/
outportb(0x83,SEG); /*write page number*/
outportb(0x02,LA); /*write low 8 bit address*/
outportb(0x02,HA); /*write hige 8 bit address*/
outportb(0x03,LC); /*write low 8 bit count data*/
outportb(0x03,HC); /*write hige 8 bit count data*
outportb(0x03,0x01); /*clear mask bit of DMA channel*/
其中写入11 口的数值应按照具体的工作方式来确定,写入131 口的页地址SEG 取20 位绝对地址的最高4 位的数值,而将低16 位地址的数值写入地址寄存器。写基值字节计数寄存器的字节总数值应为需要传输的字节数减1。
2.5 中断服务程序的编写以有中断向量的装入
void interrupt int9() /*中断服务程序*/
{ disable();
ah5=inportb(0x23d); /*输入高八位数据*/
outportb(0x23a,0x01); /*选择传输低四位数据*/
dl5=inportb(0x23d); /*输入低四位数据*/
outportb(0x23a,0x00); /*选择传输高8 位数据并为A/D 转换作准备*/
outportb(0x23c,0x00); /*A/D 转换完毕的标志位清零*/
outportb(0x20,0x20);
enable();
}
void stall 1(void interrupt(*faddr)())
{
disable();
setvect(INT1,faddr); /*装入中断服务程序*/
enable();
}
本文介绍一种基于AD1674 设计的接口电路,该电路具有查询、中断和DMA 三种数据传输功能,同时采用8253 定时脉冲或端口写两种A/D 启动方式。其中DMA 方式实现了数据的快速传输,而两种A/D 启动方式将会使采样率的设定更加灵活。应用本文原理设计的可插入通用PC 机的数据采集板已用于我们的高频多谱勒和到达角探测分析系统中,取得了满意的效果。这些设计方法和原理在其它实际数据采集系统的设计过程中,也会具有重要的参考价值。
- 一种节能型太阳能应急灯(05-30)
- lm358应用电路图精华集锦(三)(11-05)
- 温度传感器应用电路(二)(09-14)
- 温度传感器应用电路(一)(09-14)
- 串行器与摄像芯片应用电路(09-07)
- SN75LVCP412A应用电路(02-27)