算是填了最先挖的VFD坑
最近pcb厂家神仙打架,为PCB普及做出了巨大贡献,到这事儿发生我也就开了两三次板,都赶上这个时间了,不开白不开!
不说了,上图!
sch:
pcb:
方案和之前的除了驱动电路都一样,以前那个自己绕变压器的方案发热量太大了。但是那组电路参数照样可以用的。
这次pcb除了几处纰漏,灯丝高压应该直接改为负高压,还有就是pmos不知道为啥错位了,可能是拼版的时候不小心移动了。
至于程序方面大部分直接用,由于不想改显示驱动,grid和digit还是将错就错,加一步call transcode() 罢了。
改动比较大的就是ds3231的驱动,原来使用stm8硬件iic。这次一开始调试的时候总是卡在忙,以前也有这个现象,一怒之下直接改成软件iic。
把以前的驱动拿过来改改方法就成了。
iic.h
1 #ifndef __MYIICDS3231_H 2 #define __MYIICDS3231_H 3 #include "stm8s.h" 4 #include "delay.h" 5 #include "iostm8s103f3.h" //inc the .h to use bit control 6 7 //transplanted to dsd3231 8 //modyfied: 9 //1.only leave 8 bit to work 10 //2.change the related macro definition 11 //3.use newer stm8s_i2c.h 12 //By katachi time:2018-1-20 13 //new added 19-3-14: 14 //DS3231IIC_BufferRead() 15 //new modify 19-4-12 fot stc15 16 //new modify 4-2x for stm8 software iic 17 18 ////IO方向设置 19 //#define DS3231IIC_SDA_IN() {GPIOB->CRL&=0XFFFFF0FF;GPIOB->CRL|=8<<8;} 20 //#define DS3231IIC_SDA_OUT() {GPIOB->CRL&=0XFFFFF0FF;GPIOB->CRL|=3<<8;} 21 22 ////IO操作函数 23 //#define DS3231IIC_SCL PBout(3) //SCL 24 //#define DS3231IIC_SDA PBout(2) //SDA 25 //#define DS3231IIC_READ_SDA PBin(2) //输入SDA 26 27 ////IO方向设置 28 #define DS3231IIC_SDA_IN() {GPIO_Init(GPIOB,(GPIO_PIN_5),GPIO_MODE_IN_PU_NO_IT);} 29 #define DS3231IIC_SDA_OUT() {GPIO_Init(GPIOB,(GPIO_PIN_5),GPIO_MODE_OUT_PP_HIGH_FAST);} 30 31 ////IO操作函数 32 #define DS3231IIC_SCL PB_ODR_ODR4 //SCL 33 #define DS3231IIC_SDA PB_ODR_ODR5 //SDA 34 #define DS3231IIC_READ_SDA PB_IDR_IDR5 //输入SDA 35 36 //IIC所有操作函数 37 void DS3231IIC_Init(void); //初始化IIC的IO口 38 void DS3231IIC_Start(void); //发送IIC开始信号 39 void DS3231IIC_Stop(void); //发送IIC停止信号 40 void DS3231IIC_Send_Byte(u8 txd); //IIC发送一个字节 41 u8 DS3231IIC_Read_Byte(unsigned char ack);//IIC读取一个字节 42 u8 DS3231IIC_Wait_Ack(void); //IIC等待ACK信号 43 void DS3231IIC_Ack(void); //IIC发送ACK信号 44 void DS3231IIC_NAck(void); //IIC不发送ACK信号 45 46 void DS3231IIC_Write_One_Byte(u8 addr,u8 dat); 47 u8 DS3231IIC_Read_One_Byte(u8 addr); 48 void DS3231IIC_BufferRead(u8 *buffer,u8 startAddr,u8 bufferLen); 49 void DS3231IIC_ReverseDirBufferRead(u8 *buffer,u8 startAddr,u8 bufferLen); 50 #endif