发表于 2022-05-30 12:17 IP属地:未知
查看 56.9W | 回复 5
学习I2C协议,重新自作8421手台信道显示控制板,断电保存
开源地址:*****/thread-315700-1-1.html
咱们论坛没有附件功能,所以需要资料的小伙伴去数码之家吧
演示视频:https://www.bilibili.com/video/BV1x341137eK?spm_id_from=333.999.0.0
多年前参考无线电论坛一位大神的程序制作过一款手台改车台的信道显示控制板,我记得包括给朋友一起做了20块。这里感谢那位大神的奉献。
我这出门躲避疫情快半年了,结果被困在辽宁3个月了,没事干就从新弄弄程序,当时做的这个控制板没有断电记忆功能,每次开机都是默认信道。正好趁着这次机会研究下EEPROM芯片。
这里肯定会有坛友问了怎么不用带eeprom的单片机?因为我手里还有很多老古董51以及24c02,放着也是浪费就用了吧
要研究eeprom芯片,首先就是学习I2C协议,当然I2C以后在驱动oled屏幕上也要用。第一件事先下载个24c02手册,做这个控制板只需要记录一个字节就行,所以5毛钱的24c02就行了。
24c02芯片在1.8v-5.5v都可以正常工作,所以跟单片机用同一个稳压就行了,或者电池供电都行。24c02可以进行100w次擦写,假设一天写入100次,也够用到机器报废那天
要掌握芯片使用,先看管脚。A0-A2是地址管脚,这个自己随便设置地址,SCL是时钟,SDA是数据,掌握了SCL与SDA的配合也就掌握了芯片使用。

相信很多小白看到时序图立马就懵了,这里有个诀窍,简单一步马上清晰----那就是画线。按照关键点来划线,瞬间清晰明了。
关键点就是 start,send SDA ,ACK,stop。 说白了就是SCL与SDA电平变化启动器件,发送数据,结束。
好了,我们一起来看看 程序真么写。
现写start
根据电平变化,咱们来定义
先初始化电平
SCL=1;
SDA=1;、
给一个延时
I2Cdelay() ;
然后按照电平要求继续写
SDA=0;
I2Cdelay();
SCL=0;

好了start完成
然后进行写入操作
一个字节是8位,因此要循环8次
咱们就写一个循环程序
for(temp=0x80;temp!=0;temp>>=1)
{
使用一个判断语句给SDA
if((temp&dat)==0)
SDA=0;
else SDA=1;
I2Cdelay();
SCL=1;
I2Cdelay();
SCL=0;
每写一个数据就要求从机给一个应答,

底层I2C协议搞定,再来搞24c02操作程序。24c02简单,就是读与写的操作
先进行读操作,
I2Cstart();
I2Cwritebyte(IC_Addr<<1);
I2Cwritebyte(addr);
I2Cstart();
I2Cwritebyte((IC_Addr<<1)0x01);
dat= I2Creadbyte();
sendack(1);
I2Cstop();
return (dat);
再进行写操作
I2Cstart(

搞定,这里自作控制器只需要再原有的基础上增加一个24c02就行了。先画图,当然是仿真图啦

基本上简单东西proteus通过了就没啥问题了,好了上固件。固件是16信道控制板的(不带断电保存数据),个人使用没问题。带断电保存数据的暂时不开源,不然那几个不要脸的HAM又开始在咸鱼上卖了。