最近使用一款美信的SPI转DA的芯片MAX5741AUB,用立创EDA画的板子,下面是电路:
本来以为会很轻松,结果搞了两天,当时想在网上找例程,发现没有,想着就弄完写一个。
按这个芯片时序图把时序写一下,我用的模拟spi:
void spi_start(void)
{
SET_LSCE_LOW;
}
void spi_stop(void)
{
SET_LSCE_HIGH;
}
static void spi_write_data(unsigned int data,unsigned int len)
{
int i;
for(i=len-1;i>=0;i--)
{
if((data>>i)&0x0001)
SET_LSDA_HIGH;
else
SET_LSDA_LOW;
SET_LSCK_HIGH;
spi_delay(1);
SET_LSCK_LOW;
spi_delay(1);
}
}
static void write_lcd_cmd(unsigned int cmd)
{
unsigned int x;
spi_start();
spi_delay(1);
x = 0x0000|cmd;
spi_write_data(x,16);
}
static void write_data(unsigned char data)
{
unsigned int x;
spi_delay(1);
x = 0x0100 | data;
spi_write_data(x,9);
}
void send_data(unsigned int cmd)
{
write_lcd_cmd(cmd);
spi_stop();
}
int16_t send_dac(int16_t channel,int16_t valu)
{
int16_t data=0x0000;
data=(channel<<12)+valu;
send_data(data);
return 1;
}
代码是网上找的spi屏幕代码,有些没用到,大家酌情复制
main函数里面调用
spi_gpio_init();
delay_1ms(150);
send_data(0xf010);
delay_1ms(150);
send_data(0xcffc);
send_data(0xc000);
之前按两张表发的0xcffc
,理论上来说是四个通道全部输出高,但是怎么都没输出,我原来以为SPI波形有问题,用示波器看的波形:
黄色为片选,下降沿有延迟是用的别的板子上的单片机,有电容没拆,发现波形很漂亮,没什么问题。最后又仔细想了想这两个命令表,想着分开试试,先发0xf010
唤醒打开全部通道,再发0xcffc
写入电压指令,电压就可以输出。仔细看了指令表的control列知道咋回事了。