完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
通过ATMEGA88芯片采集AD7310的温度数据,能读取到数据,数据波动较大,与实际温度不符。ADT7310的配置按照官网参考手册。代码如下:
/* 编译环境:ICCAVR7.0 文件名:ADT7310.c */ /* ADT7310端口配置 */ #define CS PB2 //单片机对ADT片选信号端 #define MOSI PB3 //单片机输出端 #define MISO PB4 //单片机输入端 #define SCK PB5 //单片机对ADT时钟信号 #define CS_OFF PORTB |= BIT(CS)//片选开 #define CS_ON PORTB = ~BIT(CS) //片选关 /* 函数功能: SPI初始化 */ void Spi_Init(void) { //使能SPI,先发送MSB //主机模式,SPI工作在模式0,SCK工作频率为Fclk/4; SPCR = BIT(SPE) | BIT(MSTR) | BIT(CPOL) | BIT(CPHA); } /* 函数功能: 向SPI写数据 */ unsigned char Spi_WriteByte(unsigned char data) { SPDR = data; //启动数据传输函数 while(!(SPSR BIT(SPIE))) //等待传输结束 ; return SPDR; } /* 函数功能: 向ADT写两个字节 */ void Write_ADT7310_Addr_Dat(unsigned char addr, unsigned char dat) { CS_ON; Spi_WriteByte(addr); Spi_WriteByte(dat); delay(240); CS_OFF; } /* 函数功能: 向ADT7310写配置数据 */ void AD7310_Config(void) { //配置为单次转换,精度13位 ,单次转换 Write_ADT7310_Addr_Dat(0X08,0X20); } /* 函数功能: 从指定地址,读取两个字节的温度 */ unsigned int Read_AD7310_Tem(void) { unsigned int data; CS_ON; Spi_WriteByte(0X50); data = Spi_WriteByte(0xFF); data = data << 8; data |= Spi_WriteByte(0xFF); CS_OFF; return data; } /* 函数功能: 输出温度值 */ unsigned int Temp(void) { unsigned temp; temp = Read_AD7310_Tem(); delay(20); if (temp < 0) temp = (temp - 8192)/16; else temp = temp / 16; return temp; } /* 函数功能: ADT7310初始化 */ void ADT7310_Init(void) { AD7310_Config(); } |
|
相关推荐 |
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-7-7 10:40 , Processed in 0.565717 second(s), Total 71, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191