算是填了最先挖的VFD坑

最近pcb厂家神仙打架,为PCB普及做出了巨大贡献,到这事儿发生我也就开了两三次板,都赶上这个时间了,不开白不开!

 


 不说了,上图!

sch:

VFD 时钟(VFD Clock with STM8 v2.0)

pcb:

VFD 时钟(VFD Clock with STM8 v2.0)

方案和之前的除了驱动电路都一样,以前那个自己绕变压器的方案发热量太大了。但是那组电路参数照样可以用的。

这次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
View Code

相关文章: