TMPN3150与TLC0832的两种接口实现方法
号由IO0输出初始化为1
IO-8neurowiremasterselect(IO-0)ioA2D;;
IO-0outputbitioA2Dselect=1;
IO-1inputbitstart_adc;
#pragmaignore_notusedioA2Dselect
////////functiondeclare////////
unsignedlongadc(unsignedlonganalog_addr);
////////functiondefinition////////
//A/D转子函数
unsignedlongadc(unsignedlonganalog-addr)
//形参analog_addr传递要选择的通道,选择CH0时,analog_addr=0x06,选择CH1时,analog_addr=0x07
{
unsignedlongadc_info;
unsignedlongdigital_out;
adc_info=(analog_addr<<13);
io_in(ioA2D,&adc_info,16);//选择通道,同时接收转换的结果
digital_out=adc_info&0x0ff0;
digital_out=digital_out>>4;
returndigital_out;
}
由于eurowireI/O对象是双向的,即输入、输出同时进行。因此,调用io_in(ioA2D,&adc_info,16)时启动了16位的双向数据传输,该命令可将adc_info中的数以比特流的形式从IO-9输送到TLC0832,同可时通过IO10从TLC0832的DO脚读入16位数并放入adc_info。由TLC0832的工作时序图(图1)可以看出,接收到的16位数中的第5位到第12位就是转换结果,所以做了后面的处理。
3.2基于Neuron芯片的比特I/O模式方案
TMPN3150和TLC0832的第二种接口实现方法是把TMPN3150的I/O脚定义为比特I/O对象,它可用以监控与Neuron芯片相连的I/O设备中某个引脚上的逻辑状态,其中“0”为低电平,“1”为高电平。
a.方法2的硬件实现
方法2的硬件电路如图3所示。图中,输入通道只画了一路CH0,另一路CH1与CH0相同。当输入为1-5V的电压信号时,J断开;当输入与4-20mA的电流信号时,J连通。
b.方法2的软件实现
NeuronC语言是从ANSIC中派生出来的,相对于ANSIC而言,它进一步扩展了用以支持由Neuron芯片中的固件提供的各种运行特性。
方法2的A/D接口程序如下:
////////IOObjection////////
//将IO脚定义为比特IO对象,
IO-2inputbitio-do;
IO-0outputbitcs;
IO-3outputbitdi;
IO-1outputbitclk;
////////functiondeclare////////
intadc(intadc-addr);
///////functiondefinition//////
//A/D转换子函数
intadc(intadc_addr)
//形参analog_addr传递要选择的通道,选择CH0时,adc_addr=0x60;选择CH1时,adc_addr=0x70//
{
intadc_inbit,digital_out=0;
io_out(cs,0);
io_out(di,0);
for(i=0;i<3;i++)//选择通道
{
io_out(clk,0);
adc_addr=adc_addr<<1;
if(adc_inf0&0x80)==0x80
io_out(di,1);
else
io_out(di,0);
io_out(clk,1);
}
io_out(clk,0);//一个时钟的间隔
io_out(clk,1);//以使多路器稳定
for(i=0;i<8;i++)//接收转换结果
{
io_out(clk,0);
if(io_in(io_do)==1)
{
adc_inbit=1;
adc_inbit=adc_inbit<<(7-i);
digital_out=dig 《TMPN3150与TLC0832的两种接口实现方法(第2页)》
本文链接地址:http://www.oyaya.net/fanwen/view/170181.html
IO-8neurowiremasterselect(IO-0)ioA2D;;
IO-0outputbitioA2Dselect=1;
IO-1inputbitstart_adc;
#pragmaignore_notusedioA2Dselect
////////functiondeclare////////
unsignedlongadc(unsignedlonganalog_addr);
////////functiondefinition////////
//A/D转子函数
unsignedlongadc(unsignedlonganalog-addr)
//形参analog_addr传递要选择的通道,选择CH0时,analog_addr=0x06,选择CH1时,analog_addr=0x07
{
unsignedlongadc_info;
unsignedlongdigital_out;
adc_info=(analog_addr<<13);
io_in(ioA2D,&adc_info,16);//选择通道,同时接收转换的结果
digital_out=adc_info&0x0ff0;
digital_out=digital_out>>4;
returndigital_out;
}
由于eurowireI/O对象是双向的,即输入、输出同时进行。因此,调用io_in(ioA2D,&adc_info,16)时启动了16位的双向数据传输,该命令可将adc_info中的数以比特流的形式从IO-9输送到TLC0832,同可时通过IO10从TLC0832的DO脚读入16位数并放入adc_info。由TLC0832的工作时序图(图1)可以看出,接收到的16位数中的第5位到第12位就是转换结果,所以做了后面的处理。
3.2基于Neuron芯片的比特I/O模式方案
TMPN3150和TLC0832的第二种接口实现方法是把TMPN3150的I/O脚定义为比特I/O对象,它可用以监控与Neuron芯片相连的I/O设备中某个引脚上的逻辑状态,其中“0”为低电平,“1”为高电平。
a.方法2的硬件实现
方法2的硬件电路如图3所示。图中,输入通道只画了一路CH0,另一路CH1与CH0相同。当输入为1-5V的电压信号时,J断开;当输入与4-20mA的电流信号时,J连通。
b.方法2的软件实现
NeuronC语言是从ANSIC中派生出来的,相对于ANSIC而言,它进一步扩展了用以支持由Neuron芯片中的固件提供的各种运行特性。
方法2的A/D接口程序如下:
////////IOObjection////////
//将IO脚定义为比特IO对象,
IO-2inputbitio-do;
IO-0outputbitcs;
IO-3outputbitdi;
IO-1outputbitclk;
////////functiondeclare////////
intadc(intadc-addr);
///////functiondefinition//////
//A/D转换子函数
intadc(intadc_addr)
//形参analog_addr传递要选择的通道,选择CH0时,adc_addr=0x60;选择CH1时,adc_addr=0x70//
{
intadc_inbit,digital_out=0;
io_out(cs,0);
io_out(di,0);
for(i=0;i<3;i++)//选择通道
{
io_out(clk,0);
adc_addr=adc_addr<<1;
if(adc_inf0&0x80)==0x80
io_out(di,1);
else
io_out(di,0);
io_out(clk,1);
}
io_out(clk,0);//一个时钟的间隔
io_out(clk,1);//以使多路器稳定
for(i=0;i<8;i++)//接收转换结果
{
io_out(clk,0);
if(io_in(io_do)==1)
{
adc_inbit=1;
adc_inbit=adc_inbit<<(7-i);
digital_out=dig 《TMPN3150与TLC0832的两种接口实现方法(第2页)》