ad芯片转换程序

ad芯片转换程序,第1张

芯片厂商

芯片资料

ad精度

一个字都不说这没人帮得了你。。。

我说个大概吧:

用ad芯片和其他芯片一样

片选给上去。输入数据时钟和mcu的输出连起来,输入数据端和数据总线连起来。同步时钟一般用个特定频率的晶振,如果频率低就用mcu的定时器做分频。

要让ad工作一般需要首先往ad的设置寄存器里写设置数据,定义ad使用哪个通道,增益是多少,频率是多少等。

然后向设置好的ad芯片发送实际需要读取哪个通道。

最后再写回读函数,将dataout脚上的数据传回mcu进行之后的 *** 作。

例程的话百度文库里有很多。

void write_CS5550(uchar data_to_send) //

{

uchar i AD_SCLK=0

// AD_CS =0

Delay_us(20) // for (i=0i<8i++)

{

if( (data_to_send&0X80)==0 )

{

AD_SDI=0

}

else{AD_SDI=1}

AD_SCLK=1

Delay_us(10)//

AD_SCLK=0

data_to_send<<=1

}

}

uchar read_CS5550(void) //

{

unsigned char n=0,i=0

for(n=0n<3n++)

{

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

{

cs5550_receive_table[n]<<=1

if(AD_SDO==0)

{

cs5550_receive_table[n]|=0x01

}

else cs5550_receive_table[n]&=0xFE

Delay_us(5)

ACC_0=AD_SDO //

Delay_us(5)

AD_SCLK=1//

a<<=1

Delay_us(10)

AD_SCLK=0 //

Delay_us(30) //

}

a=0xfe

// cs5550_receive_table[n]=ACC

}

// AD_CS=1

return ACC

}

这是个我一直用的代码,没问题。就是是VERILOG的,你自己改改吧

/**************************************************************************************************

** TLC549 AD转换器 verilog代码

**************************************************************************************************/

moduleadc(

clk,

rst_n,

adc_clk,

adc_data,

adc_cs_n,

rAdc_data

)

inputclk // 50MHz输入时钟

inputrst_n // 复位信号,低有效

input adc_data // ADC芯片输出的数据

output adc_clk // ADC芯片输入时钟

output adc_cs_n // ADC芯片片选信号,低有效

output[7:0]rAdc_data

reg start_adc

/*************************************************************************************************/

reg[10:0] clk_cnt // clk计数器

wire cs_n_valid1

wire cs_high

wire cs_n_valid2

always @(posedge clk or negedge rst_n)

if (!rst_n)

begin clk_cnt <= 11'd0start_adc<=1end

else if (start_adc)

clk_cnt <= clk_cnt + 1'b1

/*

** 完成一次转换需要75+8*64+850+75+8*64=2024个时钟周期

** adc_cs_n建立时间为75个时钟周期1.5us 转换时间保持高电平17us,即850个时钟周期

** adc_clk周期为系统时钟的64倍

*/

assign cs_n_valid1 = (clk_cnt >11'd74) &&(clk_cnt <= 11'd587)

assign cs_high= (clk_cnt >11'd587) &&(clk_cnt <= 11'd1437)

assign cs_n_valid2 = (clk_cnt >11'd1512) &&(clk_cnt <= 11'd2024)

//=================================================================================================

regrAdc_cs

always@(posedge clk or negedge rst_n)

if (!rst_n)

rAdc_cs <= 1'b1

else if (start_adc) begin

rAdc_cs <= 1'b0

if (cs_high)

rAdc_cs <= 1'b1

else

rAdc_cs <= 1'b0

end

assign adc_cs_n = rAdc_cs

//=================================================================================================

reg [5:0] div_cnt // 64分频计数器

reg rAdc_clk

always @(posedge clk or negedge rst_n)

if (!rst_n) begin

div_cnt <= 6'd0

rAdc_clk <= 1'b0

end

else if ((cs_n_valid1) || (cs_n_valid2)) begin

div_cnt <= div_cnt + 1'b1

if (div_cnt <32)

rAdc_clk <= 1'b1

else

rAdc_clk <= 1'b0

end

assign adc_clk = rAdc_clk

//=================================================================================================

reg [7:0] rAdc_data

always @(posedge clk or negedge rst_n)

if (!rst_n)

rAdc_data <= 8'd0

else

case (clk_cnt)

11'd1513:rAdc_data[7] <= adc_data

11'd1577:rAdc_data[6] <= adc_data

11'd1641:rAdc_data[5] <= adc_data

11'd1705:rAdc_data[4] <= adc_data

11'd1769:rAdc_data[3] <= adc_data

11'd1833:rAdc_data[2] <= adc_data

11'd1897:rAdc_data[1] <= adc_data

11'd1961:rAdc_data[0] <= adc_data

default:rAdc_data[0] <= 1'b0

endcase

endmodule


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8039139.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存