CH446复位问题

我要用单片机控制CH446切换。产品中一半左右出现上电后复位不正常的现象,经测试,CH446的引脚电平都在零点几伏左右,而正常复位后应该是5V的。 单片机开机后是先延时了2秒钟,才发送的复位信号,单片机是3.5V复位,CH446是4V复位,测试了一下CH446电源部分电压从0上升到5V大概才需要40ms,我延时了2秒才发送复位信号的,应该可以正常复位了吧。 但怎么还有很多产品不能够正常复位呢?

你给CH446复位是通过单片机I/O口复位的吗?CH446芯片工作电压是多少?


是通过单片机发送的复位信号。CH446和单片机都是5V供电


试了一下,连续送3次(复位、切换)才能够正常切换过来。是时序的问题吗?


这个更像是延时的时间不足导致的。


-----------------下面的代码,是技术支持给的。 ---------------------------------- #include "reg52.h" #include "intrins.h"

sbit CH446_DAT =P1^0; sbit CH446_CK =P1^1; sbit CH446_STB =P1^2; sbit CH446_RST =P1^3;

typedef unsigned char UINT8; typedef unsigned short UINT16;

#define NOP { _nop_();_nop_();}

void Control_Switch_State( UINT8 Address,UINT8 State ) { UINT8 ByteCnt;

CH446_STB =0; CH446_DAT = 0; NOP; NOP; for( ByteCnt=0; ByteCnt<7; ByteCnt++ ) { CH446_CK =0; NOP; if( Address & 0x80 ) { CH446_DAT = 1; } else { CH446_DAT = 0; } CH446_CK =1; NOP; NOP; NOP; NOP; NOP; Address <<=1; } CH446_CK =0; if( State == 1 ) { CH446_DAT =1; } else { CH446_DAT =0; } NOP; NOP; NOP; NOP; CH446_STB =1; NOP; NOP; CH446_STB =0; NOP; NOP; }

void main( void ) { CH446_RST =1; CH446_RST =1; CH446_RST =1; NOP; NOP; NOP; NOP; NOP; NOP; CH446_RST =0; CH446_RST =0; Control_Switch_State( 0x00,1);/* Y0,X0导通 */ Control_Switch_State( 0x22,1);/* Y1,X1导通 */ while(1); } //----------------------------------------------------------------------------- 我用的是宏晶的STC单片机,30M晶振,代码与上面一样,同时由于STC单片机比51快,将延时函数: #define NOP { _nop_();_nop_();} 改为了 #define NOP { _nop_();_nop_();_nop_();_nop_();_nop_();}

但是,仍然出现上面的情况,很多情况下,连续发三次(复位、切换)才可正常,有时发1次能正常。


在复位之后加50MS的延时在切换。 CH446_RST =0; CH446_RST =0; DELAYMS(50); Control_Switch_State( 0x00,1);/* Y0,X0导通 */ Control_Switch_State( 0x22,1);/* Y1,X1导通 */


加了50m延时,问题依旧。没效果。


另外: CH446手册上说:-------------------------------------------------------------------------- 由于模拟电路与数字电路共用VDD,为减少干扰,VDD和VEE引脚必须外接退耦电容,并且建议 将数字输入信号的边沿适当放缓,降低传输频率。另外,对于强干扰的应用环境,单片机可以每隔数 秒定期对CH446进行刷新,确保各个模拟开关处于正确的开关状态。 ---------------------------------------------------------------------------------------- 那就是说:我用CH446切换后,还要定期刷新啊,那岂不是太不可靠了。


我也是按照这个代码移植到用pic驱动,我想问的是不用初始化ch446的吗?直接这样我是发现没任何反应的,然后整个社区我都翻了一遍都没有例程……不知道怎么用的


楼上的朋友,不知道您芯片的电路连接是否有问题,可以直接来电确认一下025-52632854


#include 

#define RST 4
#define STB 19
#define SK  18
#define DAT 23

#define LED 5

//CH446Q初始化
void CH446Q_Init(){
pinMode(STB,OUTPUT);
pinMode(DAT,OUTPUT);
pinMode(SK,OUTPUT);
pinMode(RST,OUTPUT);
digitalWrite(RST,1);
delay(50);
digitalWrite(RST,0);
}

//发送地址和状态
void CH446Q_SendAddr_Switch(uint8_t addr,bool data){
uint8_t ByteCnt;

digitalWrite(STB,0);
digitalWrite(DAT,0);

delay(20);

for(ByteCnt=0;ByteCnt<8;ByteCnt++){
digitalWrite(SK,0);
delay(10);

if(addr & 0x80){
digitalWrite(DAT,1);
}else{
digitalWrite(DAT,0);
}
digitalWrite(SK,1);
delay(50);
addr <<=1;
}

digitalWrite(SK,0);

if(data == 1){
digitalWrite(DAT,1);
}else{
digitalWrite(DAT,0);
}

delay(40);
digitalWrite(STB,1);
delay(20);
digitalWrite(STB,0);
delay(20);
}

void setup() {
CH446Q_Init();
CH446Q_SendAddr_Switch(0x01,1); //Y0-X1连接
CH446Q_SendAddr_Switch(0x7F,1); //Y7-X15连接
pinMode(LED,OUTPUT);
}

void loop() {
digitalWrite(LED,1);
delay(1000);
digitalWrite(LED,0);
delay(1000);
}

ESP32-CH446Q.jpgESP32-CH446Q测试.jpg测试成功!!!


CH446X 供电7.6v,芯片发烫,怎么处理? 供电5V,就正常了。


电源电压应该满足两个条件:VDD>GND>=VEE 和 VDD>GND+4V,推荐以下组合:

image.png





只有登录才能回复,可以选择微信账号登录