搜索
bottom↓
回复: 77

【阿莫AVR芯片检测系列文章4】发布我近一个月不眠夜搞的AVR拆机IO测试器全套资料(V3

[复制链接]
头像被屏蔽

出0入0汤圆

发表于 2008-6-23 12:26:16 | 显示全部楼层 |阅读模式
这套测试器的软件、硬件全部是我一个人独力完成的。甚至电路图也是我画的。估计让不少人掉眼镜。

先声明一下: 目前邮购部的拆机件,均是使用这个测试器测试的。 我保证本资料100%的准确性。 这是第三个版本,修正了前面两个版本的一些缺陷,将我能想像到的IO检测都做在上面了。 它经过了近30K次的测试检验。

这台测试器,我原本是交给我们邮购部的两位技术人员制作的。但出来的样品让我失望+绝望。慢慢我意识到:我们要在AVR拆机件上走得更远,我需要投入更多的时间与精力去研究它。

呵呵,这个检测器,看来简单,但有些细节比较折磨人的耐性。就像电路图中的100K的电阻,没有做过的人,可能会就卡死在上面。如果你选择10K或大于470K,是做不出这个测试器的。 HC4066上的30只1K电阻,也是同样道理。使用其它的数值,就会导致高压编程接口不能正常工作。

这个电路的硬件设计,我花了大量的时间在兼容高压编程、ISP,JTAG 接口的测试与试验上。 它能兼容这三种接口,对我们的拆机件检测工作带来便利性。


(原文件名:01 全图.jpg)


(原文件名:02 侧面图.jpg)


(原文件名:03 底面全图.jpg)


(原文件名:04 HC4066部分.jpg)


(原文件名:05 IO引脚接地部分.jpg)


(原文件名:06 高压编程部分.jpg)


(原文件名:07 HC4066.jpg)


(原文件名:08 弹性测试座.jpg)


(原文件名:09 高压编程接口、复位开关、结果显示LED.jpg)


(原文件名:10 JTAG、ISP接口、电源.jpg)


(原文件名:11 局部放大图.jpg)






先用流程图表明我要做的检测思路:


(原文件名:流程图.jpg)



它使用我编写的DOS批处理,自动运行测试。每测试一片芯片约需要4-5秒时间:


(原文件名:SNAG-0001.jpg)

适用于网站生产的STK500下载器的自动检测批处理文件:

@echo off
rem Atmega-16的ID是0x-1e 0x-94 0x-03.ATemga-32的ID是0x-1e 0x-95 0x-02。缺省熔丝位均是-f0x99e1。
rem 测试IO扫描时的熔丝位均是:-f0xd9d4
rem 改成ATmega-32时,需要做以下的替换:
rem ATmega.16 -> ATmega.32
rem 0x.94     -> 0x.95
rem 0x.03     -> 0x.02
rem 16K       -> 32K
rem M.16      -> M.32


@echo ****************** 本软件由阿莫编写 2008.06.17 ************

:start

@echo 请放入新的芯片(ATmega16 0x1e 0x94 0x03),即将进行第①个检查。
@echo 本检查包括:本检查包括:IO扫描,内核检查 (网站自制STK500下载器USB转串口)
pause

set  second_1=%time:~6,2%

@echo 检查芯片的ID是否正确....
STK500 -dATmega16 -s -cCOM4 |findstr/i "0x1e.0x94.0x03" & if errorlevel 1 (goto error_s)

set  second_2=%time:~6,2%
if second_2 GTR second_1 (set /a seconds=%second_2% - %second_1% ) else (set /a seconds=60+ %second_2% - %second_1% )
@echo 累计时间消耗:%seconds%秒
@echo --------------------------

@echo 设置成8M的工作频率 ...
STK500 -dATmega16 -cCOM4 -f0xd9d4 |findstr/i "failed" && goto error_f

set  second_2=%time:~6,2%
if second_2 GTR second_1 (set /a seconds=%second_2% - %second_1% ) else (set /a seconds=60+ %second_2% - %second_1% )
@echo 累计时间消耗:%seconds%秒
@echo --------------------------

@echo 擦除芯片.....
STK500 -dATmega16 -cCOM4 -e | findstr/i "failed" && goto error_e

set  second_2=%time:~6,2%
if second_2 GTR second_1 (set /a seconds=%second_2% - %second_1% ) else (set /a seconds=60+ %second_2% - %second_1% )
@echo 累计时间消耗:%seconds%秒
@echo --------------------------

@echo 正在写入IO扫描、内核检查程序......
STK500 -dATmega16 -cCOM4 -ifD:\AVR_test\M-16_M-32\default\M-16_M-32.hex -vf -pf | findstr/i "failed" && goto error_if

set  second_2=%time:~6,2%
if second_2 GTR second_1 (set /a seconds=%second_2% - %second_1% ) else (set /a seconds=60+ %second_2% - %second_1% )
@echo 累计时间消耗:%seconds%秒
@echo --------------------------


@echo --------------------------------
@echo 写入IO扫描程序、内核检查程序成功。请观察约2秒后绿灯亮。
@echo 看到绿灯长亮,表示芯片合格。
@echo 绿灯闪,表示芯片不合格。
@echo 可按测试板上的蓝色圆形钮让测试程序重新运行 ---
@echo -----------------------------------------------------------------
@echo ----------------------------------------------------------------- 
goto start


:error_s
@echo ***********************************************************
@echo ***********************************************************
@echo *** 警告!!不正确的ATmega16 ID (Signature) 芯片不合格  ***
@echo *** 请留意测试板上的电源灯是否亮?                      ***
@echo ***********************************************************
goto start

:error_f
@echo ***********************************************************
@echo ***********************************************************
@echo ****** 警告!!设置8M频率有错误,芯片不合格!         *******
@echo ***********************************************************
goto start

:error_I
@echo ***********************************************************
@echo ***********************************************************
@echo ****** 警告!!设置ISP 921.6KHz速度有错误,芯片不合格!  ****
@echo ***********************************************************
goto start

:error_e
@echo ***********************************************************
@echo ***********************************************************
@echo ****** 警告!!擦除芯片有错误,芯片不合格!              ****
@echo ***********************************************************
goto start

:error_if
@echo ***********************************************************
@echo ***********************************************************
@echo ****** 警告!!FLASH写入校验有错误,芯片不合格!        ****
@echo ***********************************************************
goto start

:error_ie
@echo ***********************************************************
@echo ***********************************************************
@echo ****** 警告!!eeprom 写入校验有错误,芯片不合格!      ****
@echo ***********************************************************
goto start

:error_I_2
@echo ***********************************************************
@echo ***********************************************************
@echo ****** 警告!!设置ISP 230.4KHz速度有错误,芯片不合格!  ****
@echo ***********************************************************
goto start




由于这台测试器,是根据我们的检测情况随时更改的,所以,使用手焊板的形式(参见上面的实物图)。

电路图的零件封装是自己根据实物做的。这个我们在焊接手工板时,不用查找数据手册,根据电路图就能直接焊出来。


(原文件名:mcu部分.jpg.jpg)


(原文件名:电源、复位、显示部分.jpg)


(原文件名:IO引脚、接地电阻部分.jpg)


(原文件名:HC4066部分.jpg)

点击此处下载完整版的PDF格式线路图 ourdev_322863.pdf(文件大小:40K) (原文件名:IO_SCAN.pdf)





完整的代码:

/******* *********************************************************************
*
* This file is used to test IO.
*
* - Compiler:           GNU GCC
* - Supported devices:  M16,M32
* - author              Armok / www.OurAvr.com
*
* - Last updated        2008-06-05,14:11
*****************************************************************************/

#include <avr/io.h>

//宏定义管脚ID号
//进行如下分配:PA0~PA7:00~07,其中十位上是组号,个位上是管脚号
#define AVRPA0 00
#define AVRPA1 01
#define AVRPA2 02
#define AVRPA3 03
#define AVRPA4 04
#define AVRPA5 05
#define AVRPA6 06
#define AVRPA7 07

#define AVRPB0 10
#define AVRPB1 11
#define AVRPB2 12
#define AVRPB3 13
#define AVRPB4 14
#define AVRPB5 15
#define AVRPB6 16
#define AVRPB7 17

#define AVRPC0 20
#define AVRPC1 21
#define AVRPC2 22
#define AVRPC3 23
#define AVRPC4 24
#define AVRPC5 25
#define AVRPC6 26
#define AVRPC7 27

#define AVRPD0 30
#define AVRPD1 31
#define AVRPD2 32
#define AVRPD3 33
#define AVRPD4 34
#define AVRPD5 35
#define AVRPD6 36
#define AVRPD7 37

void delay_us(int time)
     {
         for(;time>1;time--);
         }
void delay_ms(unsigned int time)
         {
         while(time!=0)
                                    {
                                   delay_us(884);
                                    time--;
                                   }
         }

void green_led(void);
void red_led(void);
void delay_nop(void);
void IOSearch(unsigned char IOID[2],unsigned char IOresult[3]);//IO定位程序
void IOdetect(unsigned char IOaddr[3],unsigned char IOtestID0,unsigned char IOtestID1);//IO检测程序
void checkIO(unsigned char IO0,unsigned char IO1);//IO检测主函数
void CoreTest();
int main()
{
SFIOR&=~(1<<2);  //SFIOR的PUD是0时,上拉电阻才有效。缺省是0。所以这句话可以不要的。

//PA,PB,PC,PD设置成输入,上拉电阻启用
   DDRA=0x00;  
   PORTA=0xff;
   DDRB=0x00;
   PORTB=0xff;
   DDRC=0x00;
   PORTC=0xff;
   DDRD=0x00;
   PORTD=0xff;

   DDRB|=0b11000000;  //PB6是绿灯,长亮时表示正常,闪烁表示出错。PB7控制HC4066
   PORTB&=0b00111111;
   
int reply_times = 3000;


        while (reply_times>1)
        {
           checkIO(AVRPA0,AVRPA1);


           checkIO(AVRPA2,AVRPA3);
           checkIO(AVRPA4,AVRPA5);
           checkIO(AVRPA6,AVRPA7);

           checkIO(AVRPB0,AVRPB1);
           checkIO(AVRPB2,AVRPB3);
           checkIO(AVRPB4,AVRPB5);
           //-----checkIO(AVRPB6,AVRPB7); //用于输出,6绿灯长亮时正常,闪时出错,7控制HC4066

           checkIO(AVRPC0,AVRPC1);
           checkIO(AVRPC2,AVRPC3);  //jtag
           checkIO(AVRPC4,AVRPC5);  //jtag
           checkIO(AVRPC6,AVRPC7);

           checkIO(AVRPD0,AVRPD1);
           checkIO(AVRPD2,AVRPD3);
           checkIO(AVRPD4,AVRPD5);
           checkIO(AVRPD6,AVRPD7);  

           reply_times --;
        }



        reply_times = 500;


        while (reply_times>1)
        {
           reply_times --;
        }

        green_led();

}

void setHC4066(void)
        {
           PORTB|=(1<<7);
        }

void clrHC4066(void)
        {
           PORTB&=~(1<<7);
        }

void green_led(void)
        {
           PORTB|=(1<<6);
        }

void red_led(void)
        {

           check_end:;
                    //PORTB|=(1<<7);
                PORTB|=(1<<6);
                delay_ms(20);
                PORTB&=~(1<<6);

                delay_ms(20);
                PORTB|=(1<<6);
                delay_ms(20);
                PORTB&=~(1<<6);
                delay_ms(20);

           goto check_end;
        }
//IO定位程序
/*
为了便于封装程序,操作IO采用地址传递的方式,但是首先需要对IO的组别(ABCD) 和管脚号(0~7)进行分类
在文件的宏定义中,我对M16的IO进行如下分配:PA0~PA7:00~07,其中十位上是组号,个位上是管脚号,通过
IOSearch函数来进行分类处理,输入为需要测试的两个IO号(这个值通过checkIO检测主函数传入) 并通过操作
IOresult数组将数据传出
*/
/*
传入:IOID[2]测试IO号
交换:IOresult[3]处理结果,IOresult[0]放组号,IOresult[1]放测试IO管脚号,IOresult[2]放另一个测试IO管脚号
*/
void IOSearch(unsigned char IOID[2],unsigned char IOresult[3])
        {
        IOresult[0] = IOID[0]/10;               //取十位数,为组号
        IOresult[1] = IOID[0]-(10*IOresult[0]);//取个位数,为测试IO管脚号
        IOresult[2] = IOID[1]-(10*IOresult[0]);//取个位数,为另一个测试IO管脚号
        }
/*
举例:
   define AVRPD2 32
   define AVRPD3 33

   IOID[2]={32,33};
   IOresult[0]=32/10=3
   IOresult[1]=32-10*3 = 2;
   IOresult[0]=33-10*3 = 3;   


*/


//IO检测程序
/*
这个程序是实际操作检测的过程函数
检测过程请参考IO检测流程图
*/
/*
传入:unsigned char IOaddr[3] 测试IO组别的操作变量地址(DDRX PINX PORTX)
      unsigned char IOtestID0,unsigned char IOtestID1 传入的两个测试管脚号
*/

void IOdetect(unsigned char IOaddr[3],unsigned char IOtestID0,unsigned char IOtestID1)
        {
        unsigned char *IODDRX  = IOaddr[0];//通过指针将DDRX地址取出
        unsigned char *IOPINX  = IOaddr[1];//通过指针将PINX地址取出
        unsigned char *IOPORTX = IOaddr[2];//通过指针将PORTX地址取出
        void setDDRX(unsigned char IOtestID)//置位DDRX某一位,传入:unsigned char IOtestID 需要操作的管脚号
                {
        *IODDRX |= (1<<IOtestID);
                }
    void clrDDRX(unsigned char IOtestID)//清0 DDRX某一位,传入:unsigned char IOtestID 需要操作的管脚号
                {
        *IODDRX &= ~(1<<IOtestID);
                }
    void setPORTX(unsigned char IOtestID)//置位PORTX某一位,传入:unsigned char IOtestID 需要操作的管脚号
                {
        *IOPORTX |= (1<<IOtestID);
                }
    void clrPORTX(unsigned char IOtestID)//清0 PORTX某一位,传入:unsigned char IOtestID 需要操作的管脚号
                {
        *IOPORTX &= ~(1<<IOtestID);
                }
    //读测试IO某一位上的电平值
        //传入:unsigned char IOtestID 需要操作的管脚号
        //传出:测试IO的电平值
        unsigned char ReadIO(unsigned char IOtestID)
                {
                 return ((*IOPINX >> IOtestID)&0x01);
                }
    //检测过程请参考IO检测流程图

  clrHC4066();

    //        PA0,PA1输入 PA0上拉电阻 PA1无上拉电阻. PA0=1, PA1=0
        clrDDRX(IOtestID0);
    clrDDRX(IOtestID1);
        setPORTX(IOtestID0);
    clrPORTX(IOtestID1);
        delay_nop();
        if ((ReadIO(IOtestID0) != 1) || (ReadIO(IOtestID1) != 0 )) red_led();



    //        PA0,PA1输入 PA0无上拉电阻 PA1上拉电阻. PA0=0, PA1=1
    clrDDRX(IOtestID0);
    clrDDRX(IOtestID1);
        clrPORTX(IOtestID0);
    setPORTX(IOtestID1);
        delay_nop();
        if ((ReadIO(IOtestID0) != 0)||(ReadIO(IOtestID1) != 1)) red_led();

   setHC4066();


    setDDRX(IOtestID0);
    clrDDRX(IOtestID1);
        setPORTX(IOtestID0);
    clrPORTX(IOtestID1);
        delay_nop();
        if (ReadIO(IOtestID1) != 1) red_led();



        setDDRX(IOtestID0);
    clrDDRX(IOtestID1);
        clrPORTX(IOtestID0);
    setPORTX(IOtestID1);
        delay_nop();
        if (ReadIO(IOtestID1) != 0) red_led();

        setDDRX(IOtestID1);
    clrDDRX(IOtestID0);
        setPORTX(IOtestID1);
    clrPORTX(IOtestID0);
        delay_nop();
        if (ReadIO(IOtestID0) != 1) red_led();

        setDDRX(IOtestID1);
    clrDDRX(IOtestID0);
        clrPORTX(IOtestID1);
    setPORTX(IOtestID0);
        delay_nop();
        if (ReadIO(IOtestID0) != 0) red_led();

        }
//IO检测主函数
/*
IO检测主函数,这个函数将完成所有的检测工作。
传入两个测试IO号,IO号在宏定义中命名,命名方式为:AVRPXY其中X为组号,Y为管脚号
*/
/*
传入unsigned char IO0,unsigned char IO1 两个测试管脚号
*/       
void checkIO(unsigned char IO0,unsigned char IO1)
        {
        unsigned char IOaddr[4][3] = {{&DDRA,&PINA,&PORTA},{&DDRB,&PINB,&PORTB},{&DDRC,&PINC,&PORTC},{&DDRD,&PIND,&PORTD}};
    //为了便于封装,使用了操作IO地址的方式,实际上DDRX之类的变量在头文件中也是操作地址,这个数组就是把所有的
        //IO地址取出来便于传递和调用。
        unsigned char IOID[2] = {IO0,IO1};//对传递进来的测试IO管脚号赋值给一个一维数组,便于操作
        unsigned char IOtestID[3];//传递IO管脚参数的数组
        IOSearch(IOID,IOtestID);//调用IO管脚定位程序
    IOdetect(IOaddr[IOtestID[0]],IOtestID[1],IOtestID[2]);//IO检测程序
        }
void delay_nop(void)
{
   asm("nop");
   asm("nop");
   asm("nop");


}

void IOdetect2(int NO,unsigned int testimony[8])
    {
    unsigned int clew[2] = {0,0};
        //showdata = NO;
        delay_ms(1);       
        clew[0] = 1;
        delay_ms(1);       
    clew[1] = 0;
    testimony[NO] = ((clew[0]&0xff)&(~(clew[1]|0x00)));
        testimony[NO] = testimony[NO];//showdata = 0x00;
        }
unsigned int inquestOUTPUT(unsigned int testimony)
    {
    unsigned int confession = 0;
        unsigned int result = 0;
        confession = testimony;
        for(int i = 0;i < 8;)
                {
                result = result + (confession&0b00000001);
                confession = (confession >> 1);
                i++;
                }
    return result;
        }
unsigned int inquestINPUT(int NO,unsigned int testimony[8])
    {
    unsigned int confession[8] = {0,0,0,0,0,0,0,0};
        unsigned int result = 0;
        for(int i = 0;i < 8;)
                {
                confession = testimony;
                confession = ((confession>> NO)&0b00000001);
                result = result + confession;
                i++;
                }
    return result;
        }
unsigned int IOArbitrate(unsigned int testimony[8])
    {
        unsigned int judgement[8][2] = {{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0}};
    unsigned int adjudgement = 0;
    for(int i = 0;i < 8;)
                {
        judgement[0] = inquestOUTPUT(testimony);
                judgement[1] = inquestINPUT(i,testimony);
                i++;
                }
        for(int i = 8;i >= 0;i--)
           {
                adjudgement |=(1<<i);
           }
    return adjudgement;
        }
void CoreTest()
        {
     unsigned int testimony[8];
         unsigned int adjudgement;
                while(1)
                {
                        for(int j = 0;j < 8;)
                        {
                        IOdetect2((j),testimony);
                        j++;
                        }
                    adjudgement = IOArbitrate(testimony);
                if(adjudgement == 0b111111111) green_led();
                        else red_led();
                       
                }
        }

出0入0汤圆

发表于 2008-6-23 12:52:39 | 显示全部楼层

(原文件名:图片 001.jpg)

找个注册的不难吧,呵呵。
头像被屏蔽

出0入0汤圆

 楼主| 发表于 2008-6-23 13:02:46 | 显示全部楼层
无所谓了。反正不影响阅读。刚才我在网上随便下载的。没有注册。

出10入210汤圆

发表于 2008-6-23 13:04:34 | 显示全部楼层
1楼的,这不难不难的问题,是版权问题。

出0入0汤圆

发表于 2008-6-23 13:24:17 | 显示全部楼层
酷!
想看看实物照片:-)

出0入0汤圆

发表于 2008-6-23 13:50:00 | 显示全部楼层
开始以为阿莫只会开网站做生意,现在看来阿莫的技术还不错呢。

出0入0汤圆

发表于 2008-6-23 14:14:30 | 显示全部楼层
把拆机芯片安装在这个测试仪上,然后用把这个程序下载到芯片flash里,验证所有io口是好是坏?
armok我说的对吗?

出0入0汤圆

发表于 2008-6-23 14:32:09 | 显示全部楼层
值得学习、研究。

出0入22汤圆

发表于 2008-6-23 15:43:08 | 显示全部楼层
谢谢分享。
头像被屏蔽

出0入0汤圆

 楼主| 发表于 2008-6-23 17:08:31 | 显示全部楼层
【8楼】 liu7894  ,

正是这样的。

【6楼】 avruser,

实物一会上传。
头像被屏蔽

出0入0汤圆

 楼主| 发表于 2008-6-23 18:18:45 | 显示全部楼层
好了。全部图片上传了 :)

其实我们网站上的开源范例,应该是以我这种格式与内容编写的。不过强调了很长时间,像我这么详细的,能做到的人不多(我几乎没有见过那一个作品有流程图的。流程图在软件作品里其实是非常必要的,除了能让其它人看懂,更重要的是自己以后也能看得懂)。

以身作则,希望见到越来越多这样的开源作品。

出0入0汤圆

发表于 2008-6-23 20:21:12 | 显示全部楼层
不错 记号
谢谢armok

出0入0汤圆

发表于 2008-6-23 21:21:26 | 显示全部楼层
赞一个,这么多线,还焊的这么漂亮.现在大家一般线多都去做PCB

出0入0汤圆

发表于 2008-6-23 21:41:32 | 显示全部楼层
够细致,顶一个!那么多线,我宁愿做热转印,阿莫是你拉我进热转印的门的,你自己反倒不做了?哈哈哈哈哈……
头像被屏蔽

出0入0汤圆

 楼主| 发表于 2008-6-23 21:44:04 | 显示全部楼层
短短一个月,这已经是第三版了。并且中间有无数的小改动。

现在已经定型的,使用热转印会是好方法了 :)

出0入0汤圆

发表于 2008-6-23 21:57:17 | 显示全部楼层
实物很漂亮!看来阿莫的手工也了得啊

另外记得阿莫好像说过IC座子和那个小蓝钮都是名牌货
头像被屏蔽

出0入0汤圆

 楼主| 发表于 2008-6-23 22:02:10 | 显示全部楼层
用到的所有材料,均出自邮购部。

线材是混装实验焊线,非常好用。最后一张图的银线,是邮购部的OK(wire wrap wire)线剥皮后的效果。从红日网友那里学来的 :)

IC座是日本的 YAMAICHI 弹性测试座,应该是NO1的品种。 小蓝钮是日本欧姆龙原装按钮,手感极佳。

焊丝是使用邮购部的日本优质焊丝,所以焊点比较光亮。

插座与插针均使用镀真金的。

-------------------------------

呵呵,这个月我在不停的焊啊焊啊。。总共焊出了十几只不同功能的板。。焊得越多,越发现我们邮购部的零件质量就是爽 :)  (广告ing...)

出0入0汤圆

发表于 2008-6-23 22:21:56 | 显示全部楼层
貌似焊线有粗细两种 邮购部里没摆粗的呢
头像被屏蔽

出0入0汤圆

 楼主| 发表于 2008-6-23 22:25:28 | 显示全部楼层
【19楼】 tekjian 断剑自述,

细的是OK线。使用了一两条。原因是太长了,超过了焊线的长度。(部分剥皮后连接其它线路,需要较长)。

出0入0汤圆

发表于 2008-6-23 22:28:46 | 显示全部楼层
阿莫的焊接水平明显不怎么的……
不过dos玩的很好……

出0入0汤圆

发表于 2008-6-23 22:29:53 | 显示全部楼层
看了阿莫这篇文章,就明白了为什么我们有的人连打工也打不好的原因了。

人应该多去反省自己,不能一味地去怨天尤人。

不过阿莫只负责提要求,把握方向设计,而让技术人员严格按要求去做,最后按要求验收,岂不是可以把自己宝贵的时间和精力解放出来?

出0入84汤圆

发表于 2008-6-23 23:21:53 | 显示全部楼层
手工工艺不怎样么,呵呵,我的手工出来都是精品,我手工做的东西朋友抢着要,有源音箱做了不下10个全被朋友抢去了,使用时间最长的已经10年了,还在用,音量旋钮用酒瓶盖子自制地

出0入0汤圆

发表于 2008-6-23 23:36:42 | 显示全部楼层
线路算复杂了,应该制板,不然干扰很大.

出0入0汤圆

发表于 2008-6-24 00:43:00 | 显示全部楼层
焊点就如女人,太瘦太胖都不好看.观站长的作业,大都是90kg以上的胖妇,所以我认为焊功还未到家,
头像被屏蔽

出0入0汤圆

 楼主| 发表于 2008-6-24 07:12:02 | 显示全部楼层
发现我们这里开始有21icbbs的风格了: 有人show一件作品,大家看到的只是其中的一些缺点为,看不到其它优点。

于是,所有的回复均是批评与贬低的。

我们这里比 21ic优胜的地方,是还有一些表扬性的观点。

这是一个值得思考的问题。 当然,不是说我做的就在辩解。手工随便焊的东东,缺点肯定大大的有。

--------------

我不是专业焊接的。这次的焊接,发生问题的应该是:焊锡的质量太高了,流动性太好,一加热几乎无法将两个焊点间连接。 而我们制作的实验板的焊点,可能上面的助焊处理达不到这些高质量焊锡的要求,所以,不太好焊。

相信焊接高手,在同样的条件下,也焊不出什么效果。其实我焊接过的东东,不比论坛上的网友少。我读大学时,有四年时间是不停的焊的。我甚至租下了学样的一个电子实验室,并且承包了上海交大的研究生之家电器维修部。 

出0入168汤圆

发表于 2008-6-24 08:26:12 | 显示全部楼层
armok 阿莫:
  “这次的焊接,发生问题的应该是:焊锡的质量太高了,流动性太好,一加热几乎无法将两个焊点间连接。”

  将烙铁的温度调低点,两个焊点间连接将容易些!

出0入0汤圆

发表于 2008-6-24 08:28:58 | 显示全部楼层
真的学到不少东西。
1、贴片电阻我很多,原来也是可以用到万用板上。下次知道了。
2、两个万用板叠起来万用板做试验也可以很漂亮。看来我马上要做的MC100的配套模拟比较板也应采用这种形式。
3、资料做得很详细。

出0入0汤圆

发表于 2008-6-24 09:32:24 | 显示全部楼层
在洞洞板上焊接,算是不错了,而且还是大老板焊的,呵呵

喜欢那个蓝色按键:)
头像被屏蔽

出0入0汤圆

 楼主| 发表于 2008-6-24 10:18:08 | 显示全部楼层
【27楼】 eiglxl ,

谢谢! 哈哈,的确是这样的。我后来发现了,优质的流动性强的焊丝,一定要将温度调得很低才能粘起来。

这个焊丝的流动性有多强? 强得用它扫一下 M128的管脚,两个焊接间一也不容易粘在一起 :)

出0入0汤圆

发表于 2008-6-24 14:47:18 | 显示全部楼层
mark

出0入0汤圆

发表于 2008-6-24 16:44:45 | 显示全部楼层
哈哈,真的功力深厚哈

出0入0汤圆

发表于 2008-6-24 16:59:05 | 显示全部楼层
多才多艺啊,原来还误以为站长只会网络编程。

出0入0汤圆

发表于 2008-6-24 17:08:53 | 显示全部楼层
做这么大生意的还有这种焊板耐心,实在难得。。。

出0入0汤圆

发表于 2008-6-24 18:15:48 | 显示全部楼层
阿莫,把原理图给我,帮你画板打板,免费的!
头像被屏蔽

出0入0汤圆

 楼主| 发表于 2008-6-24 18:18:28 | 显示全部楼层
【35楼】 skoo ,

非常感谢啊。。 原理图上面已经有了。不过不用帮我画板与打板。

我正在画热转印的PCB。 这东东先生产几块就行。到时有什么缺陷需要改进时,又得重新做过。

出0入0汤圆

发表于 2008-6-28 22:03:31 | 显示全部楼层
mark

出0入0汤圆

发表于 2008-6-30 14:21:30 | 显示全部楼层
开源我喜欢!

出0入0汤圆

发表于 2008-7-3 22:51:30 | 显示全部楼层
阿莫怎么不用你的PCB雕刻机雕一块出来呀?

出0入0汤圆

发表于 2008-7-8 16:03:37 | 显示全部楼层
当然是啦,阿莫除了提供商口平台还为我们提供交流平台,选择阿莫真是不错的

出0入0汤圆

发表于 2008-8-30 16:05:41 | 显示全部楼层
很好,学习了

出0入0汤圆

发表于 2008-8-30 21:54:31 | 显示全部楼层
下了很多功夫啊,呵呵,不错,很好很弓虽大!

出0入0汤圆

发表于 2008-8-30 23:43:05 | 显示全部楼层
顶一个,说不定下次可以用得上

出0入0汤圆

发表于 2009-5-24 18:50:08 | 显示全部楼层
阿莫,看看我的检测IO开路/短路的方法,可能更有效,但是外面多加了一个处理器,可有效检测IO的开路/短路.如附件红色所示,但这里没有扩充,所示只有8个IO,可以扩充成你所需人的IO引脚数.如果被测CPU与检测CPU更有效结合,就是很有效了.这个原理图是我用于一个产品上检测的原理图

开/短路检测 (原文件名:未命名.JPG)

出0入0汤圆

发表于 2009-5-24 18:59:48 | 显示全部楼层
说明:
左边红色框是接IO的,也有反相器用作开路检测
右边红色框是接外部单片机用作扫描的端口,可判断两两IO是否短路,并可判断IO是否真正开路了.原理很简单,即三极管没加电时,反相器的输入端如果IO连接了被测单片机的IO,如果是IO是低电平的时候再使三极管加电时若还是低电平说明IO是已经接入了很定是低电平了,如果此时IO变成了高电平即可判断IO是开路的了.
此图中的反相器和1M电阻很重要!

出0入0汤圆

发表于 2009-5-24 19:08:58 | 显示全部楼层
再来一个检测多个IO的,是我做的一个项目上的.功能是可判断开/短路.
原理图ourdev_447559.JPG(文件大小:427K,只有400K以内的图片才能直接显示) (原文件名:未命名.JPG)

出0入0汤圆

发表于 2009-5-25 08:05:04 | 显示全部楼层
很好!

出0入0汤圆

发表于 2009-5-25 18:05:18 | 显示全部楼层
阿莫真JB强。。。呵呵。。。确实很吊眼镜。。。果然是有实力不怕挑战!!!

出0入25汤圆

发表于 2009-5-25 21:16:50 | 显示全部楼层
mark!!

太强了

出0入0汤圆

发表于 2009-5-25 21:31:14 | 显示全部楼层
呵呵,阿莫什么时候把我那套功夫学去了改用黏贴纸了哈哈~

出0入0汤圆

发表于 2009-5-25 21:39:07 | 显示全部楼层
我觉得阿莫的那个洞洞板如果做成连孔的(二连或三连),焊得会更好看且省力。洞洞板也会更好卖一些

出0入0汤圆

发表于 2009-5-26 15:42:13 | 显示全部楼层
阿莫你是神!

出0入0汤圆

发表于 2009-7-12 19:44:23 | 显示全部楼层
不错

出0入0汤圆

发表于 2010-1-12 16:41:15 | 显示全部楼层
现代社会中的有些人往往觉得自己现在位置高了,就不愿去做一些基础性的工作。而这一点阿莫却控制得很好,这说明个人修养已到一定层次。

从阿莫这里可以学到:专业知识(电子、机械、化工、等等)、项目管理、领导决策、网站管理、家电维修、沟通技巧、销售技巧、创业经验、为人处世的经验。。。。

所以光顾这个网站是每天的必修课。

其实每天看过这个网站,看到不同网友的提问,我总在思考:如果是我处在阿莫现在的位置上我该怎么去处理这个问题?

出0入0汤圆

发表于 2010-1-13 00:54:27 | 显示全部楼层
焊工倒没什么。好像用的线太粗了

出0入59汤圆

发表于 2010-1-13 08:53:15 | 显示全部楼层
这个很耗时间,曾经做过一些类似的IC测试制具和方法,没莫老大的复杂和详细,呵呵!

出0入0汤圆

发表于 2010-1-13 09:05:52 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-1-15 17:18:10 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-1-21 21:03:25 | 显示全部楼层
哦,原来是1年多以前的旧贴子。我以为照片质量下降得那么厉害

出0入0汤圆

发表于 2010-8-3 21:34:47 | 显示全部楼层
佩服!!

出0入0汤圆

发表于 2010-8-4 21:42:39 | 显示全部楼层
我这几天也在琢磨是否需要搞一套元器件检测系统,因为公司运行部购买的元器件,供货周期长(从报计划到拿到起码1个多月以上)、采购价格高(比阿莫邮购部的普遍贵出150%)、关键是质量层次不齐,有些甚至是拿假货蒙混,等应用的时候发现有问题再找换,来回一下又得拖半个多月,费时费力。不知道是不是运行部领导和供应商有利益关系,反映了多次也没用,还是老样子,郁闷。

出0入0汤圆

发表于 2010-8-5 11:38:40 | 显示全部楼层
这几天疯了,顶的都是老帖

出0入0汤圆

发表于 2010-8-5 13:01:28 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-8-6 23:15:41 | 显示全部楼层
怎么不用雕刻机刻PCB?

出0入0汤圆

发表于 2010-8-7 16:31:14 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-8-8 08:55:35 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-8-13 17:15:15 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-8-13 17:27:03 | 显示全部楼层
谁翻的老帖子啊,太tmd及时了!!1

叫你浮躁,看看,看看!

ps我想起来我毕业时好像有人把这个项目拿去做毕业设计来着,结果丫答辩居然没过,,,那人太挫了。

出0入0汤圆

发表于 2010-8-13 21:13:54 | 显示全部楼层
mark大老板

出0入0汤圆

发表于 2010-8-13 21:22:24 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-3 20:24:24 | 显示全部楼层
mark`~~```````````

出0入8汤圆

发表于 2010-11-3 20:42:13 | 显示全部楼层
mark!

出0入0汤圆

发表于 2010-11-3 21:15:36 | 显示全部楼层
mark!

出0入0汤圆

发表于 2010-11-3 22:16:44 | 显示全部楼层
mark!

出0入0汤圆

发表于 2011-2-24 13:42:44 | 显示全部楼层
标记,这个不错
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-29 04:39

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表