看到闲置不用的体重计,电子人必须得有点想法!!! 段码屏的功耗不算大,可以弄个桌面小时钟 !!!
计划总体方案为ATmega16L + HT1621 + RX8025T+ 段码屏 + 旋转编码器
以下为体重计实物图(补拍):
![image.png image.png](data/attachment/forum/202311/25/122635rm7mnmtvkuntnn4m.png)
体重计带的显示屏,一般都是段码屏,而且是定制类的显示模组,能显示冒号之类的,首先拆下
![2.jpg 2.jpg](data/attachment/forum/202311/25/122645kmtn99k7f770i10f.jpg)
![3.jpg 3.jpg](data/attachment/forum/202311/25/122710figc1llf1lfq3mqa.jpg)
用到的几大板块,来个合影,分别是HT1621转接板,ATmega16L的主控板,外壳盒子里的垫衬板,还有屏
![4.jpg 4.jpg](data/attachment/forum/202311/25/122728lhbbr716ba0bxb10.jpg)
将屏安装在外壳盒子的前面板上
![5.jpg 5.jpg](data/attachment/forum/202311/25/122744mnl8l91r91x4xzbo.jpg)
开窗处漏出的为从屏处用烙铁改装的T型头,加热焊接的斑马纸到转接板的排针
![6.jpg 6.jpg](data/attachment/forum/202311/25/122758gyzyndn3n6i1nlyi.jpg)
安装好的垫衬板,开关,旋转编码器
![7.jpg 7.jpg](data/attachment/forum/202311/25/122856fhrnllo7p223zg00.jpg)
主控板安装测试,板子本身是做其他的,这里也属于废物利用
![8.jpg 8.jpg](data/attachment/forum/202311/25/123013sb38j9bba8lb5glu.jpg)
焊接RX8025T和相关线路
RX8025T是个精度很不错的RTC,除了具有I2C接口,通过pin7的FOE上拉到VCC,可以输出32.768KHz的信号,很适合改装各种表的32.768KHz的信号输入
![image.png image.png](data/attachment/forum/202312/01/112936hl7qwyy8rlj7lw87.png)
![image.png image.png](data/attachment/forum/202312/01/112951g6f140risxfirgyy.png)
寄存器地址和介绍如下:
![image.png image.png](data/attachment/forum/202312/01/113018mdf7twarnhdafrh6.png)
![9.jpg 9.jpg](data/attachment/forum/202311/25/123045c8jl85irr8nykaar.jpg)
焊接ATmega16L 的DIP40座
![10.jpg 10.jpg](data/attachment/forum/202311/25/123151rqkbxxlm9pxnqkbk.jpg)
焊接旋转编码器引线
![11.jpg 11.jpg](data/attachment/forum/202311/25/123253l9dt9g990lu0g85d.jpg)
焊接HT1621的相关引线,一些用软线+焊点,一些用杜邦线+排针连接
HT1621用来驱动段码屏,通过CS RD WR DATA的组合与MCU通信
![image.png image.png](data/attachment/forum/202312/01/113321o8vbknqc8bc8bvgj.png)
![image.png image.png](data/attachment/forum/202312/01/113337dkjlzoqq2ifliqkn.png)
读时序:
![image.png image.png](data/attachment/forum/202312/01/113414bi99uii5ollxi869.png)
写时序:
![image.png image.png](data/attachment/forum/202312/01/113436whzoa0jhhztajhou.png)
指令集如下:
![image.png image.png](data/attachment/forum/202312/01/113521rmg8464fw949gotj.png)
![image.png image.png](data/attachment/forum/202312/01/113534dq30g3yz3e8g8nym.png)
![12.jpg 12.jpg](data/attachment/forum/202311/25/123407cpo6wz6bmzd6j6te.jpg)
充电宝放置位置和空间进行测试
![13.jpg 13.jpg](data/attachment/forum/202311/25/123507ktd0ecc2000v20ay.jpg)
再次核对各自的位置和空间
![14.jpg 14.jpg](data/attachment/forum/202311/25/123551hra555agaagg55kw.jpg)
总装,进行调试
![15.jpg 15.jpg](data/attachment/forum/202311/25/123647j1yyme8ctmk3kk8w.jpg)
先把屏点亮,摸清屏的真值表并进行记录
![18.jpg 18.jpg](data/attachment/forum/202311/25/123728msbv5l3lnl422c4u.jpg)
最后调试程序,直到读取和显示,调节时间正常,合盖完工
![17.jpg 17.jpg](data/attachment/forum/202311/25/123842jh6q3ug2e5deqvzt.jpg)
本作品的关键点如下:
1. HT1621对屏的驱动,尤其是控制位和数据位的写入
本作品的屏为4 COM,从屏的玻璃处看到4个并排的黑点就是COM,剩下的都是SEG了
HT1621最多支持4个COM,32个SEG的驱动,初始化代码如下:
ht1621_cs_high();
ht1621_write_high();
ht1621_data_high();
ht1621_delay(1000);
//1. turn on system oscillator
ht1621_write_cmd(CMD_SYS_ENABLE);
//2. system clock source, on-chip RC oscillator
ht1621_write_cmd(CMD_RC_256K);
//3. 1/3 bias 1/4 duty
ht1621_write_cmd(CMD_13_BIAS_4_COM);
//4. turn on lcd bias generator
ht1621_write_cmd(CMD_LCD_ON);
2. RTC RX8025T的驱动,本次使用了模拟I2C,便于移植
起始和终止信号函数如下:
static void RX8025_IIC_Start(void)
{
/* IIC start condition*/
RX8025_SDA_OUTPUT();
RX8025_SCL_LOW();
Delayus(DELAY2US);
RX8025_SDA_HIGH();
Delayus(DELAY2US);
RX8025_SCL_HIGH();
Delayus(DELAY2US);
RX8025_SDA_LOW();
Delayus(DELAY2US);
RX8025_SCL_LOW();
Delayus(DELAY2US);
}
static void RX8025_IIC_Start(void)
{
/* IIC start condition*/
RX8025_SDA_OUTPUT();
RX8025_SCL_LOW();
Delayus(DELAY2US);
RX8025_SDA_HIGH();
Delayus(DELAY2US);
RX8025_SCL_HIGH();
Delayus(DELAY2US);
RX8025_SDA_LOW();
Delayus(DELAY2US);
RX8025_SCL_LOW();
Delayus(DELAY2US);
}
------------------------------------
插播I2C相关:
在90年代中期时,当时新一代单片机中的使用的串口扩展总线接口有MOTOROLA的SPI,NS的Microwire/PLUS和Philips的I2C。其中I2C总线具有标准的规范以及众多的I2C接口的外围器件,形成了较为完善的串行扩展总线。时至今日,很多例如EEPROM,RTC等类型芯片仍然还在大量使用I2C作为通信接口。使用逻辑分析仪可以抓取到带有上位机已分析完成的数据通讯过程,非常直观方便。下面再来复习下I2C总线。
I2C总线包括时钟线SCL和数据线SDA,二者都是双向传输线。总线空闲备用时二者都必须保持高电平,只有关闭I2C总线时才使SCL钳位在低电平。在标准I2C模式下,数据传输速率可达100kbit/s,高速模式下可达400kbit/s。
I2C总线有两种时序状态被定义为起始信号和终止信号。
起始信号:在时钟线保持高电平时,数据线出现由高电平到低电平的跳变,为起始信号,表示启动I2C总线。
终止信号:在时钟线保持高电平时,数据线出现由低电平到高电平的跳变,为终止信号,表示停止I2C总线。
二者都是由主控制器产生。
![image.png image.png](data/attachment/forum/202312/01/111504pkllhimh0zihk44j.png)
I2C总线信号对于信号时长时序都有严格要求,如下表:
![image.png image.png](data/attachment/forum/202312/01/111533y22z22ypabhpywuq.png)
通信时,起始信号后就紧跟着1个字节的寻址字节(包括7位地址位+1位方向位(0写,1读))。
主控制器写操作:
![image.png image.png](data/attachment/forum/202312/01/111604rs2q7hnxxo2o227g.png)
主控制器读操作:
![image.png image.png](data/attachment/forum/202312/01/111627w5lamc0iahi0825h.png)
主控制器的读写操作, 在一次数据传输过程中需要改变传送方向的操作,此时,起始信号和寻址字节都会重复一次,但两次读写方向正好相反:
![image.png image.png](data/attachment/forum/202312/01/111647u6rxl9h6jmilmlzc.png)
总结如下:
1. 无论何种方式的起始,停止,都是由主控制器发送,数据字节的传送方向则遵循寻址字节中方向位的规定。
2. 寻址字节只表明器件地址及传输方向,器件内部的n个数据地址由器件设计者在该器件的I2C总线数据操作格式中指定第一个数据字节作为器件内的单元地址,且设置地址
自动加减功能,以减少单元地址的寻址操作。
3. 每个字节的传输都必须有应答信号或者非应答信号跟随。
4. I2C总线的被控器在接收到起始信号后,都必须复位它们的总线逻辑,以便对将要开始的被控器地址的传输做预处理。
实际的数据过程可参考RX8025的抓取数据进行结合学习,如下:
![I2C数据1.jpg I2C数据1.jpg](data/attachment/forum/202312/01/111820q05snxxxnzmna5yn.jpg)
![I2C数据2.jpg I2C数据2.jpg](data/attachment/forum/202312/01/111832gngnemuqj2qn554r.jpg)
------------------------------------
3. 旋转编码器的驱动,每2ms调取一次识别函数,自带的按键识别使用状态机,每10ms调取一次
u8 Encoder_A_B_Scan(void)
{
static unsigned char Last_encoder_b;
static unsigned char Last_encoder_a;
static unsigned char Curr_encoder_b;
static unsigned char Curr_encoder_a;
unsigned char uret8 = ROTATE_STOP;
Curr_encoder_a = ENCODER_A;
Curr_encoder_b = ENCODER_B;
if(Last_encoder_a == 1 && Last_encoder_b == 1 &&
Curr_encoder_a == 1 && Curr_encoder_b == 0)
//zhengzhuan
{
uret8 = ROTATE_CLOCKWISE;
}
else if(Last_encoder_a == 1 && Last_encoder_b == 1 &&
Curr_encoder_a == 0 && Curr_encoder_b == 1)
//fanzhuan
{
uret8 = ROTATE_COUNTERCLOCKWISE;
}
else
//no rotation
{
uret8 = ROTATE_STOP;
}
Last_encoder_a = Curr_encoder_a;
Last_encoder_b = Curr_encoder_b;
return uret8;
}
利用逻辑分析仪抓取的I2C数据,可以看到0x64为写地址,0x65为读地址,分别读取0x00(秒寄存器)往后的3个字节,秒分小时,
读取0x04(日寄存器)往后的3个字节,日月年
![逻辑分析仪抓取RX8025 I2C数据.jpg 逻辑分析仪抓取RX8025 I2C数据.jpg](data/attachment/forum/202311/25/124956qfzshpnfgsnak2nh.jpg)
作品的整个原理框图为
![原理框图.jpg 原理框图.jpg](data/attachment/forum/202312/01/110810crs1rx9m5bkr244s.jpg)
BOM清单如下:
![image.png image.png](data/attachment/forum/202311/25/130524f9y0ur4bnz9510v5.png)
编译器使用远古版CVAVR
![image.png image.png](data/attachment/forum/202311/25/130612cm4z9kvgzykvv1q4.png)
烧录工具也使用的远古版SP200S增强版
![19.jpg 19.jpg](data/attachment/forum/202311/25/130701mwpq6qk1q17174sn.jpg)
![image.png image.png](data/attachment/forum/202311/25/130743b3l3snta8srrg3sr.png)
视频在这:
最后上程序,就一个main.c,附件只能传TXT
![](static/image/filetype/text.gif)
全部回复 2
放在桌面、床头,实用,日久天长,触景生情