计划用7135做个多用表,画了表头PCB部分,想用S52+1602显示,可是不会编程。。。。
常用的DT9103A挂了,计划用7135做个多用表,画了表头PCB部分,想用S52+1602显示,可是不会编程。。。。,想做成自动量程的,1602第一行显示测量的数值和类别,第二行显示别的参数,带串口和PC通讯,能把测量的电压、电流、电阻等在PC上记录。http://cache.amobbs.com/bbs_upload782111/files_23/ourdev_515493.jpg
(原文件名:7135PCB.jpg) busy一根线给单片机就行了 哦,知道这个方法,可是不会写程序,基准电压用的MC1403,COCLK用的4060+4M晶振分频为125KH,或选择板上提供—5V电压的7404的约125KH的时钟。 我能提供程序,51/AVR都有 哦?收费的还是.....? 有时间把全部电路图画一下传上来.请高手指点。 学生用于学习免费提供,用于商业不提供或收费 当然是自用,顺便学习,望能指导,硬件能自己搞定.程序不行,买了套51学习板一直没时间学, 自动量程还要加档位切换吧。 是呀,计划用继电器切换量程,S52+1602显示,显示5 1/2.精度4 1/2,带串口通讯,测量的结果能上传到电脑,用简单的串口调试程序就能接收。 自己做吧,多简单的事啊,
年轻人,多练习。 呵呵,对于你来说很简单,我连简单的流水灯的汇编都不会,更别说1602了。 在公司电脑,明天传上来。
如果连流水灯都不会,传上来作用也不大。 多谢了,十分感激,改改程序的引脚定义还会的,仿制成功过杜样的12864的万年历,M8数控电源都为了画PCB方便简单的改过引脚。 我的程序没有用1602,我传上ICL7135的读取代码,其它的你得自己改。 整了个程序,可是编译不了,高手给帮忙看看:
/* SVM1601A (16x1)接线图
=================================================================
连接线图: MCU-----89S52
DB0-----P2.0 DB4-----P2.4 RS-------P0_1
DB1-----P2.1 DB5-----P2.5 RW-------P0_2
DB2-----P2.2 DB6-----P2.6 E--------P0_3
DB3-----P2.3 DB7-----P2.7
VLCD接1K电阻到GND
=================================================================*/
/* ICL7135接线图
=================================================================
连接线图: MCU-----89S52
/STR----P3.2(/INT0)
B1-----P0.4 R/H------P0.0 BUSY----P3.6
B2-----P0.5 POL------P1.5
B4-----P0.6 OVER-----P1.6
B8-----P0.7 UNDER----P1.7
================================================================*/
DARPOLEEQU60H ;正负号地址
DARSTART EQU61H ;第一数位
DAREND EQU67H ;结束位
INTNUM EQU68H ;用于判断中断次数的寄存器
VGRADE EQU69H ;档位值
DPOINT EQU6AH ;小数点位
BEGIN EQU6BH ;显示数据标志位
ADSTARTBITP0.0 ;A/D转换使能
RS BIT P0.1
RW BIT P0.2
EBIT P0.3
ORG 0000H
SJMP START
ORG 0003H
LJMP INTUSE
START: SETB ADSTART ;单片机电压表
MOV INTNUM,#00H ;清中断次数
MOV SCON,#50H ;UART工作在MODE1
MOV TMOD,#20H ;TIMER1工作在MODE2
MOV TH1,#0A0H ;波特率300
SETB TR1 ;启动记时器1
MOV IE,#10000001B ;中断EA使能,EX0使能
MOV SP,#70H ;设置堆栈
MOV BEGIN,#00H
MOV P2,#01H ;清屏
CALL ENABLE ;写到指令寄存器
MOV P2,#38H ;功能设定(8位,2行,5*7点阵)智表设计P236
CALL ENABLE
MOV P2,#00001100B ;显示器ON,光标OFF,闪烁OFF
CALL ENABLE
MOV P2,#06H ;I/D=1,DDRAM地址加1,显示器OFF
CALL ENABLE
S1 : MOV P2,#80H ;第一行字符起始地址
CALL ENABLE
JNB P1.6,S2
MOV DPTR,#TABLE0
AJMP S3
S2 : MOV DPTR,#TABLE1 ;显示'Voltage'字符
S3 : CALL WRITE1
MOV A,BEGIN
CJNE A,#01H,S1
MOV P2,#0C0H ;第二行字符起始地址
CALL ENABLE
CALL WRITE2 ;显示A/D采样的数据
CALL SERCOM ;串行通讯
AJMP S1
ENABLE:CLR RS ;RS=0,写到指令寄存器
CLR RW ;R/W=0
SETB E ;E1→0 使能
CALL DELAY ;延时2.5ms
CLR E ;禁止
RET
WRITE1:MOV R1,#00H ;输出字符的子程序
A1: MOV A,R1
MOVC A,@A+DPTR
CJNE A,#00H,A2
RET
A2: CALL WRITE3 ;写到LCD ROM的子程序
INC R1
AJMP A1
WRITE2:MOV R0,#60H ;输出数据的子程序,数据区地址
A3: MOV A,@R0
CALL WRITE3 ;写到LCD ROM的子程序
INC R0
CJNE R0,#DAREND,A3
MOV R0,#60H
RET
WRITE3:MOV P2,A ;写到LCD ROM的子程序
SETB RS
CLR RW
SETB E
CALL DELAY ;延时2.5ms
CLR E
RET
SERCOM:MOV R1,#00H ;输出字符的子程序
A11: MOV A,R1
MOVC A,@A+DPTR
CJNE A,#00H,A12
AJMP A14
A12: MOV SBUF,A ;写到LCD ROM的子程序
A16: JBC TI,A15
AJMP A16
A15: INC R1
AJMP A11
A14: MOV R0,#60H ;输出数据的子程序,数据区地址
A4:MOV A,@R0
MOV SBUF,A
A6:JBC TI,A5
AJMP A6
A5:INC R0
CJNE R0,#DAREND,A4
RET
DELAY:MOV R4,#05H ;延时2.5ms子程序
D1: MOV R5,#0FFH
DJNZ R5,$
DJNZ R4,D1
RET
/* 中断寄存器使用情况
=================================================================
MCU-----89S52
R0 ----- 存数首地址 P1.0 = 0 ----- 2V档位
R2 ----- 档位值 P1.1 = 0 ----- 20V档位
R3 ----- 定义小数点位 P1.2 = 0 ----- 200V档位
R4 ----- 消隐标志位 P1.3 = 0 ----- 2000V档位
=================================================================*/
INTUSE: ;中断子程序
CLR EA
PUSH ACC
PUSH PSW
SETB PSW.3 ;切换寄存器组1
MOV A,#00H ;#00H,判断是否首次!
CJNE A,INTNUM,NEXT ;是首次中断吗?非则转NEXT
MOV R0,#DARSTART ;数据区首地址
MOV R2,#00H ;清档位值
MOV R3,#00H ;清小数点位
MOV R4,#01H ;置消隐标志位
JNB P1.6,K0
SETB P1.4
AJMP K1
K0:CLR P1.4
K1:JB P1.5,POL ;置正负号
MOV DARPOLE,#2DH ;负显示负号
AJMP K2
POL: MOV DARPOLE,#20H ;正则不显示
K2:MOV A,P0 ;读P0口,读7135输出的BCD码
ANL A,#0F0H ;取高四位
SWAP A
ADD A,#30H
SETB P1.0 ;判档位
SETB P1.1
SETB P1.2
SETB P1.3
JNB P1.0,IA1 ;是2V档吗?
INC R2
JNB P1.1,IA1 ;是20V档吗?
INC R2
JNB P1.2,IA1 ;是200V档吗?
INC R2
IA1:XCH A,R3 ;定义小数点位
MOV A,R2
ADD A,#62H
XCH A,R3
MOV DPOINT,R3
CJNE R2,#00H,IB0 ;是2V档位
AJMP IB1
IB0: CJNE A,#30H,IB1 ;A是零吗?
AJMP IB2
IB1: MOV R4,#00H ;清消隐标志位
AJMP IB3
IB2: MOV R4,#01H ;置标志位
ADD A,#70H
IB3: MOV @R0,A
INC R0
INC INTNUM ;中断次数加1
RETN: POP PSW
POP ACC
SETB EA
RETI
NEXT: MOV A,R0
CJNE A,DPOINT,NEXT3 ;置小数点
MOV @R0,#2EH
INC R0
NEXT3:MOV A,P0
ANL A,#0F0H
SWAP A
ADD A,#30H
CJNE A,#30H,IC1
CJNE R4,#01H,IC2
CALL REMOVE
AJMP IC2
IC1: MOV R4,#00H
IC2: MOV @R0,A ;送到数据区
INC R0
INC INTNUM
MOV A,R0
CJNE A,#DAREND,RETN ;够五次了吗?
MOV INTNUM,#00H ;清中断次数
MOV BEGIN,#01H
SJMP RETN
REMOVE:MOV R1,INTNUM ;消隐子程序
CJNE R1,#01H,IEE1 ;是第二次中断吗?
CJNE R2,#01H,IEE2 ;是20V档吗?
MOV R4,#00H
RET
IEE2:ADD A,#70H
RET
IEE1:CJNE R1,#02H,RETN2 ;是第三次中断吗?
CJNE R2,#03H,RETN2 ;是2000V档吗?
ADD A,#70H
MOV R4,#00H
RETN2:RET
TABLE0:DB 'Over!!!:',00H ;显示字符,00H结束位
TABLE1:DB 'Voltage:',00H ;显示字符,00H结束位
END 【6楼】 huwuzhao 前方
如何证明是学生呢? 我不是学生,也不是搞设计的,只是业余爱好。对了网上公开的7135读取码很多........ 既然连流水灯都不会还用啥单片机呢。用7211(驱动LCD)或者直接驱动LED就好了嘛。网上例子遍地,不想自己搞,我印象中taobao上也有现成的散件呀 我有C的,要我就上传。 现在电流表电压表拆开来看大都用这些没有单片机的东西,性能还稳定! 以前同事给的。汇编代码
;*********************************************
;原有电压表应用在胡工手工焊板上
;************************************
RS EQU P2.5
RW EQU P2.6
E EQU P2.7
DAT EQU P0
ORG 0000H
JMP START
ORG 30H
START: NOP
MOV P0,#00001111B
MOV TMOD,#00000001B
LOOP:
LCALL ADC
MOV R6,TH0
MOV R7,TL0
;把数据减去20002
CLR C
MOV A,R7
SUBB A,#22H
MOV R7,A
MOV A,R6
SUBB A,#4EH
MOV R6,A
;把结果右移一位
CLR C
MOV A,R6
RRC A
MOV R6,A
MOV A,R7
RRC A
MOV R7,A
LOOP_1:LCALL HB2 ;二进制数转化为BCD码
MOV A,R3
ANL A,#00001111B
MOV 40H,A
MOV A,R4
ANL A,#11110000B
SWAP A
MOV 41H,A
MOV A,R4
ANL A,#00001111B
MOV 42H,A
MOV A,R5
ANL A,#11110000B
SWAP A
MOV 43H,A
MOV A,R5
ANL A,#00001111B ;44H这位数丢失
MOV 44H,A
LOOP_2:LCALL DISP
JMP LOOP
ADC: JNB P3.2,ADC
MOV TL0,#0
MOV TH0,#0
SETB TR0
WH: JB P3.2,WH
CLR TR0
RET
;双字节二进制数转化为双字节BCD码整数
HB2:CLR A ; ;BCD码初始化
MOV R3,A
MOV R4,A
MOV R5,A
MOV R2,#10H ; ;转换双字节十六进制整数
HB3: MOV A,R7 ; ;从高端移出待转换数的一位到CY中
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV A,R5 ; ;BCD码带进位自身相加,相当于乘2
ADDC A,R5
DA A ; ;十进制调整
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
MOV A,R3
ADDC A,R3
MOV R3,A ; ;双字节十六进制数的万位数不超过6,不用调整
DJNZ R2,HB3 ; ;处理完16bit
RET
;显示实际电压
DISP: NOP
MOV DAT,#01H ;清屏
CALL ENABLE
MOV DAT,#38H ;显示功能
CALL ENABLE
MOV DAT,#0FH ;显示开关控制
CALL ENABLE
MOV DAT,#06H ;+1
CALL ENABLE
MOV DAT,#81H;第一行的位置
CALL ENABLE
MOV R1,#17
CALL WRITE1
MOV DAT,#83H
CALL ENABLE
MOV R1,33H
CALL WRITE1;到TABLE1取码
MOV R1,#10
CALL WRITE1
MOV R1,32H
CALL WRITE1
MOV R1,31H
CALL WRITE1
MOVR1,30H
CALL WRITE1
MOV DAT,#89H
CALL ENABLE
MOV R1,#20
CALL WRITE1
MOV R1,37H
CALL WRITE1;到TABLE1取码
MOV R1,#10
CALL WRITE1
MOV R1,36H
CALL WRITE1
MOV R1,35H
CALL WRITE1
MOVR1,34H
CALL WRITE1
MOV DAT,#0C6H
CALL ENABLE
MOV R1,40H
CALL WRITE1
MOV R1,#10
CALL WRITE1
MOV R1,41H
CALL WRITE1
MOV R1,42H
CALL WRITE1
MOVR1,43H
CALL WRITE1
MOV R1,44H
CALL WRITE1
MOV R1,#22
CALL WRITE1
MOV R1,#33
CALL WRITE1
MOV DAT,#8FH
CALL ENABLE
MOV R1,#22
CALL WRITE1
RET
;显示最大参数子程序
DISP_0:NOP
MOV DAT,#01H ;清屏
CALL ENABLE
MOV DAT,#38H ;显示功能
CALL ENABLE
MOV DAT,#0FH ;显示开关控制
CALL ENABLE
MOV DAT,#06H ;+1
CALL ENABLE
MOV DAT,#83H;第一行的位置
CALL ENABLE
MOV R1,#17
CALL WRITE1
MOV DAT,#86H
CALL ENABLE
MOV R1,33H
CALL WRITE1;到TABLE1取码
MOV R1,#10
CALL WRITE1
MOV R1,32H
CALL WRITE1
MOV R1,31H
CALL WRITE1
MOVR1,30H
CALL WRITE1
MOV DAT,#0C3H
CALL ENABLE
MOV R1,#20
CALL WRITE1
MOV DAT,#0C6H
CALL ENABLE
MOV R1,37H
CALL WRITE1;到TABLE1取码
MOV R1,#10
CALL WRITE1
MOV R1,36H
CALL WRITE1
MOV R1,35H
CALL WRITE1
MOVR1,34H
CALL WRITE1
CJNE R0,#33H,DISP_01
MOV DAT,#86H
CALL ENABLE
JMP DISP_03
DISP_01:CJNE R0,#32H,DISP_02
MOV DAT,#88H
CALL ENABLE
JMP DISP_03
DISP_02:CJNE R0,#31H,DISP_04
MOV DAT,#89H
CALL ENABLE
JMP DISP_03
DISP_04:CJNE R0,#30H,DISP_05
MOV DAT,#8AH
CALL ENABLE
JMP DISP_03
DISP_05:CJNE R0,#37H,DISP_06
MOV DAT,#0C6H
CALL ENABLE
JMP DISP_03
DISP_06:CJNE R0,#36H,DISP_07
MOV DAT,#0C8H
CALL ENABLE
JMP DISP_03
DISP_07:CJNE R0,#35H,DISP_08
MOV DAT,#0C9H
CALL ENABLE
JMP DISP_03
DISP_08:NOP
MOV DAT,#0CAH
CALL ENABLE
DISP_03:NOP
RET
ENABLE:CLR RS ;送命令
CLR RW
CLR E
CALL DELAY_3
SETB E
RET
WRITE1:MOV DPTR,#TABLE1
MOV A,R1
MOVC A,@A+DPTR
CALL WRITE2 ;显示到lcd
RET
WRITE2:MOV DAT,A ;显示
SETB RS
CLR RW
CLR E
CALL DELAY_3
SETB E
RET
DELAY_3: MOV R4,#1
D1: MOV R5,#80H
DJNZ R5,$
DJNZ R4,D1
RET
DELAY:MOV R6,#0FFH
DJNZ R6,$
DJNZ R7,DELAY
RET
TABLE1:DB"0123456789.gZJL:MHXMLN NOSIGNALABV"
END 谢谢了,慢慢研究,等做好了传上资料,虽然淘宝有套件,但是还是喜欢自己动手,没有单片机也很稳定,有单片机更灵活. 其实DIY万用表继电器切换是很好的选择,绝对有最好的开关特性,就是做8位半的表都没问题,我也一直想自己做个万用表,就是用继电器切换档位。
继电器切换档位不好做,质量好的体积小的继电器价格很贵,都得5块钱以上,尤其有些干簧管继电器就非常好,体积小噪音小,如果想少花钱就用常用的继电器,宏发的乔乐的都有1块多钱的,电流倒是很大,就是噪音很大,换挡时吸合声音大,不过不嫌弃吵也可以,我就想用这种继电器做,还有体积自然会很大,就得做成台式的,体积得有HP34401一样大。 把7135的热转印热转印打印ourdev_518270.rar(文件大小:34K) (原文件名:7135.rar)
http://cache.amobbs.com/bbs_upload782111/files_23/ourdev_518271.JPG
7135热转印 (原文件名:7135热转印.JPG) 用并行口太占IO了,
利用busy和7135的CLK做最简单了。busy接单片机外部中断,clk接定时器外部时钟输入。 高电平期间开始计数。 最终结果减一个常数就可以了。 不过会有一个count的误差。 呵呵,谢谢老许,可以开源,彻底都没问题,只能完成硬件部分,水平有限,只能东拼西凑的,让高手见笑了.纯属业余爱好.目前只完成了自动电压测量,显示部分还没做,用数码管太麻烦.1602还不会写程序,时间也比较少,抽时间把电路图和程序流程图画一下传上来. 我也上传个1602的测试程序,有空你自己改成自己要用的东西
//*********------09.03.01--wlt-------******
//**********Character LCM screen test******
//*****************************************
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define Data_Port P0
uchar code DATA[]={0xff,0xff,0x00,0x00,0xff,0x00,0x00,0xff,
0x55,0x55,0xaa,0xaa,0x55,0xaa,0xaa,0x55};
sbit RS=P2^0;
sbit RW=P2^1;
sbit EN=P2^2;
sbit NEXT=P1^3;
sbit LAST=P1^4;
sbit AUTO=P1^5;
uchar num,k;
uchar i,j;
void init();
void delay1ms(uint z);
void write_com(uchar com);
void write_data(uchar date);
void show();
void displaydata();
void key();
void main()
{
init();
show();
displaydata();// written characters Library function
while(1)
{
key();
}
}
void key()
{
if(NEXT==0) //The next screen
{
delay1ms(30);
if(NEXT==0)
{
k++;
if(k>9)
k=1;
while(!NEXT);
write_com(0x01);//Clean screen
show();
}
}
if(LAST==0) //The last screen
{
delay1ms(30);
if(LAST==0)
{
k--;
if(k<1)
k=9;
while(!LAST);
write_com(0x01);//Clean screen
show();
}
}
if(AUTO==0) //Automatically switch the screen
{
delay1ms(30);
if(AUTO==0)
{
delay1ms(30);
while(!AUTO);
write_com(0x01);//Clean screen
for(k=1;k<11;k++)
{
show();
delay1ms(2000);
}
}
}
}
void show()
{
switch(k)
{
case 1://Special characters
write_com(0x80);
for(num=0;num<40;num++)
write_data(0x41+num);
write_com(0x80+0x40);
for(num=0;num<40;num++)
write_data(0x61+num);
break;
case 2://All black
write_com(0x80);//display first line
for(i=0;i<40;i++) write_data(0x00);
write_com(0xc0);//display scecond line
for(i=0;i<40;i++) write_data(0x00);
break;
case 3://All white
write_com(0x80);
for(i=0;i<40;i++) write_data(0x01);
write_com(0xc0);
for(i=0;i<40;i++) write_data(0x01);
break;
case 4://Single Common line
write_com(0x80);
for(i=0;i<40;i++) write_data(0x02);
write_com(0xc0);
for(i=0;i<40;i++) write_data(0x02);
break;
case 5://Double Common line
write_com(0x80);
for(i=0;i<40;i++) write_data(0x03);
write_com(0xc0);
for(i=0;i<40;i++) write_data(0x03);
break;
case 6://Single Segment lines
write_com(0x80);
for(i=0;i<40;i++) write_data(0x04);
write_com(0xc0);
for(i=0;i<40;i++) write_data(0x04);
break;
case 7://Double Segment lines
write_com(0x80);
for(i=0;i<40;i++) write_data(0x05);
write_com(0xc0);
for(i=0;i<40;i++) write_data(0x05);
break;
case 8://Snowflake 1
write_com(0x80);
for(i=0;i<40;i++) write_data(0x06);
write_com(0xc0);
for(i=0;i<40;i++) write_data(0x06);
break;
case 9://Snowflake 2
write_com(0x80);
for(i=0;i<40;i++) write_data(0x07);
write_com(0xc0);
for(i=0;i<40;i++) write_data(0x07);
break;
case 10://Special characters
write_com(0x80);
for(num=0;num<40;num++)
write_data(0xa1+num);
write_com(0x80+0x40);
for(num=0;num<40;num++)
write_data(0xc9+num);
break;
}
}
void displaydata()
{
uchar i,j;
write_com(0x40);//set cgram
for(i=0;i<16;i+=2)
{
for(j=0;j<4;j++)
{
write_data(DATA);
write_data(DATA);
}
}
}
void init()//Initialization Functions
{
EN=0;
k=1;
write_com(0x38);//Set16*2,5*7,8-bit data interface
write_com(0x0c);//Open show,Don't show Cursor and Blinking cursor
write_com(0x06);//Automatic cursor 1,All screen display will not move
write_com(0x01);//Clean screen
}
void delay1ms(uint z)//delay 1ms Functions
{
uint x,y;
for(x=z;x>0;x--)
for(y=50;y>0;y--);
}
void write_com(uchar com)//Writing directive Functions
{
RS=0;
RW=0;
Data_Port=com;
delay1ms(1);
EN=1;//Give EN a high pulse
delay1ms(1);
EN=0;
}
void write_data(uchar date)//Write date function
{
RS=1;
RW=0;
Data_Port=date;
delay1ms(1);
EN=1;//Give EN a high pulse
delay1ms(1);
EN=0;
} 【26楼】 bozai 章其波
利用busy和7135的CLK做最简单了。busy接单片机外部中断,clk接定时器外部时钟输入。 高电平期间开始计数。 最终结果减一个常数就可以了。 不过会有一个count的误差。
------------
我试过用 BUSY 读 7135,和利用 STR 读 7135 的 D0-D3,结果不稳定,有时和后者一致,有时比后者多一个计数。后者读出值和数码管上完全一致。你说的是不是这个现象?
http://cache.amobbs.com/bbs_upload782111/files_24/ourdev_518393.jpg
(原文件名:PICT1835.jpg) 用单片机做7135的转换和显示,BCD要比BUSY的稳定,精确. 【30楼】 lilith
是的,我用ATmega8 外部中断+Timer1外部输入。 发现提高AVR工作频率会稳定些(应该跟Timer1 外部输入采样有关)。 另外需要减得那个常数并不是手册上的10000
不晓得是7135的问题,还是程序的问题。 不过还好,跟LED的显示也就是一个字的误差。 这样省IO口啊。 杰龙电子的把7135做成5 1/2的.不知道有没有意义.从他们网站给的数据还可以.用的就是直接读取busy. lilith 的电路有个与门在BUSY低电平的时候把CLK截了,这样按道理中断响应时间不会影响计数值。 用8952的ALE脚脉冲分频作CLK,只要BUSY脚就行了,同步运行不知能消除尾数一字的误差 mark 7135采集还是不要用单线采集,同意老许说的不稳定因素,一定要采集BCD码才最可靠,其他控制功能如果IO不够可以想办法扩展,一定有办法的。 关注一下,程序方面也许能帮点忙。
IO口紧张的话 1602数据 DB0~DB3 可不接 本人水平有限,恐怕实现不了.现在表头部分基本完成,手里只有编译通过的读取BCD的,busy的不会改程序.暂时无法实现,实际用BCD的稳定,准确,busy更能发挥7135的极限. busy信号在CLK上升沿还是下降沿改变,又或者是比较器翻转就改变
有条件的测下就能知道一个字的误差是那里产生的 杰龙电子的把7135做成5 1/2的.不知道有没有意义.从他们网站给的数据还可以.用的就是直接读取busy.
******************************
用这种方法出5位分辨率是没问题的,但第5位是没有价值的,我接触7135时间不长,但感觉要把7135做好4位已经不容易了.如果积分电容差点,全程非线性影响到3位,如果这样,最后一位就没有价值了,就变成3位半精度了.很多人只是搭出了电路,出了数据以为表就做好了,其实不然.最好能有5位半或者更高位的表来对比测试才行.
关于这个问题有个很好的例子,HP34401万用表可以出7位甚至8位数据,但还是把它称为6位半表,原因是7位数据不稳定没有价值. 5位半的双积分ADC有,intersil的HI-7159,这个片子工作原理比7135复杂,积分完成后还加反压测了积分电容上的残余电压。 Sprint Layout 画的
这软件太强了 请问LZ怎么做封装 【46楼】 xuyiyi 许意义
7135的精度能到4 1/2吗?那可是0.005% 纯理论分析7135不能到4位半,数据手册上
Linearity Over ± Full Scale 1个字,
Scale Factor Temperature Coefficient, TC (Notes 5 and 7) 5PPM/℃
而实际应用上不可能配好的基准,能在15-30℃、一年内保证5个字的精度就很不错了 如 35 楼所说,我用了一个与门,因为 7135 的手册上就是这样写的,而网络上其它人并不用这个与门。
我想了一下,7135 或者说别的什么双斜 AD,其去积分时间和被积分的输入电压成正比,那么那些没有用这个与门或者说试图提高 7135 的分辨率(不是精度)的人似乎就是想要绕过 7135 自己的时钟和计数器,用频率更高的时钟去测量这个去积分时间。理论上如果忽略 7135 的线性度和噪声,这个方法是可能的 ---前提是 BUSY 脉冲的宽度和 7135 的去积分时间一致的话。
我没有很好的数字存储示波器去记录和分析这个问题,从目前的一个字的跳动看来,除了时钟的相位差之外,就可能是 7135 的 BUSY 脉冲宽度在很大程度上确实与其去积分时间一致,就手册之后对其微分线性的阐述看来,比较器的延时导致 BUSY 的宽度比 BCD 码反映的宽度大一点是合理的,当系统噪声叠加在输入的信号上,这个稍多出来一点的宽度可能就会让外部计数器多记录一个字,这里指的是使用了与门的情况下。
如果不使用这个与门,用更高频率的时钟和外部计数器进行计数,我觉得此时得到的数据更多的是噪声叠加在上面,当然过采样提高 AD 分辨率的方法也就是这样,所以这样去提高 7135 的分辨率理论上说是可行的,实际上我曾经在一个实验中发现得到的计数是按倍数增加的,不清楚是别的问题还是什么。
http://cache.amobbs.com/bbs_upload782111/files_24/ourdev_520223.png
(原文件名:ICL7135_DS1.png) 各位都是高手呀,我没考虑那么多.都是按手册参数做的.只是自己做着玩,事情多时间少到现在还没什么进展,我没有基准源也没高精度表.个人观点7135达不到真正的4 1/2. 达不到 4.5 位精度是肯定的,但 4.5 位分辨率是实实在在的 :) 要达到 4.5 位精度,一般的 6 位半表才达到而已,比如 34401A 是 0.0035% 的基本直流精度,5 位半的表好像就没有什么可以达到 0.005% 的了,看了一下 HP 的老 5 位半大多是 0.006% 的基本直流精度而已,很低的。 回复【52楼】lilith
实际上我曾经在一个实验中发现得到的计数是按倍数增加的,不清楚是别的问题还是什么。
-----------------------------------------------------------------------
丛某个中文手册上看到BUSY在积分翻转后由CLK触发,这样丛BUSY脚扩51/2貌似行不通,而市面上有好几个人说成功扩到51/2分辨力,难道不同厂家的7135时序不一样?
今年比较忙,明年也测下看看,建议出个公板的PCB,方便对比 元旦过后我先着手设计7135的试验板,到时考虑引出BUSY和CLK线,便于实验 我做的pcb上面都引出了,CLK通过跳线可以选7404和4060或者外部输入CLK.所有外部接口都已引出.如果可以用需要原理图我可以抽时间画一下传上来,单面板跳线多了点.适合热转印. 手里还有两片7129性能要比7135好.可就是不能接数码管.接单片机和数码管太麻烦. 回复【56楼】jj3055
元旦过后我先着手设计7135的试验板,到时考虑引出BUSY和CLK线,便于实验
-----------------------------------------------------------------------
我也是,图已经化好并提交给帮我画 PCB 的同学了 :) 分为模拟部分(7135 ADC + MAX541 DAC);数字部分(单片机和接口);电源与显示部分三块,仅用于 7135 的实验和测试,不具备实用意义和价值。
http://cache.amobbs.com/bbs_upload782111/files_24/ourdev_520481.png
(原文件名:ICL7135_Slot3bb.png) 看样子实验板还是有
【57楼】 xin12345
【60楼】 lilith
推出吧,最好是单面可以热转印的.
我还是把精力放在实用板上吧,实用板需要两块板,迫于安装的需要. 出于实验方便,我会(让他)做成单面的,实际上如果不考虑这个问题而做成双面的,就没有必要做成 3 块独立的板了。不过这个只是用于测试 7135 的线性和一些功能与证实一些想法,实用的意义,是不大的。对于我来说另一个意义就是对比手头上美信,凌特的其它 16bit ADC,看谁“使用简单成本低效果好”而已 :)
由于自制双面板困难,有的时候为了布单面板实在是太费心思了,最近(让他)布的一个板,想了半天还是飞了一条线才能搞定,没办法阿,厂家 Datasheet 都要求了用双面的,现在用单面做出来,VDrop 居然也很小,不容易了。
http://cache.amobbs.com/bbs_upload782111/files_24/ourdev_520490.png
(原文件名:ATX_PCB_S01.png)
http://cache.amobbs.com/bbs_upload782111/files_24/ourdev_520491.jpg
(原文件名:PICT2018.jpg) 回复【60楼】lilith
我也是,图已经化好并提交给帮我画 PCB 的同学了 :) 分为模拟部分(7135 ADC + MAX541 DAC);数字部分(单片机和接口);电源与显示部分三块,仅用于 7135 的实验和测试,不具备实用意义和价值。
========================================================================
M8改成8952的话我去做双面板
负电压的CD4069可省掉,直接接道变压器上就行了,或者MAX232上也有负电源 过节搭了了个电路,用B1~B8+ST选通5线连89S52,串口和电脑连接采集的数据,
2010年01月02日13时05分05秒
0.9910 V : 0.9913 V : 0.9907 V : 0.9907 V : 0.9908 V : 0.9908 V : 0.9913 V : 0.9917 V : 0.9910 V : 0.9916 V : 0.9921 V : 0.9917 V : 0.9922 V : 0.9921 V : 0.9924 V : 0.9919 V : 0.9930 V : 0.9939 V : 0.9936 V : 0.9940 V : 0.9939 V : 0.9943 V : 0.9938 V : 0.9941 V : 0.9944 V : 0.9948 V : 0.9952 V : 0.9961 V : 0.9977 V : 0.9987 V : 1.0001 V : 0.9998 V : 1.0001 V : 0.9998 V : 1.0005 V : 1.0015 V : 1.0015 V : 1.0023 V : 1.0036 V : 1.0035 V : 1.0041 V : 1.0035 V : 1.0039 V : 1.0037 V : 1.0041 V : 1.0035 V : 1.0039 V : 1.0030 V : 1.0035 V : 1.0038 V : 1.0037 V : 1.0029 V : 1.0027 V : 1.0028 V : 1.0024 V : 1.0024 V : 1.0033 V : 1.0025 V : 1.0013 V : 1.0021 V : 1.0016 V : 1.0016 V : 1.0007 V : 1.0007 V : 1.0007 V : 1.0014 V : 1.0006 V : 1.0007 V : 1.0016 V : 1.0009 V : 1.0004 V : 1.0006 V : 1.0007 V : 1.0005 V : 0.0003 V : 1.0002 V : 1.0001 V : 1.9999 V : 0.9997 V : 1.0005 V : 1.0018 V : 1.0026 V : 1.0028 V : 1.0026 V : 1.0031 V : 1.0029 V : 1.0035 V : 1.0029 V : 1.0010 V : 1.0020 V : 1.0030 V : 1.0053 V : 0.0039 V : 1.0020 V : 1.0059 V : 1.0109 V : 1.0115 V : 1.0000 V : 1.0015 V : 1.0070 V : 1.0000 V : 1.0104 V : 1.0099 V : 1.0003 V : 1.0100 V : 1.0100 V : 1.0060 V : 0.0036 V : 1.0060 V : 1.0052 V : 1.0048 V : 1.0041 V : 1.0051 V : 1.0047 V : 1.0063 V : 1.0066 V : 1.0070 V : 1.0069 V : 1.0018 V : 1.9941 V : 0.9901 V : 0.9980 V : 0.9916 V : 0.9977 V : 1.0002 V : 0.9985 V : 0.9970 V : 0.9962 V : 0.9959 V : 0.9967 V : 0.9943 V : 0.9942 V : 0.9925 V : 0.9927 V : 0.9925 V : 0.9923 V : 0.9925 V : 0.9927 V : 0.9919 V : 0.9924 V : 0.9935 V : 0.9924 V : 0.9921 V : 0.9927 V : 0.9920 V : 0.9906 V : 0.9907 V : 0.9906 V : 0.9904 V : 0.9905 V : 0.9909 V : 0.9921 V : 0.9931 V : 0.9933 V : 0.9924 V : 0.9924 V : 0.9924 V : 0.9914 V : 0.9916 V : 0.9902 V : 0.9908 V : 0.9911 V : 0.9908 V : 0.9916 V : 0.9922 V : 0.9922 V : 0.9931 V : 0.9932 V : 0.9920 V : 0.9913 V : 0.9912 V : 0.9917 V : 0.9913 V : 0.9911 V : 0.9919 V : 0.9922 V : 0.9917 V : 0.9929 V : 0.9933 V : 0.9918 V : 0.9923 V : 0.9913 V : 0.9912 V : 0.9905 V : 0.9912 V : 0.9908 V : 0.9912 V : 0.9922 V : 0.9913 V : 0.9928 V : 0.9932 V : 0.9920 V : 0.9928 V : 0.9911 V : 0.9905 V : 0.9900 V : 0.9905 V : 0.9916 V : 0.9913 V : 0.9922 V : 0.9919 V : 0.9921 V : 0.9926 V : 0.9924 V : 0.9907 V : 0.9895 V : 0.9915 V : 0.9910 V : 0.9909 V : 0.9919 V : 0.9930 V : 0.9916 V : 0.9917 V : 0.9913 V : 0.9904 V : 0.9905 V : 0.9904 V : 0.9898 V : 0.9909 V : 0.9916 V : 0.9922 V : 0.9922 V : 0.9923 V : 0.9917 V : 0.9921 V : 0.9909 V : 0.9905 V : 0.9905 V : 0.9911 V : 0.9910 V : 0.9921 V : 0.9924 V : 0.9922 V : 0.9925 V : 0.9916 V : 0.9911 V : 0.9907 V : 0.9899 V : 0.9898 V : 0.9902 V : 0.9911 V : 0.9911 V : 0.9918 V : 0.9924 V : 0.9926 V : 0.9919 V : 0.9907 V : 0.9901 V : 0.9903 V : 0.9906 V : 0.9906 V : 0.9909 V : 0.9915 V : 0.9921 V : 0.9922 V : 0.9915 V : 0.9923 V : 0.9913 V : 0.9899 V : 0.9900 V : 0.9900 V : 0.9910 V : 0.9919 V : 0.9914 V : 0.9918 V : 0.9921 V : 0.9919 V : 0.9911 V : 0.9898 V : 0.9899 V : 0.9907 V : 0.9910 V : 0.9915 V : 0.9928 V : 0.9929 V : 0.9926 V : 0.9911 V : 0.9917 V : 0.9910 V : 0.9898 V : 0.9899 V : 0.9904 V : 0.9918 V : 0.9936 V : 0.9942 V : 0.9938 V : 0.9907 V : 0.9922 V : 0.9911 V : 0.9908 V : 0.9995 V : 0.9897 V : 0.9908 V : 0.9913 V : 0.9918 V : 0.9934 V : 0.9924 V : 0.9913 V : 0.9896 V : 0.9880 V : 0.9877 V : 0.9875 V : 0.9901 V : 0.9915 V : 0.9912 V : 0.9935 V : 0.9936 V : 0.9933 V : 0.9895 V : 0.9888 V : 0.9873 V : 0.9876 V : 0.9888 V : 0.9907 V : 0.9908 V : 0.9912 V : 0.9920 V : 0.9918 V : 0.9908 V : 0.9906 V : 0.9887 V : 0.9890 V : 0.9882 V : 0.9894 V : 0.9959 V : 0.9992 V : 1.0021 V : 1.0020 V : 1.0001 V 怎么变化这么大 不知道,可能是采集程序的问题,1602上的后两位数字一直跳动,不会编程,不知道程序那里有问题 你可以接数码管看看是不是也跳,我觉得读 BCD 不会有问题,程序再怎么写都不会有问题的。
下面是我采集的 7135 数据,7135 每完成一个 AD 周期就向串口发送一次数据(时钟大致是 125KHZ),采样了 8 个多小时(图表只给出了最初 8 分钟的,你如果对完整的数据有兴趣可以问我要),基本上在 9998 和 9999 之间变化,没有超出这两个数的。
http://cache.amobbs.com/bbs_upload782111/files_24/ourdev_522721.png
(原文件名:ICL_7135_T01.png) 数码管末位有点跳动,液晶的太严重.我换了4片7135都是那样.在成品表头上也只是一个字的变化,我用的程序就是上面我贴的,没有别的程序可实验,如果方便可以的话麻烦你传份完整的程序给我可以么?先谢谢了.邮箱:bdjxfd@yahoo.com.cn, 我是用一个 M16 实验板 + 12232 LCD 采集测试的,这个程序给你也没用吧 :) 至于 60 楼我那个图,某人还在画板中,所以也就没有写程序了,等写好了可以给你,是 M8 + 1602 LCD 的,就不知道你是否用得上?
至于程序的采集 7135 数据部分分别如下,用 BASIC 的,就不好意思了 :D
从 STR/BCD 采集
Interrupt Int1(), Save 1 ' STR 接到了外部中断 1
tData(tCount) = PINB And &b00001111 ' tData 是 Word 数组变量;7135 的 BCD 接到 PB 的低 4 位
If tCount >=4 Then
tRead = tData(0) * 10000 + tData(1) * 1000 + tData(2) * 100 + tData(3) * 10 + tData(4)' tRead 是 Word 变量
Print tRead ' 此句要求 M16 的硬件 UART 发送 tRead 变量(有关硬件 UART 的其它代码就不列出了)
tCount = 0
Else
tCount = tCount + 1
End If
End Interrupt
从 BUSY 采集
Interrupt Int1(), Save 1 ' BUSY 接到了外部中断 1;CLOCK 接到了 M16 的计时器 T1
tClock = Counter1 ' tClock 是 Word 变量;Counter1 即 M16 的计时器 T1
Stop Counter1
Counter1 = 0
Start Counter1
End Interrupt
66 楼的图,是用下面 BUSY 程序采集的,所以是有 1 个字的跳动。 谢谢,虽然用不上,能看看15楼我贴的程序有什么问题么?能编译,能采集,我觉得是中断和定时有问题. 重新热转印了PCB并修改了程序,还是采用BCD+STR 5线连接,1uf电容用的250V的,0.47的用的是安规电容.时钟用4060加4M晶振分频为125K.基准用的是拆机的韩国产1403U;输入和基准短接显示9994.和7129芯片的4 1/2表对比.分别测了:0.0500、1.0000和1.9900误差分别为:3、5和8个字,4脚没接电阻,手里没有再好电容.小地方好多元件都买不到.有时间去找点好的电容. 对了.上次的误差原因找到了,用示波器查看7135 2脚的基准上有干扰.用4 1/2表测没问题,所以从新画了PCB.并找了个铝壳,最细线0.3mm.间距0.3mm,一次热转印成功,无断线、短路. 各位大侠
能不能将7135做的电压表发一份详细的给我啊
先谢谢啦 mark 回复【67楼】lilith
-----------------------------------------------------------------------
这是什么软件,好像不错。 mark mark 继续啊 牛人太多了 mark mark! 用STC89C52能接BUSY吗,中断好像处理不了啊。有人做过没? 回复【82楼】klbmw
用stc89c52能接busy吗,中断好像处理不了啊。有人做过没?
-----------------------------------------------------------------------
可以的,中断可以处理。只是不好处理 回复【83楼】zhuangchao123
-----------------------------------------------------------------------
该怎么处理啊。指教指教啊。C52的话外部中断只能触发啊计时器啊。怎么结束计时器呢 想法不错,我也很想DIY一台但苦于不会编程!
页:
[1]