小弟新手,刚接触USB, 现在在设计一个东西,没得头绪,不用CPU,MCU等处理器,
用到:芯片CH341A 功能:PC机通过USB口写入一条指令或者是数据,让CH341A的某一个管脚置为高电平或低电平(需要用这种方式控制5-8个管脚),直到下一条指令或数据改变这个管脚的电平值。 下载了CH341A的中文手册 看了 还是没得头绪 那位大哥能帮忙解决一下,
小弟新手,刚接触USB, 现在在设计一个东西,没得头绪,不用CPU,MCU等处理器,
用到:芯片CH341A 功能:PC机通过USB口写入一条指令或者是数据,让CH341A的某一个管脚置为高电平或低电平(需要用这种方式控制5-8个管脚),直到下一条指令或数据改变这个管脚的电平值。 下载了CH341A的中文手册 看了 还是没得头绪 那位大哥能帮忙解决一下,
是直接用并口模式,还是怎么 是不是 在USB总线上写入一个数据包 CH341A就可以在并口上反应出这个数据内容?
参考CH341EVT 下载地址: /download/list.asp?id=60 有相关的演示程序以及源代码
谢谢!!
你可以通过下面的函数解决这样的问题: BOOL WINAPI CH341SetOutput( // 设置CH341的I/O方向,并通过CH341直接输出数据 /* ***** 谨慎使用该API, 防止修改I/O方向使输入引脚变为输出引脚导致与其它输出引脚之间短路而损坏芯片 ***** */ ULONG iIndex, // 指定CH341设备序号 ULONG iEnable, // 数据有效标志,参考下面的位说明 // 位0为1说明iSetDataOut的位15-位8有效,否则忽略 // 位1为1说明iSetDirOut的位15-位8有效,否则忽略 // 位2为1说明iSetDataOut的7-位0有效,否则忽略 // 位3为1说明iSetDirOut的位7-位0有效,否则忽略 // 位4为1说明iSetDataOut的位23-位16有效,否则忽略 ULONG iSetDirOut, // 设置I/O方向,某位清0则对应引脚为输入,某位置1则对应引脚为输出,并口方式下默认值为0x000FC000,参考下面的位说明 ULONG iSetDataOut ); // 输出数据,如果I/O方向为输出,那么某位清0时对应引脚输出低电平,某位置1时对应引脚输出高电平,参考下面的位说明 // 位7-位0对应CH341的D7-D0引脚 // 位8对应CH341的ERR#引脚, 位9对应CH341的PEMP引脚, 位10对应CH341的INT#引脚, 位11对应CH341的SLCT引脚 // 位13对应CH341的WAIT#引脚, 位14对应CH341的DATAS#/READ#引脚,位15对应CH341的ADDRS#/ADDR/ALE引脚 // 以下引脚只能输出,不考虑I/O方向: 位16对应CH341的RESET#引脚, 位17对应CH341的WRITE#引脚, 位18对应CH341的SCL引脚, 位29对应CH341的SDA引脚
还有个 问题。
就是CH341工作在 EPP模式下面时,P口 能不能持续输出?
我CH341做了块板子(仿造例程),没有用74LS273, 用例程上面的 CH341PAR.EXE 在对I/O进行控制时,发现不管LED的那一个位选中,I/O口输出都是5.1V,
ch341转的并口没有锁存功能,要加74ls273
了解, 对于 CH341A做出来的设备 同一台PC机如何区分? 像这些函数 CH341OpenDevice(ByVal iIndex As Long) 都是指定一个设备序号, 但是怎么查找 当前PC上有几个CH341A的设备呢?
可以通过iIndex来区分, iIndex = 0,操作第1个设备 iIndex = 1,操作第2个设备 ... iIndex = 15,操作第16个设备
这个知道, 但怎么获得 当前PC上面有多少个设备?iIndex 有多少个?
这个动态库没有提供API还实现,但是你可以通过CH341OpenDevice依次打开设备 int count = 0; // 当前PC上面有多少个设备 for(i=0;i{ if(CH341OpenDevice(i)) { count++; } else break; }