看到闲置不用的体重计,电子人必须得有点想法!!! 段码屏的功耗不算大,可以弄个桌面小时钟 !!!
计划总体方案为ATmega16L + HT1621 + RX8025T+ 段码屏 + 旋转编码器
以下为体重计实物图(补拍):

体重计带的显示屏,一般都是段码屏,而且是定制类的显示模组,能显示冒号之类的,首先拆下


用到的几大板块,来个合影,分别是HT1621转接板,ATmega16L的主控板,外壳盒子里的垫衬板,还有屏

将屏安装在外壳盒子的前面板上

开窗处漏出的为从屏处用烙铁改装的T型头,加热焊接的斑马纸到转接板的排针

安装好的垫衬板,开关,旋转编码器

主控板安装测试,板子本身是做其他的,这里也属于废物利用

焊接RX8025T和相关线路
RX8025T是个精度很不错的RTC,除了具有I2C接口,通过pin7的FOE上拉到VCC,可以输出32.768KHz的信号,很适合改装各种表的32.768KHz的信号输入


寄存器地址和介绍如下:


焊接ATmega16L 的DIP40座

焊接旋转编码器引线

焊接HT1621的相关引线,一些用软线+焊点,一些用杜邦线+排针连接
HT1621用来驱动段码屏,通过CS RD WR DATA的组合与MCU通信


读时序:

写时序:

指令集如下:



充电宝放置位置和空间进行测试

再次核对各自的位置和空间

总装,进行调试

先把屏点亮,摸清屏的真值表并进行记录

最后调试程序,直到读取和显示,调节时间正常,合盖完工

本作品的关键点如下:
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总线。
二者都是由主控制器产生。

I2C总线信号对于信号时长时序都有严格要求,如下表:

通信时,起始信号后就紧跟着1个字节的寻址字节(包括7位地址位+1位方向位(0写,1读))。
主控制器写操作:

主控制器读操作:

主控制器的读写操作, 在一次数据传输过程中需要改变传送方向的操作,此时,起始信号和寻址字节都会重复一次,但两次读写方向正好相反:

总结如下:
1. 无论何种方式的起始,停止,都是由主控制器发送,数据字节的传送方向则遵循寻址字节中方向位的规定。
2. 寻址字节只表明器件地址及传输方向,器件内部的n个数据地址由器件设计者在该器件的I2C总线数据操作格式中指定第一个数据字节作为器件内的单元地址,且设置地址
自动加减功能,以减少单元地址的寻址操作。
3. 每个字节的传输都必须有应答信号或者非应答信号跟随。
4. I2C总线的被控器在接收到起始信号后,都必须复位它们的总线逻辑,以便对将要开始的被控器地址的传输做预处理。
实际的数据过程可参考RX8025的抓取数据进行结合学习,如下:


------------------------------------
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个字节,日月年

作品的整个原理框图为

BOM清单如下:

编译器使用远古版CVAVR

烧录工具也使用的远古版SP200S增强版


视频在这:
最后上程序,就一个main.c,附件只能传TXT

热门活动
全部回复 2
放在桌面、床头,实用,日久天长,触景生情