完善资料让更多小伙伴认识你,还能领取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(); } |
|
相关推荐 |
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2064 浏览 1 评论
3879 浏览 1 评论
8180 浏览 0 评论
1986 浏览 0 评论
VL53L5CX #高达 8x8 多区域测距和 63°对角线宽视场 飞行时间多区域测距传感器
17395 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-16 02:09 , Processed in 0.358229 second(s), Total 38, Slave 32 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号