数码之家

 找回密码
 立即注册
搜索
查看: 8363|回复: 23

[STM] 用P2LED屏制作个自动授时彩色万年历时钟(测试P2屏用)

[复制链接]
发表于 2020-10-15 11:50:06 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 落叶风 于 2020-10-15 12:06 编辑

   2019年过年前制作的时钟到现在已稳定运行了差不多2年了https://www.mydigit.cn/forum.php?mod=viewthread&tid=7504&extra=,开始期间修改多次,主体时钟修改不多,主要是天气部份修改比较多,所以这个时钟的程序已稳定,不会再更新了。
     今年9月份开始,天气又收不到,但电脑能收,估计是网站变了,或限制了,所以我已没用天气了,当普通授时钟,天气部份没打算想重写了。在这说明一下这时钟天气接收部份ESP8266传给本时钟的协议,方便大家自已动手修改天气程序。天气接收ESP8266串口主要输出2个值,其中一个是每5S送一次的授时时间值,它的协议是:[Timetianqi2] 2020-10-15 4 10:13:46**,引导码是[Timetianqi2],结束码是**,中间是年-月-日 星期 时:分:秒。另一个是30分钟送一次的天气数据,它的协议是:[Timetianqi1] 今天天气实况:好天气。           **,引导码是:[Timetianqi1],结束码是:           **(12个空格+两个*),中间内容这天气情况文字。由于单片机串口输入只能输入300个字符,且单片机没做超字符处理,如接收超过300个后会出现出错重启,所以ESP8266天气输出字符数不能超300个,编码为UTF8,UTF8中文字占3个字符。
   以下为本贴的主要内容,上个月买了片P2屏,也是32扫128*64的,打算搞个制作,先用时钟板测试一下个屏,发现驱动不了。以下是本屏的图片。
IMG_20201015_100013_1.jpg
IMG_20201015_100040_1.jpg
IMG_20201015_100054_1.jpg
IMG_20201015_100057_1.jpg
驱动芯片是用TC7558及FM6126A的,
IMG_20201015_100050_1.jpg
IMG_20201015_100412_1.jpg
这个屏比较娇气:sweat:。给硬物碰一碰就变这了。
IMG_20201015_100019_1.jpg
   查官方资料发现行驱动TC7558是采用串行移位控制的,不是原买P3那版采用5线控制的,这个是采用2线控制,采用实验板测试出来C脚输入为数据,A脚输入是时钟,按一般的移位驱动程序就能正常驱动了,对于列驱动FM6126A的驱动,从官方资料看驱动方式是锁存方式不同,且有设置项,锁存方式是输入端3 个clk 宽度的LE 高电平时,数据被传入到锁存器中。按照这说明编写程序,从逻辑分析仪的波型基本正确,但接入LED屏显示不正常。由于前些时间工作多,所以前几天继续上网找资料究研这屏,终于在英文网站github.com找到驱动这芯片的程序,发现它是需要初始化的,但官方资料没有详细说明设置方法,参照这程序写了初始化程序,终于显示出来的,但还是不正常,用5V的单片机编写简单的测试程序就正常,怀疑是电平转换引起,所以又DIY片电平转换板,终于正常了。以下为对应图片。
IMG_20201015_095858_1.jpg
由于是测试,时钟板只焊接部份,没光感检测,没温度湿度检测,没ESP8266。
IMG_20201015_095908_1.jpg
IMG_20201015_100502_1.jpg
电源是5V5A的,
IMG_20201015_095933_1.jpg
电平转换板
IMG_20201015_095941_1.jpg
是用74lvc4245
IMG_20201015_100000_1.jpg
以下为工作电流检测,电流不大。
IMG_20201015_100631_1.jpg
IMG_20201015_100637_1.jpg
以下为不接电平转换板的显示情况。
IMG_20201015_105311_1.jpg
    简单说一下对于不同的屏如何修改本程序进行匹配,程序主要修改main.c中的void disp()子程序,它是负责输出数据到LED屏的。由于单片机运行本子程序时扫一行需时0.14ms(这个时间应是单片机驱动速度,本次P2屏测试速度也一样),所以扫一行需分2次写。
    对于原买的P3屏驱动不复杂,流程是:先OE高电平(关显示),然后设置扫那行(即设置ABCDE输入脚的电平,行数为对应的ABCDE的组合值),然后输出128个显示数据,由于需分2行,所以输出128个数据分2次,一次输出64个,然后锁数据(STB低电平后再高电平),然后再开显示(OE为低电平),这样连接扫32行,就组成一个完整的显示内容了。
  以下为旧P3的驱动程序,显示周期是5个0.1ms中断,duanvol为控制值 ,对于值为0,1时输出数据到LED屏,对于234就控制亮度。disphan为行值。单片机B口为输出,012接R1等,456接R2等。

void disp()
{//0.14ms  改为分两段显示,每段69us
    u8 kk,temp1;
    if(duanvol==0)
    {//扫开始64列
        OE_SET(1);//如不进行这步,有暗光
        CLK_SET(1);
        STB_SET(1);   
        temp1=disphan&0x01;
        AIN_SET(temp1);
        temp1=disphan&0x02;
        BIN_SET(temp1);
        temp1=disphan&0x04;
        CIN_SET(temp1);
        temp1=disphan&0x08;
        DIN_SET(temp1);
        temp1=disphan&0x10;
        EIN_SET(temp1);
        for(kk=0;kk<64;kk++)
      {
        GPIO_Write(GPIOB, dispram[kk+disphan*128]);
        CLK_SET(0);
        CLK_SET(1);
      }     
    }
    if(duanvol==1)
    {//扫后64列
        temp1=disphan&0x01;
        AIN_SET(temp1);
        temp1=disphan&0x02;
        BIN_SET(temp1);
        temp1=disphan&0x04;
        CIN_SET(temp1);
        temp1=disphan&0x08;
        DIN_SET(temp1);
        temp1=disphan&0x10;
        EIN_SET(temp1);
        for(kk=0;kk<64;kk++)
      {
        GPIO_Write(GPIOB, dispram[kk+64+disphan*128]);
        CLK_SET(0);
        CLK_SET(1);
      }
        STB_SET(0);
        STB_SET(1);
        if(offdispkong==0)
        {
            OE_SET(0);//显示
        }
        else
        {
            OE_SET(1);//不显示,加这句主要是没有亮度1关闭,在这关。
        }
        disphan++;
        if(disphan==32)disphan=0;
    }
    //以下亮度控制,只有4档,1最亮,4最暗,由于需自动控制,所以为中转值
    if(duanvol==2 && displightkong==5)OE_SET(1);//关显示
    if(duanvol==2 && displightkong==4)
    {
        delay(50);
        OE_SET(1);//关显示
    }
    if(duanvol==3 && displightkong==3)OE_SET(1);//关显示
    if(duanvol==4 && displightkong==2)OE_SET(1);//关显示
    duanvol++;
    if(duanvol>4)duanvol=0;
}*/


   对于本次的P2屏驱动就麻烦些,对于行驱动,就是移位驱动,如下。
  if(disphan==0)
            {
            CIN_SET(1);
            }
            else
            {
            CIN_SET(0);
            }   
            AIN_SET(1);
            AIN_SET(0);

   disphan++;
   if(disphan==32)disphan=0;  //行控结束
  对于锁数据是在最后发送3个数据时进行操作STB为高电平,数据发送结束就为低电平,这样就锁存成功,其它与P3的一样,以下为完整驱动。

void disp()
{   
    uint8_t kk;   
    if(duanvol==0)
    {//扫开始64列
        OE_SET(1);//关显示   
        //以下为行控
        if(disphan==0)
            {
            CIN_SET(1);
            }
            else
            {
            CIN_SET(0);
            }   
            AIN_SET(1);
            AIN_SET(0);
    //在扫描结束后还有操作      
        for(kk=0;kk<64;kk++)
      {   
          GPIO_Write(GPIOB, dispram[kk+(disphan)*128]);
            CLK_SET(0);
          CLK_SET(1);   
        }        
    }
    if(duanvol==1)
    {
        for(kk=0;kk<64;kk++)
      {        
        GPIO_Write(GPIOB, dispram[kk+64+(disphan)*128]);
            if(kk>60)
            {
                 STB_SET(1);
            }
            else
            {
                 STB_SET(0);
            }
            CLK_SET(0);
          CLK_SET(1);   
        }   
    STB_SET(0);
   CLK_SET(0);        
    OE_SET(0);//显示
    //以下为接上行控
    disphan++;
    if(disphan==32)disphan=0;//行控结束
    }
//以下亮度控制,只有4档,1最亮,4最暗,由于需自动控制,所以为中转值
    if(duanvol==2 && displightkong==5)OE_SET(1);//关显示
    if(duanvol==2 && displightkong==4)
    {
        delay(50);
        OE_SET(1);//关显示
    }
    if(duanvol==3 && displightkong==3)OE_SET(1);//关显示
    if(duanvol==4 && displightkong==2)OE_SET(1);//关显示
    duanvol++;
    if(duanvol>4)duanvol=0;
}

由于FM6126A启动时需初始化,初始化程序是上网抄的,不清楚它的原理,详细看void reset()子程序啦。

以下为本P2屏的改动后的时钟程序(内有FM6126A及TC7558),由于本人只用于测试这个P2屏的,测试成功就没用,可能有BUG,仅供参考。
P2彩屏控制时钟程序.zip (1.3 MB, 下载次数: 83)

打赏

参与人数 8家元 +150 收起 理由
jf201006 + 20 謝謝分享
有点不烧 + 20 謝謝分享
心系远方而自由 + 10 原創內容
佳维 + 20 謝謝分享
qrut + 20
hfsp + 20 謝謝分享
kkdkj + 20 好屏好屏!
jpdd521 + 20 这个屏幕用一个ESP32应该就可以很好的控制.

查看全部打赏

发表于 2020-10-15 13:15:37 | 显示全部楼层
这个屏幕用一个ESP32应该就可以很好的控制了,支持大佬折腾,需要亚克力之类东西PM我。
回复 支持 反对

使用道具 举报

发表于 2020-10-15 15:05:56 | 显示全部楼层
大佬又出新作了 要顶!
回复 支持 反对

使用道具 举报

发表于 2020-10-15 18:19:48 | 显示全部楼层
前排留名,我的钟下载了网友改的京东云天气预报,一直正常显示天气。

打赏

参与人数 1家元 +10 收起 理由
心系远方而自由 + 10 熱心助人

查看全部打赏

回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-15 21:57:16 | 显示全部楼层
jpdd521 发表于 2020-10-15 13:15
这个屏幕用一个ESP32应该就可以很好的控制了,支持大佬折腾,需要亚克力之类东西PM我。 ...

等买回机箱后再PM你帮加工面板:handshake:
回复 支持 反对

使用道具 举报

发表于 2020-10-20 17:17:16 | 显示全部楼层
请问老大这款屏是16扫的还是32扫的,看引脚只有ABC三个是16扫。
我也有一款屏引脚和这个类似,只有ABC,但差自来哦却说是32扫的。
我是试过,不怎则都无法驱动所有列,就是少了一半。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-20 21:39:56 | 显示全部楼层
flishmen 发表于 2020-10-20 17:17
请问老大这款屏是16扫的还是32扫的,看引脚只有ABC三个是16扫。
我也有一款屏引脚和这个类似,只有ABC,但差 ...

是32扫的,是移位驱动的,只用2条线(A、C)其它是没用的。
回复 支持 反对

使用道具 举报

发表于 2020-10-21 10:49:22 | 显示全部楼层
看了代码我笑了,SPI,I2C全部用模拟,真是浪费了STM32的强大功能!
回复 支持 反对

使用道具 举报

发表于 2020-10-21 16:44:56 | 显示全部楼层
落叶风 发表于 2020-10-20 21:39
是32扫的,是移位驱动的,只用2条线(A、C)其它是没用的。

非常感谢,可以详细解释一下什么是位移驱动吗?
怎么通过两个信号线选择32列?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-21 17:30:37 | 显示全部楼层
flishmen 发表于 2020-10-21 16:44
非常感谢,可以详细解释一下什么是位移驱动吗?
怎么通过两个信号线选择32列? ...

工作原理与列驱动一样的,具体看移位驱动的原理,不会用文字表达清楚,简单说就是当为0行时,数据脚C为高电平,其它行为低电平,然后通过时钟A每高低电平一次,就把0行高电平值移1位,移动32行后又重复操作。
回复 支持 反对

使用道具 举报

发表于 2020-10-23 09:53:55 | 显示全部楼层
又跟着楼主折腾
回复 支持 反对

使用道具 举报

发表于 2020-10-26 16:54:00 | 显示全部楼层
老大电平转换部分邮电路图吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-26 17:23:41 | 显示全部楼层
flishmen 发表于 2020-10-26 16:54
老大电平转换部分邮电路图吗?

1212121212.jpg
回复 支持 反对

使用道具 举报

发表于 2020-11-1 21:16:46 | 显示全部楼层

请问大神程序里能加节气显示距下个节气的显示吗?怎样加
回复 支持 反对

使用道具 举报

发表于 2020-11-27 20:03:18 | 显示全部楼层
love香 发表于 2020-10-15 18:19
前排留名,我的钟下载了网友改的京东云天气预报,一直正常显示天气。

能发个程序吗?自己不会弄
回复 支持 反对

使用道具 举报

发表于 2020-11-29 00:06:12 | 显示全部楼层
中华腾飞 发表于 2020-11-1 21:16
请问大神程序里能加节气显示距下个节气的显示吗?怎样加

有这个想法一直不知怎么请教,节气提前三天显示,能显示距XX节气还有N天就好了:lol:
回复 支持 反对

使用道具 举报

发表于 2020-12-8 16:34:15 | 显示全部楼层
love香 发表于 2020-10-15 18:19
前排留名,我的钟下载了网友改的京东云天气预报,一直正常显示天气。

你好,老哥,京东云这个哪里能下载啊
回复 支持 反对

使用道具 举报

发表于 2021-2-21 11:19:00 | 显示全部楼层
心系远方而自由 发表于 2020-12-8 16:34
你好,老哥,京东云这个哪里能下载啊

我这下载
回复 支持 1 反对 0

使用道具 举报

发表于 2021-4-16 21:38:58 | 显示全部楼层
用京东天气,每天访问量多大的
回复 支持 反对

使用道具 举报

发表于 2021-4-16 21:41:40 | 显示全部楼层
用京东天气,每天访问量多大的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-4-17 06:13 , Processed in 0.327600 second(s), 17 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

快速回复 返回顶部 返回列表