yzai的个人空间 https://bbs.21ic.com/?1197968 [收藏] [复制] [RSS] 我想永生,精神或者肉体最终接受不了时间的洗礼

日志

复用mega16的spi做显示和驱动DAC7611

已有 277 次阅读2018-3-23 11:37 |个人分类:单片机|系统分类:兴趣爱好

复用mega16的SPI中的sck和MOSI口,一个是驱动lspi串口oled屏,另一个是驱动DAC7611(12位DA芯片),其中oled屏的管脚是VCC GND SCK MOSI D/C CS RET,D/C是数据指令选择,CS是片选,dac7611管脚如下图:

其中clk用spi的sck,SDI用MOSI ,这是oled和dac7611共用了的,其他引脚不共用。

写好程序后,发现DAC7611输出不正确,虽然oled和dac7611各自的片选都有用到,且把spi频率降低了很多,但DAC7611输出依然不正确,有时总会出现一个固定数据。

可能是复用的过程中oled的程序导致了spi某些标志位没有复位,影响到了DAC7611,其中mega16手册中有下图一段话:

串行发送结束后,SPIF置位,并且硬件中断自动清零,或者读SPSR和访问SPCR可以清零,由于程序中没有使能SPI中断,所以单片机给oled在数据发送结束后,SPIF没有清零,仅仅是拉高了片选,导致后面驱动DAC7611时7611输出不正常值,所以应该在oled读写数据函数中先清零SPIF,在DAC7611的程序中也先加入清零SPIF,后来加写了访问SPCR和SPDR的程序,如下

   uchar value1;

   value1=SPSR;

   value1=SPDR;

dac7611正常输出,更改程序前后对比如下:


其中由于使用了HCPL0631隔离dac7611,并使用了三极管开关电路,导致spi的速率不能太高,应保持250k以下,如下


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)