求助:为什么ch375的D0-D7接到AVR的I/O口上,AVR会非常热???

楼主您好!我用AVR+CH375做成USB设备,为什么ch375的D0-D7接到AVR的I/O口上,AVR会非常热???

仔细检查IO设置,可能WR为0,AVR的IO口(数据口)为输出状态,并且输出0。 你把AVR的IO设置输入可能就不发烫了。 简单的说,可能读写时序不对。


您好!我的程序就是按照CH372EVT\PUB\TEST\MCU里的test.c修改的 void CH375_WR_CMD_PORT( uchar cmd ) { /* 向CH375的命令端口写入命令,周期不小于4uS,如果单片机较快则延时 */ delay_us(2); PORTC = 0xFF; //配置P口为高电平输出 DDRC = 0xFF; //配置P口为输出 CS(0); //表示该端口为0 WR(0); A0(1); //表示该端口为1 RD(1); PORTC = cmd; CS(1); WR(1); A0(0); delay_us(2); }

void CH375_WR_DAT_PORT( uchar dat ) { /* 向CH375的数据端口写入数据,周期不小于1.5uS,如果单片机较快则延时 */ PORTC = 0xFF; //配置P口为高电平输出 DDRC = 0xFF; //配置P口为输出 CS(0); WR(0); A0(0); PORTC = dat; CS(1); WR(1); }

uchar CH375_RD_DAT_PORT(void) { /* 从CH375的数据端口读出数据,周期不小于1.5uS,如果单片机较快则延时 */ uchar CH375_RD_DAT; PORTC = 0xFF; //配置P口为高阻态 DDRC = 0x00; //配置P口为输入 CS(0); WR(1); RD(0); A0(0); CH375_RD_DAT = PINC; CS(1); WR(0); RD(1); A0(1); return( CH375_RD_DAT ); }


时序严重错误。 void CH375_WR_CMD_PORT( uchar cmd ) { /* 向CH375的命令端口写入命令,周期不小于4uS,如果单片机较快则延时 */ delay_us(2); PORTC = cmd; //配置P口为高电平输出 DDRC = 0xFF; //配置P口为输出 A0(1); //表示该端口为1 CS(0); //表示该端口为0 WR(0); RD(1); CS(1); WR(1); A0(0); delay_us(2); } 其余的自行修改,只要CS,WR为0就开始采样数据了。按照你的写法肯定是采样到0XFF数据。 A0要最先变化。


好的!我试试 谢谢


您好!修改完了还是继续发热! //ICC-AVR application builder : 2010-3-5 11:22:21 // Target : M64 // Crystal: 7.3728Mhz

#include #include #include "CH375INC.H"

#define uchar unsigned char #define uint unsigned int

#define CS(x) if(x==1) PORTF|=BIT(3);else PORTF&=~BIT(3) #define WR(x) if(x==1) PORTF|=BIT(2);else PORTF&=~BIT(2) #define RD(x) if(x==1) PORTF|=BIT(1);else PORTE&=~BIT(1) #define A0(x) if(x==1) PORTF|=BIT(0);else PORTF&=~BIT(0)

void port_init(void) { PORTA = 0x00; DDRA = 0x00; PORTB = 0x00; DDRB = 0x00; PORTC = 0x00; //m103 output only DDRC = 0xFF; PORTD = 0x00; DDRD = 0x00; PORTE = 0x00; DDRE = 0x00; PORTF = 0xFF; DDRF = 0xFF; PORTG = 0x00; DDRG = 0x00; }

//call this routine to initialize all peripherals void init_devices(void) { //stop errant interrupts until set up CLI(); //disable all interrupts XDIV = 0x00; //xtal divider XMCRA = 0x00; //external memory port_init();

MCUCR = 0x00; EICRA = 0x00; //extended ext ints EICRB = 0x00; //extended ext ints EIMSK = 0x00; TIMSK = 0x00; //timer interrupt sources ETIMSK = 0x00; //extended timer interrupt sources SEI(); //re-enable interrupts //all peripherals are now initialized }

/*********************************延时函数***************************************/ /* 延时t微秒 */ void delay_us(uint t) { do t--; while(t>1); }

/*延时t毫秒*/ void delay_ms(uint t) { while(t!=0) { delay_us(1000); t--; } }

void CH375_WR_CMD_PORT( uchar cmd ) { /* 向CH375的命令端口写入命令,周期不小于4uS,如果单片机较快则延时 */ PORTC = cmd; //配置P口为高电平输出 A0(1); //表示该端口为1 DDRC = 0xFF; //配置P口为输出 RD(1); CS(0); //表示该端口为0 WR(0); CS(0); WR(1); CS(1); A0(0); DDRC = 0x00; PORTC = 0xFF; delay_us(2); }

void CH375_WR_DAT_PORT( uchar dat ) { /* 向CH375的数据端口写入数据,周期不小于1.5uS,如果单片机较快则延时 */ PORTC = dat; //配置P口为高电平输出 DDRC = 0xFF; //配置P口为输出 CS(0); WR(0); CS(1); WR(1); DDRC = 0x00; PORTC = 0xFF; }

uchar CH375_RD_DAT_PORT(void) { /* 从CH375的数据端口读出数据,周期不小于1.5uS,如果单片机较快则延时 */ uchar CH375_RD_DAT; DDRC = 0x00; //配置P口为输入 PORTC = 0xFF; //配置P口为高阻态 CS(0); RD(0); CH375_RD_DAT = PINC; CS(1); RD(1); PORTC = 0xFF; return( CH375_RD_DAT ); }

/* CH375初始化子程序 */ void CH375_Init(void) { uchar i; /* 测试CH375是否正常工作,可选操作,通常不需要 */ CH375_WR_CMD_PORT( CMD_CHECK_EXIST ); /* 测试CH375是否正常工作 */ CH375_WR_DAT_PORT( 0x55 ); /* 写入测试数据 */ i = ~ 0x55; /* 返回数据应该是测试数据取反 */ if ( CH375_RD_DAT_PORT( ) != i ) { /* CH375不正常 */ for ( i=80; i!=0; i-- ) { CH375_WR_CMD_PORT( CMD_RESET_ALL ); /* 多次重复发命令,执行硬件复位 */ CH375_RD_DAT_PORT( ); } CH375_WR_CMD_PORT( 0 ); delay_ms(50); /* 延时50ms */ } /* 设置USB工作模式, 必要操作 */ CH375_WR_CMD_PORT( CMD_SET_USB_MODE ); CH375_WR_DAT_PORT(2); /* 设置为使用内置固件的USB设备方式 */ for ( i=100; i!=0; i-- ) { /* 等待操作成功,通常需要等待10uS-20uS */ if ( CH375_RD_DAT_PORT( ) == CMD_RET_SUCCESS ) break; } }

/******************主函数**********************/ void main(void) { init_devices(); //单片机初始化 CH375_Init(); while (1) { CH375_WR_DAT_PORT(0x55); } }


那你不操作的时候的话,那么你用万用表量下D0-D7的电压是多少?还有所有和CH375连接的I/O口电压是多少?估计有哪一个引脚或者几个引脚,我们输出高电平,而单片机输出低电平。


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