单片机教程网

电脑版
提示:原网页已由神马搜索转码, 内容由www.51hei.com提供.
上一页
1/3
下一页
查看:13625|回复:87
打印上一主题下一主题

电子元件测试仪制作,STC单片机+OLED+6只电阻,AVR-Transistortester移植改造版

 [复制链接]
跳转到指定楼层
楼主
ID:819198发表于 2022-9-14 11:05|只看该作者|只看大图回帖奖励
根据网友提供的:《德国开源项目:A_TransistorTester晶体管测试仪的中文注释C源码》经过几个星期天的努力,改为STC芯片,对电路进行了简化,经简单测试效果良好,精度未仔细调整,现公布改造和移植原码,大家一起制造白菜价测试仪。

超简单电路,看程序和图片即可正确连接电路。单片机型号: STC8H1K16
制作出来的实物图如下:


























单片机源程序如下:
  1. //neu2010.01.02版Mega8基础版(起源于约2009年。需配合Markus F.电路图,
  2. //中文注释翻译:itkw: autopccopy @ guangzhou 2022.04.22 AVR单片机价格昂贵,强烈建议移植到STC单片机)
  3. //程序移植:rz123456,非常喜欢STC,功能强大、使用方便、价格便宜。
  4. //删除了一部分不需要的,原程序中AVR的硬件程序。OLED程序为厂家提供。

  5. //本AVR例程不支持小容量芯片,需Mega8或Mega328起。使用WinAVR-20100110 编译, PROGISP 1.72+USBIAP工具下载



  6. #include< STC8G.h>

  7. #include< stdlib.h>
  8. #include< string.h>
  9. #include "oled.h"
  10. #include< math.h>

  11. #define  uint8_t unsigned char
  12. #define  uint16_t unsigned int
  13. #define  uint32_t unsigned long int
  14. #define  int16_t  signed int


  15. //三组测试电阻的阻值:R_L为680欧,R_H为470K
  16. //如要修改,请输入以欧姆为单位的电阻值定义(特别注意:此三组电阻须配对为阻值相近,否则误差较大)
  17. //#define R_L_VAL           680           //R_L; 标准值 680欧
  18. //#define R_H_VAL           470000UL       //R_H; 标准值 470K
  19. #define R_L_VAL           510           //510欧
  20. #define R_H_VAL           510000UL       //510K
  21. //在程序中计算必要的电阻值
  22. #define RH_RL_RATIO         (R_H_VAL/R_L_VAL)//高低电阻比
  23. #define R_H_PER           (R_H_VAL/100)   //高电阻/100的值

  24. //注意:N和P沟道增强型E-MOSFET栅极电容计算系数:取决于AVR的制造公差,在必要时进行调整
  25. //(注:其他改进型有插入基准元件进行自动校准功能)
  26. //#define N_GATE_CAPACITY_FACTOR 387           //N沟道系数
  27. //#define P_GATE_CAPACITY_FACTOR 142           //P沟道系数
  28. #define N_GATE_CAPACITY_FACTOR 18           //N沟道系数
  29. #define P_GATE_CAPACITY_FACTOR 18  
  30. //电容器的电容计算系数:取决于 AVR 的制造公差,在必要时进行调整
  31. //总测量范围约为 0.2nF 至 1000uF。
  32. //#define Hr_LowCAPACITY_FACTOR  94           //使用 470k 高电阻测量(小电容)系数
  33. #define Hr_LowCAPACITY_FACTOR  21
  34. //#define Lr_HighCAPACITY_FACTOR 283           //使用 680  低电阻测量(高电容)系数
  35. #define Lr_HighCAPACITY_FACTOR 18

  36. void ADC_Init();
  37. void CheckPins(uint8_t HighPin, uint8_t LowPin, uint8_t TriPin);
  38. void ReadCapacity(uint8_t HighPin, uint8_t LowPin);
  39. void DischargePin(uint8_t PinToDischarge, uint8_t DischargeDirection);
  40. uint16_t ReadADC(u8 addr);             //ADC读取
  41. void GetGateThresholdVoltage(void);         //取栅极开启阈值电压
  42. void _delay_ms(unsigned int ms);

  43. //端口C: PC0-PC2为测试脚TP1-TP3为,同时PB0-PB5分别连接680、470K三组测试电阻
  44. //请不要更改 TP1、TP2和TP3 的定义!

  45. //端口B: PB0-PB5分别连接680、470K连续三组测试电阻
  46. //#define R_DDR         DDRB     //数据方向寄存器,   1:输出/0:输入
  47. //#define R_PORT         PORTB   //6个测试电阻接PORTB,1:上拉电阻使能
  48. //
  49. ////以下注释为方便理解本程序:
  50. ////DDRxn控制引脚方向:当DDRxn为1时,Pxn为输出;当DDRxn为0时,Pxn为输入。
  51. ////PORTxn在PCn为输入时,1为上拉电阻至VCC;否则引脚悬空。PCn为输出时,1为输出高电平;否则输出低电平。
  52. ////PINxn的值为Pxn引脚的电平。不论如何配置DDxn,都可以通过读取PINxn来获得引脚电平。如果给PINxn写入1,PORTxn的值会翻转。
  53. //
  54. //#define ADC_DDR         DDRC     //数据方向寄存器: 1:输出/0:输入
  55. //#define ADC_PORT       PORTC   //数据寄存器   : 1: 输入:上拉电阻使能 或 输出:高电平
  56. //#define ADC_PIN         PINC     //引脚寄存器   : 输出时引脚的实际值
  57. //#define TP1           PC0     //0
  58. //#define TP2           PC1     //1
  59. //#define TP3           PC2     //2
  60. #define     R_DDR     P2M0 // 这个还要加  P2M1= ~P2M0;
  61. #define     R_PORT     P2

  62. #define     ADC_DDR     P1M0 //这个 入=0  出=1   还要加P1M1 = ~P1M0; //设置 P1.0~P1.7 为双向口模式
  63. #define     ADC_PORT   P1 //设置
  64. #define     ADC_PIN     P1

  65. u8   TP1=0;
  66. u8   TP2=1;
  67. u8   TP3=2;
  68.     
  69. sbit       RST_PIN=P0^1;       //测试按钮,按下为低电平


  70. //元件属性码(与返回码PartFound匹配)
  71. #define PART_NONE       0       //无或故障
  72. #define PART_DIODE       1       //二极管
  73. #define PART_TRANSISTOR   2       //三极管
  74. #define PART_FET       3       //FET
  75. #define PART_TRIAC       4       //单向可控硅
  76. #define PART_THYRISTOR   5       //双向可控硅
  77. #define PART_RESISTOR     6       //电阻
  78. #define PART_CAPACITOR   7       //电容

  79. //三极管子类型码
  80. #define PART_MODE_NPN     1       //NPN三极管
  81. #define PART_MODE_PNP     2       //PNP三极管

  82. //场效应管子类型码(与PartMode返回码匹配。大属性码PartFound为PART_FET: 3)
  83. #define PART_MODE_N_E_MOS 1       //N沟道增强型E-MOSFET
  84. #define PART_MODE_P_E_MOS 2       //P沟道增强型E-MOSFET
  85. #define PART_MODE_N_D_MOS 3       //N沟道耗尽型D-MOSFET
  86. #define PART_MODE_P_D_MOS 4       //P沟道耗尽型D-MOSFET
  87. #define PART_MODE_N_JFET  5       //N沟道JFET
  88. #define PART_MODE_P_JFET  6       //P沟道JFET

  89. //二极管结构体
  90. struct Diode                 //声明有3个成员的结构体,标签被命名为Diode(结构体将不同的数据类型整合为一个有机整体,方便数据管理,增加代码的可读性)
  91. {
  92.   uint8_t Anode;             //阳极引脚序号
  93.   uint8_t Cathode;             //阴极
  94.   int16_t Voltage;             //二极管导通电压降
  95. };
  96. struct Diode diodes[6];         //用Diode标签的结构体,另外声明了变量diodes数组

  97. uint8_t   NumOfDiodes;         //存在的二极管个数
  98. uint8_t   b,c,e;             //b,c,e引脚序号,配合显示引脚号(取值0-2)

  99. //三极管的测量
  100. uint8_t   PartReady;           //测量的轮次数
  101. uint8_t   PartFound, tmpPartFound; //返回的元件属性码
  102. uint8_t   PartMode;           //返回的元件子类型码

  103. uint32_t  u32_hfe;             //u32值,用于直流放大系数、电阻值等
  104. uint16_t  ADCval[2];           //ADC测量值
  105. uint16_t  ADCuBE[2];           //ADC测量: 基极-发射极BE

  106. //电阻和电容测量
  107. uint8_t   ra, rb;             //电阻引脚序号,配合显示引脚号(取值0-2)
  108. uint16_t  rv[2];             //电阻两端的电压降
  109. uint16_t  rADCmax[2];           //可实现的最大ADC值(小于1023,因为测量电阻时LowPin上的电压高于零)
  110. uint8_t   ca, cb;             //电容引脚序号,配合显示引脚号(取值0-2)
  111. uint32_t  cv;               //电容容量值

  112. uint8_t   tmpVAL, tmpVAL2;       //2个通用u8临时变量
  113. uint16_t  ADCv[4];             //ADC的测量值
  114. char     chrVAL[8];           //字符串1
  115. char     chrVAL2[6];           //字符串2
  116. uint32_t  chrVAL2_cv;
  117. uint32_t  chrVAL_cv;
  118. uint8_t   itkw_tmp1;           //仅用于对调引脚序号的临时变量


  119. //============================主程序开始============================
  120. int main(void)
  121. {
  122. P0M0 = 0x08; //设置 P0.0~P0.7 为双向口模式
  123. P0M1 = 0x00;
  124. P3M0 = 0xC0; //设置 P3.0~P3.7 为双向口模式 C0=P3.6/7输出oled电源
  125. P3M1 = 0x00;
  126. P0PU = 0x02; //上拉电阻P0.1

  127. P0=0X02;       //测试按钮

  128. P3=0X40;  //P3.5  OLED+电源
  129.   
  130.        OLED_Init();//初始化OLED
  131.    OLED_ColorTurn(0);//0正常显示,1 反色显示
  132.    OLED_DisplayTurn(1);//0正常显示 1 屏幕翻转显示

  133.    ADC_Init();

  134. //EA = 1;     //允许全局中断


  135.   //运行期间再次按下启动按钮时的入口点,复位变量后开始
  136.   start:
  137. //  wdt_enable(WDTO_2S);         //看门狗开启
  138.   PartFound   = PART_NONE;       //返回属性码为0
  139.   tmpPartFound = PART_NONE;       //返回属性码为0
  140.   NumOfDiodes  = 0;           //二极管数量
  141.   PartReady   = 0;           //测量的轮次数
  142.   PartMode     = 0;           //返回子类型码
  143.   ca         = 0;           //电容引脚序号a
  144.   cb         = 0;           //电容引脚序舃

  145. //  lcd_clear(); //清屏
  146.   OLED_Clear();


  147.   //开始测试
  148. //  lcd_eep_string(Testrunning);     //显示:Testrunning..
  149.   OLED_ShowString(0,0,"Testrunning...",16);
  150.   OLED_ShowChinese(0,2,3,16);//测试中
  151.        OLED_ShowChinese(16,2,4,16);//
  152.        OLED_ShowChinese(32,2,5,16);//
  153.        OLED_ShowString(48,2,"......",16);

  154.   //测量3个引脚的所有6种组合
  155.   CheckPins(TP1, TP2, TP3);       //PC0,PC1,PC2
  156.   CheckPins(TP1, TP3, TP2);
  157.   CheckPins(TP2, TP1, TP3);
  158.   CheckPins(TP2, TP3, TP1);
  159.   CheckPins(TP3, TP1, TP2);
  160.   CheckPins(TP3, TP2, TP1);

  161.   //若属性码为空或电阻或二极管,则再单独测量电容器(需先放电,否则可能无法测量)
  162.   if((PartFound == PART_NONE) || (PartFound == PART_RESISTOR) || (PartFound == PART_DIODE))
  163.   {
  164.    R_PORT = 0;
  165.    R_DDR = (1<<(TP1*2)) | (1<<(TP2*2)) | (1<<(TP3*2));  //电阻引脚R_H为输出模式接地
  166.    P2M1 = ~P2M0;
  167.        _delay_ms(50);
  168.    R_DDR = 0; //电阻引脚为输入模式
  169.        P2M1 = ~P2M0;
  170.    //测量所有6个引脚组合中的电容器
  171.    ReadCapacity(TP1, TP2);
  172.    ReadCapacity(TP1, TP3);
  173.    ReadCapacity(TP2, TP1);
  174.    ReadCapacity(TP2, TP3);
  175.    ReadCapacity(TP3, TP1);
  176.    ReadCapacity(TP3, TP2);
  177.   }

  178.   GetGateThresholdVoltage();     //取栅极开启阈值电压
  179. //  lcd_clear();
  180.   OLED_Clear();
  181.   //测量完成,现在评估如下

  182.   
  183.   if(PartFound == PART_DIODE)//***二极管
  184.   {
  185.    if(NumOfDiodes == 1)
  186.    {
  187.      //标准二极管
  188.      // lcd_eep_string(Diode);
  189.            OLED_ShowChinese(0,0,16,16);//
  190.            OLED_ShowChinese(16,0,18,16);//
  191.            OLED_ShowChinese(32,0,19,16);//
  192.        OLED_ShowString(50,0,"Diode",16);
  193.      // lcd_eep_string(AK);       //"A,K="
  194.        OLED_ShowString(0,2,"A,K=",16);
  195.      //lcd_data(diodes[0].Anode   + 49);
  196.        OLED_ShowChar(40,2,(diodes[0].Anode   + 49),16);
  197.            OLED_ShowChinese(48,2,8,16);//二极管
  198.        //lcd_data(diodes[0].Cathode + 49);

  199.        OLED_ShowChar(64,2,(diodes[0].Cathode   + 49),16);
  200.      // Line2();
  201.      //lcd_eep_string(Uf);       //“Uf =”
  202.        OLED_ShowString(0,4,"Uf =",16);
  203.      //lcd_string(itoa(diodes[0].Voltage, chrVAL, 10)); //显示二极管导通电压降
  204.        OLED_ShowNum(40,4,(diodes[0].Voltage),4, 16);
  205.      //lcd_eep_string(mV);
  206.        OLED_ShowString(72,4,"mV",16);
  207.      goto end;
  208.    }
  209.    else if(NumOfDiodes == 2)
  210.    {
  211.      //双二极管
  212.      if(diodes[0].Anode == diodes[1].Anode)
  213.      {
  214.        //lcd_eep_string(DualDiode); //共阳极双二极管
  215.        OLED_ShowChinese(0,0,20,16);//
  216.           
  217.            OLED_ShowChinese(16,0,16,16);//
  218.            OLED_ShowChinese(32,0,18,16);//
  219.            OLED_ShowChinese(48,0,19,16);//

  220.            //OLED_ShowString(0,0,"DualDiode",16);
  221.        //lcd_string("CA");
  222.        OLED_ShowString(72,0,"CA",16);
  223.        //Line2();  
  224.        //lcd_eep_string(AK1K2);//阳极,阴极1,阴极2=
  225.        OLED_ShowString(0,2,"AK1K2",16);
  226.        //lcd_data(diodes[0].Anode   + 49);
  227.        OLED_ShowChar(88,2,(diodes[0].Anode   + 49),16);
  228.        //lcd_data(diodes[0].Cathode + 49);
  229.        OLED_ShowChar(98,2,(diodes[0].Cathode   + 49),16);
  230.        //lcd_data(diodes[1].Cathode + 49);
  231.        OLED_ShowChar(108,2,(diodes[1].Cathode   + 49),16);
  232.           
  233.            OLED_ShowChar(40,4,(diodes[0].Anode   + 49),16);
  234.            OLED_ShowChinese(48,4,8,16);//二极管
  235.            OLED_ShowChar(64,4,(diodes[0].Cathode   + 49),16);
  236.            OLED_ShowChar(40,6,(diodes[0].Anode   + 49),16);
  237.            OLED_ShowChinese(48,6,8,16);//二极管
  238.            OLED_ShowChar(64,6,(diodes[1].Cathode   + 49),16);
  239.        goto end;
  240.      }
  241.      else if(diodes[0].Cathode == diodes[1].Cathode)
  242.      {
  243.        //lcd_eep_string(DualDiode); //共阴极双二极管
  244.        OLED_ShowChinese(0,0,20,16);//
  245.           
  246.            OLED_ShowChinese(16,0,16,16);//
  247.            OLED_ShowChinese(32,0,18,16);//
  248.            OLED_ShowChinese(48,0,19,16);//
  249.        //lcd_string("CC");
  250.        OLED_ShowString(72,0,"CC",16);
  251.        //Line2();  
  252.        //lcd_string("K,A1,A2=");
  253.        OLED_ShowString(0,2,"K,A1,A2=",16);
  254.        //lcd_data(diodes[0].Cathode + 49);
  255.        OLED_ShowChar(88,2,(diodes[0].Cathode   + 49),16);
  256.        //lcd_data(diodes[0].Anode   + 49);
  257.        OLED_ShowChar(98,2,(diodes[0].Anode   + 49),16);
  258.        //lcd_data(diodes[1].Anode   + 49);
  259.        OLED_ShowChar(108,2,(diodes[1].Anode   + 49),16);
  260.        goto end;
  261.      }
  262.      else if ((diodes[0].Cathode == diodes[1].Anode)&& (diodes[1].Cathode == diodes[0].Anode))
  263.      {
  264.        //lcd_eep_string(TwoDiodes); //反向并联2个二极管。(注:此处原程序没有显示引脚序号)
  265.        OLED_ShowString(0,0,"TwoDiodes",16);
  266.        //Line2();  
  267.        //lcd_eep_string(Antiparallel);
  268.        OLED_ShowString(0,2,"Antiparallel",16);
  269.           
  270.            OLED_ShowChar(0,4,'2',16);
  271.            OLED_ShowChinese(8,4,10,16);//       2个二极管
  272.            OLED_ShowChinese(26,4,16,16);//
  273.            OLED_ShowChinese(42,4,18,16);//
  274.            OLED_ShowChinese(58,4,19,16);//
  275.        goto end;
  276.      }
  277.    }
  278.    else if(NumOfDiodes == 3)         //2个二极管串联;将被认为是3个二极管
  279.    {
  280.      b = 3;
  281.      c = 3;
  282.      //为此,必须有2个阴极和2个阳极匹配。
  283.      //这是因为这些二极管被认为是2个独立的二极管,并且也被认为是一个“大”二极管。
  284.      if((diodes[0].Anode   == diodes[1].Anode)   || (diodes[0].Anode   == diodes[2].Anode))   b = diodes[0].Anode;
  285.      if(diodes[1].Anode   == diodes[2].Anode)                                 b = diodes[1].Anode;
  286.      if((diodes[0].Cathode == diodes[1].Cathode) || (diodes[0].Cathode == diodes[2].Cathode)) c = diodes[0].Cathode;
  287.      if(diodes[1].Cathode  == diodes[2].Cathode)                               c = diodes[1].Cathode;
  288.      if((b<3)&& (c<3))
  289.      {
  290.        //lcd_eep_string(TwoDiodes); //2个串联二极管
  291.        OLED_ShowString(0,0,"TwoDiodes",16);
  292.        //Line2();  
  293.        //lcd_eep_string(sAK);     //串联阳极及阴极=
  294.        OLED_ShowString(0,2,"sAK",16);
  295.        //lcd_data(b + 49);
  296.        OLED_ShowChar(30,2,(b + 49),16);
  297.        //lcd_data(c + 49);
  298.        OLED_ShowChar(40,2,(c + 49),16);
  299.           
  300.            OLED_ShowChar(0,4,'2',16);
  301.            OLED_ShowChinese(8,4,10,16);//       2个二极管
  302.            OLED_ShowChinese(26,4,16,16);//
  303.            OLED_ShowChinese(42,4,18,16);//
  304.            OLED_ShowChinese(58,4,19,16);//
  305.        goto end;
  306.      }
  307.    }
  308.   }
  309.   else if (PartFound == PART_TRANSISTOR)  //***三极管  
  310.   {
  311.    if(PartReady == 0)         //如果未进行过第二次测试(例如在带有保护二极管的三极管的情况下)
  312.    {
  313.      ADCval[1] = ADCval[0];
  314.      ADCuBE[1] = ADCuBE[0];
  315.    }

  316.    if((ADCval[0]>ADCval[1]))         //如果在第一次测试期间放大系数较高,则更新数据,并对调c和e极。
  317.    {
  318.      ADCval[1] = ADCval[0];
  319.      ADCuBE[1] = ADCuBE[0];
  320.      itkw_tmp1 = c;
  321.      c       = e;
  322.      e       = itkw_tmp1;
  323.    }
  324.              OLED_ShowChinese(26,0,17,16);//三极管
  325.            OLED_ShowChinese(42,0,18,16);//
  326.            OLED_ShowChinese(58,0,19,16);//
  327.    if(PartMode == PART_MODE_NPN)  //显示NPN或PNP类型
  328.    {
  329.      //lcd_eep_string(NPN);
  330.      OLED_ShowString(0,2,"NPN",16);
  331.        OLED_ShowChinese(74,2,22,16);//<
  332.    }
  333.    else
  334.    {
  335.      //lcd_eep_string(PNP);
  336.      OLED_ShowString(0,2,"PNP",16);
  337.        OLED_ShowChinese(74,2,21,16);//>
  338.    }

  339.    //lcd_eep_string(BCE);         //BCE=
  340.    OLED_ShowString(50,2,"BCE",16);
  341.    //lcd_data(b + 49);           //依次显示引脚序号(ascii 49 是字符"1", b,c,e取值范围:0-2)
  342.    OLED_ShowChar(90,2,(b + 49),16);
  343.    //lcd_data(c + 49);
  344.    OLED_ShowChar(98,2,(c + 49),16);
  345.    //lcd_data(e + 49);
  346.    OLED_ShowChar(106,2,(e + 49),16);
  347.    //Line2();
  348.    //计算 直流放大系数 hFE = 发射极电流/基极电流
  349.    u32_hfe   = ADCval[1];
  350.    u32_hfe  *= RH_RL_RATIO;       //高低电阻比

  351.    if(ADCuBE[1]< 11) ADCuBE[1] = 11;

  352.    u32_hfe  /= ADCuBE[1];
  353.    ADCval[1] = (uint16_t)u32_hfe;

  354.    //lcd_eep_string(hfeSTR);       //“hFE=”
  355.    OLED_ShowString(0,4,"hFE=",16);
  356.    //lcd_string(utoa(ADCval[1], chrVAL, 10));
  357.    OLED_ShowNum(32,4,(ADCval[1]),4, 16);

  358. //   SetCursor(2,7);           //光标在第2行,字符7
  359.    if(NumOfDiodes > 2)         //带保护二极管的三极管
  360.    {
  361.      //lcd_data(LCD_CHAR_DIODE);   //显示二极管符号
  362.      OLED_ShowChinese(64,0,8,16);//
  363.    }
  364.    else
  365.    {
  366.      //lcd_data(' ');
  367.      OLED_ShowString(64,4,"  ",16);
  368.    }

  369.    for (c=0;c<NumOfDiodes;c++)
  370.    {
  371.      if(((diodes[c].Cathode == e)&& (diodes[c].Anode   == b)&& (PartMode == PART_MODE_NPN))   ||   ((diodes[c].Anode   == e)&& (diodes[c].Cathode == b)&& (PartMode == PART_MODE_PNP)))
  372.      {
  373.        //lcd_eep_string(Uf);       //“Uf=”
  374.        OLED_ShowString(8,6,"Uf=",16);
  375.        //lcd_string(itoa(diodes[c].Voltage, chrVAL, 10));
  376.        OLED_ShowNum(32,6,(diodes[c].Voltage),4, 16);
  377.        //lcd_data('m');         //应是mV的意思..
  378.        OLED_ShowString(64,6,"mV",16);
  379.        goto end;
  380.      }
  381.    }
  382.    goto end;
  383.   }
  384.   else if (PartFound == PART_FET)     //JFET 或 MOSFET
  385.   {
  386.    if(PartMode&1)             //判断子类型码为单数是N型,否则为P型(...)
  387.    {
  388.      //lcd_data('N');           //N型
  389.      OLED_ShowString(0,0,"N",16);
  390.    }
  391.    else
  392.    {
  393.      //lcd_data('P');           //P型
  394.      OLED_ShowString(0,0,"P",16);
  395.    }
  396.   
  397.   //if((PartMode==PART_MODE_N_E_MOS) || (PART_MODE_P_E_MOS))
  398.    if(PartMode< 3)                                   //E-MOSFET:1、2(与下面对应)
  399.    {
  400.      //lcd_eep_string(emode);     //“-E”
  401.      OLED_ShowString(8,0,"-E",16);
  402.      //lcd_eep_string(mosfet);     //“-MOS”
  403.      OLED_ShowString(24,0,"-MOS",16);
  404.    }
  405.    else if((PartMode==PART_MODE_N_D_MOS) || (PartMode==PART_MODE_P_D_MOS))  //耗尽型D-MOSFET:3、4
  406.    {
  407.      //lcd_eep_string(dmode);     //“-D”
  408.      OLED_ShowString(8,0,"-D",16);
  409.      //lcd_eep_string(mosfet);     //“-MOS”
  410.      OLED_ShowString(24,0,"-MOS",16);
  411.    }
  412.    else                                           //JFET:5、6
  413.    {
  414. //     lcd_eep_string(jfet);       //“-JFET”
  415.      OLED_ShowString(24,0,"-JFET",16);
  416.    }

  417.    //增强型E-MOSFET 则测量 栅极电容
  418.    if(PartMode< 3)           //E-MOSFET:1、2
  419.    {
  420. //     lcd_eep_string(GateCap);     //“C=”
  421.      OLED_ShowString(50,4,"C=",16);
  422.      //tmpVAL = strlen(chrVAL2);//chrVAL2_cv
  423.      //tmpVAL2 = tmpVAL;
  424. //     if(tmpVAL>4) tmpVAL = 4;     //对于 >100nF 的电容,不要指定最后一个小数位(否则它不适合 LCD)(显示4位长度)
  425.      //lcd_show_format_cap(chrVAL2, tmpVAL, tmpVAL2);
  426.                  OLED_ShowNum(66,4,chrVAL2_cv,4, 16);
  427.      //lcd_data('n');
  428.      OLED_ShowString(116,4,"p",16);
  429.    }
  430.    //Line2();
  431.    //lcd_eep_string(gds);         //“GDS=” (注:此处与三极管的三个极分别显示的方式不同)
  432.    OLED_ShowString(0,2,"GDS=",16);
  433.    //lcd_data(b + 49);
  434.    OLED_ShowChar(38,2,(b + 49),16);
  435.    //lcd_data(c + 49);
  436.    OLED_ShowChar(46,2,(c + 49),16);
  437.    //lcd_data(e + 49);
  438.    OLED_ShowChar(54,2,(e + 49),16);
  439.    if((PartMode< 3)&& (NumOfDiodes > 0)) //增强型E-MOSFET及带保护二极管的
  440.    {
  441.      //lcd_data(LCD_CHAR_DIODE);   //显示二极管符号
  442.      OLED_ShowString(0,4,"DIODE",16);
  443.    }
  444.    else
  445.    {
  446.      //lcd_data(' ');           //空格
  447.      OLED_ShowString(0,4,"  ",16);
  448.    }
  449.   
  450.    if(PartMode< 3)           //增强型E-MOSFET
  451.    {
  452.      //lcd_eep_string(vt);       //Vt=
  453.      OLED_ShowString(0,6,"Vt=",16);
  454.      //lcd_string(chrVAL);       //显示栅极阈值电压
  455.      OLED_ShowNum(24,6,chrVAL_cv,4, 16);
  456.      //lcd_data('m');
  457.      OLED_ShowString(100,6,"mV",16);
  458.    }
  459.    goto end;
  460.   }
  461.   else if (PartFound == PART_THYRISTOR) //单向可控硅
  462.   {
  463. //   lcd_eep_string(Thyristor);
  464.        OLED_ShowString(0,0,"Thyristor",16);
  465. //   Line2();
  466. //   lcd_string("GAK=");
  467.        OLED_ShowString(0,2,"GAK=",16);
  468. //   lcd_data(b + 49);
  469.        OLED_ShowChar(30,2,(b + 49),16);
  470. //   lcd_data(c + 49);
  471.        OLED_ShowChar(38,2,(c + 49),16);
  472. //   lcd_data(e + 49);
  473.        OLED_ShowChar(46,2,(e + 49),16);
  474.    goto end;
  475.   }
  476.   else if (PartFound == PART_TRIAC)     //三端双向可控硅
  477.   {
  478.    //lcd_eep_string(Triac);
  479.        OLED_ShowString(50,0,"Triac",16);
  480.    //Line2();
  481.    //lcd_eep_string(GA1A2);       //注:已改为统一显示
  482.        OLED_ShowString(0,2,"G A1 A2",16);
  483. //   lcd_data(b + 49);
  484.        OLED_ShowChar(0,4,(b + 49),16);
  485. //   lcd_data(e + 49);
  486.        OLED_ShowChar(16,4,(e + 49),16);
  487. //   lcd_data(c + 49);
  488.        OLED_ShowChar(40,4,(c + 49),16);
  489.    goto end;
  490.   }
  491.   else if(PartFound == PART_RESISTOR)   //电阻
  492.   {
  493. //   lcd_eep_string(Resistor);     //显示:Resistor
  494.        OLED_ShowChinese(0,0,0,16);//电
  495.        OLED_ShowChinese(16,0,1,16);//阻
  496.        OLED_ShowString(40,0,"Resistor",16);
  497. //   lcd_data(ra + 49);         //显示引脚序号
  498.        OLED_ShowChar(30,2,(ra + 49),16);
  499. //   lcd_data('-');
  500.        //OLED_ShowChar(46,2,('-'),16);
  501.        OLED_ShowChinese(38,2,6,16);//电zhu
  502. //   lcd_data(rb + 49);
  503.        OLED_ShowChar(54,2,(rb + 49),16);
  504. //   Line2();
  505. //   lcd_string ("R = ");
  506.        OLED_ShowString(30,4,"R =",16);
  507.    if(rv[0]>512)             //检查测试电阻两端的电压与中值512相差有多远
  508.    {
  509.      ADCval[0] = (rv[0]-512);
  510.    }
  511.    else
  512.    {
  513.      ADCval[0] = (512-rv[0]);
  514.    }
  515.   
  516.    if(rv[1]>512)
  517.    {
  518.      ADCval[1] = (rv[1]-512);
  519.    }
  520.    else
  521.    {
  522.      ADCval[1] = (512-rv[1]);
  523.    }
  524.   
  525.    if(ADCval[0] > ADCval[1])
  526.    {
  527.      rADCmax[0] = rADCmax[1];
  528.      rv[0] = rv[1];           //使用更接近512的结果(准确度更高)
  529.      rv[1] = R_H_PER;         //470k电阻(数值除100)
  530.    }
  531.    else
  532.    {
  533.      rv[1] = R_L_VAL;         //680R测试电阻
  534.    }
  535.   
  536.    if(rv[0]==0) rv[0] = 1;
  537.    u32_hfe = (uint32_t)((uint32_t)((uint32_t)rv[1]*(uint32_t)rv[0]) / (uint32_t)((uint32_t)rADCmax[0]-(uint32_t)rv[0]));

  538. //计算电阻
  539.        if(rv[1]==R_H_PER)         //470k电阻
  540.    {
  541.          OLED_ShowNum(54,4,u32_hfe/10,5, 16);
  542.        OLED_ShowChar(102,4,('K'),16);
  543.        }
  544.        else
  545.        {
  546.        OLED_ShowNum(54,4,u32_hfe,5, 16);
  547.        OLED_ShowChinese(102,4,7,16);////显示Ω
  548.        //OLED_ShowChar(102,4,32+95,16);//显示Ω
  549.        }
  550. //   ultoa(u32_hfe,chrVAL,10);     //转换一个无符号长整型数为字符串,10进制
  551. //   if(rv[1]==R_H_PER)         //470k电阻
  552. //   {
  553. //     ra = strlen(chrVAL);       //ra字符串长度,必须显示逗号
  554. //     for (rb=0;rb<ra;rb++)
  555. //     {
  556. //       lcd_data(chrVAL[rb]);
  557. //       if(rb==(ra-2)) lcd_data('.');  //逗号
  558. //     }
  559. //     lcd_data ('k');           //如果使用470k 电阻,则显示单位为千欧
  560. //   }
  561. //   else
  562. //   {
  563. //     lcd_string(chrVAL);
  564. //   }
  565. //   lcd_data(LCD_CHAR_OMEGA);     //显示欧米茄符号代表欧姆
  566.    goto end;
  567.   }
  568.   else
  569.   if(PartFound == PART_CAPACITOR)  //电容
  570.   {
  571. //   lcd_eep_string(Capacitor);     //显示Capacitor
  572.        OLED_ShowChinese(0,0,0,16);//电
  573.        OLED_ShowChinese(16,0,2,16);//容
  574.        OLED_ShowString(40,0,"Capacitor",16);
  575. //   lcd_data(ca + 49);         //显示引脚序号
  576.        OLED_ShowChar(0,2,(ca + 49),16);
  577. //   lcd_data('-');
  578.        OLED_ShowChar(16,2,('-'),16);
  579. //   lcd_data(cb + 49);
  580.        OLED_ShowChar(32,2,(cb + 49),16);
  581. //   Line2();
  582.    tmpVAL2 = 'n';
  583. //   if(cv > 99999)             //到达1uF则改为微法显示:u。
  584. //   {
  585. //     cv /= 1000;
  586. //     tmpVAL2 = LCD_CHAR_U;
  587. //   }
  588.            OLED_ShowNum(0,4,cv,9, 16);
  589.            OLED_ShowString(108,4,"pF",16);
  590.            OLED_ShowNum(0,6,cv/1000,6, 16);
  591.            OLED_ShowString(48,6,"nF",16);
  592.            OLED_ShowNum(64,6,cv/1000000,4, 16);
  593.            OLED_ShowString(108,6,"uF",16);
  594. //   ultoa(cv, chrVAL, 10);
  595. //   tmpVAL = strlen(chrVAL);
  596. //   lcd_show_format_cap(chrVAL, tmpVAL, tmpVAL);
  597. //   lcd_data(tmpVAL2); //显示: n或u
  598. //   lcd_data('F');
  599.           

  600.    goto end;
  601.   }
  602.   
  603.   if(NumOfDiodes == 0)         //未找到二极管
  604.   {
  605.            OLED_ShowChinese(0,2,9,16);//
  606.            OLED_ShowChinese(16,2,10,16);//
  607.            OLED_ShowChinese(32,2,11,16);//
  608.            OLED_ShowChinese(48,2,12,16);//
  609.            OLED_ShowChinese(64,2,13,16);//
  610.            OLED_ShowChinese(80,2,14,16);//
  611.            OLED_ShowChinese(96,2,14,16);//
  612.            OLED_ShowChinese(112,2,14,16);//
  613.            OLED_ShowChinese(48,4,8,16);//
  614.            OLED_ShowChinese(32,4,6,16);//
  615.            OLED_ShowChinese(16,4,15,16);//
  616.   }
  617.   else
  618.   {
  619.            OLED_ShowChinese(0,2,9,16);//
  620.            OLED_ShowChinese(16,2,10,16);//
  621.            OLED_ShowChinese(32,2,11,16);//
  622.            OLED_ShowChinese(48,2,12,16);//
  623.            OLED_ShowChinese(64,2,13,16);//
  624.            OLED_ShowChinese(80,2,14,16);//
  625.            OLED_ShowChinese(96,2,14,16);//
  626.            OLED_ShowChinese(112,2,14,16);//
  627.        OLED_ShowChar(0,6,NumOfDiodes + 48,16);
  628. //   lcd_data(LCD_CHAR_DIODE);     //二极管符号
  629.        OLED_ShowChinese(16,6,8,16);//二极管符号

  630.   }

  631.   end:

  632.   while(1) //无限循环(本程序自动关机功能已省略)
  633.   {
  634.    if(RST_PIN==0)//PD7按钮按下为低电平,跳回到起点并进行新的测试
  635.    {
  636.      goto start;
  637.    }
  638.   }
  639.   return 0;
  640. }

  641. void CheckPins(uint8_t HighPin, uint8_t LowPin, uint8_t TriPin)  //调用方式:CheckPins(TP1, TP2, TP3);(共6个组合)PC口
  642. {
  643.   //用于测试具有指定引脚分配的元件属性
  644.   //HighPin:最初设置为高电平的引脚:连接到 Vcc
  645.   //LowPin: 最初设置为低电平的引脚: 通过 R_L 连接到 GND
  646.   //TriPin: 最初设置为开路的引脚  : 高阻状态(三态脚)
  647.   //在测试的过程中,TriPin会进行循环高低电平切换。

  648.   //注:以下是否重复定义了变量???
  649.   uint16_t ADCv[6];
  650.   uint8_t  tmpVAL, tmpVAL2;
  651.   u8 i,j;
  652. //  wdt_reset();

  653.   //LowPin通过 R_L 连接到 GND       1<<8 把1向左移8位
  654.   tmpVAL  = (LowPin*2);
  655.   R_DDR   = (1<<tmpVAL);
  656. //  P2M1 = ~P2M0;
  657.   P2M1=~P2M0;
  658. //  OLED_ShowNum(0,6,P2M0,4, 16);

  659.   R_PORT  = 0;
  660. //             while(!RX1_Cnt);  //等待输入
  661. //         Print(0xcc);
  662. //         RX1_Cnt=0;     //复位
  663.   ADC_DDR = (1<<HighPin);
  664.   P1M1 = ~P1M0;
  665.   ADC_PORT= (1<<HighPin);  //HighPin连接在 Vcc
  666.   _delay_ms(5);

  667.   //对于某些 MOSFET,栅极(TriPin)必须先放电
  668.   //N通道:
  669.   DischargePin(TriPin,0);
  670.   //测量LowPin上的电压,元件是否在测试座上锁定?
  671.   ADCv[0] = ReadADC(LowPin);
  672. //  OLED_ShowNum(60,6,ADCv[0],4, 16);        
  673. //       while(!RX1_Cnt);  //等待输入
  674. //         Print(0xdd);
  675. //         RX1_Cnt=0;     //复位
  676.   if(ADCv[0]< 20) goto next;
  677.   //否则:为 P 通道放电(栅极接正)
  678.   DischargePin(TriPin,1);
  679.   //再测量LowPin上的电压
  680.   ADCv[0] = ReadADC(LowPin);

  681.   next:
  682.   if(ADCv[0]< 20)             //如果元件在HighPin和LowPin 之间没有连续性
  683.   {
  684.    tmpVAL2   = (TriPin*2);
  685.    R_DDR   |= (1<<tmpVAL2);     //三态引脚通过 R_L 接地,以测试 pnp
  686.    P2M1 = ~P2M0;
  687.        _delay_ms(2);
  688.    ADCv[0]   = ReadADC(LowPin);   //测量电压

  689.    if(ADCv[0] > 700)
  690.    {
  691.      //元件传导 => pnp 三极管或类似的。
  692.      //测量两个方向的增益
  693.     
  694.        R_DDR   = (1<<tmpVAL);     //三态引脚(基极)高阻抗
  695.      P2M1 = ~P2M0;
  696.        tmpVAL2++;
  697.      R_DDR  |= (1<<tmpVAL2);     //三态引脚(基极)通过 R_H 接地
  698.      P2M1 = ~P2M0;
  699.        _delay_ms(10);
  700.      ADCv[0] = ReadADC(LowPin);   //测量LowPin(假定为集电极)的电压。
  701.      ADCv[2] = ReadADC(TriPin);   //测量三态引脚(基极)电压
  702.      R_DDR   = (1<<tmpVAL);     //三态引脚(基极)高阻抗
  703.        P2M1 = ~P2M0;
  704.      //三态引脚(基极)高阻抗
  705.      //检查测试是否已经运行过
  706.      if((PartFound == PART_TRANSISTOR) || (PartFound == PART_FET)) PartReady = 1; //将PartReady置1(第2轮)

  707.      ADCval[PartReady] = ADCv[0];       //登记到n轮的结果
  708.      ADCuBE[PartReady] = ADCv[2];

  709.      if(ADCv[2] > 200)
  710.      {
  711.        if(PartFound != PART_THYRISTOR)   //若非双向可控硅
  712.        {
  713.        PartFound = PART_TRANSISTOR;
  714.        PartMode  = PART_MODE_PNP;     //则为PNP 三极管(基极被“拉高”)
  715.        }
  716.      }
  717.      else
  718.      {
  719.        if(PartFound != PART_THYRISTOR)   //若非双向可控硅
  720.        {
  721.        PartFound = PART_FET;
  722.        PartMode  = PART_MODE_P_E_MOS;   //则为P沟道 MOSFET(基极/栅极未“上拉”)
  723.        }
  724.      }

  725.      if(PartFound != PART_THYRISTOR)     //若非双向可控硅
  726.      {
  727.        b = TriPin;
  728.        c = LowPin;
  729.        e = HighPin;
  730.      }
  731.    }

  732.    //三态脚TriPin(假定为基数)到正极,以测试 npn
  733.    ADC_PORT = 0;                   //LowPin到地
  734.    tmpVAL   = (TriPin*2);
  735.    tmpVAL2  = (HighPin*2);
  736.    R_DDR   = (1<<tmpVAL) | (1<<tmpVAL2); //HighPin和三态引脚输出
  737.    P2M1 = ~P2M0;
  738.        R_PORT   = (1<<tmpVAL) | (1<<tmpVAL2); //HighPin和三态引脚通过 R_L 到 Vcc
  739.    ADC_DDR  = (1<<LowPin);           //LowPin输出
  740. ……………………

  741. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

Keil代码下载:
Keil代码.7z(66.69 KB, 下载次数: 450)

评分

黑币 +130
收起理由
+ 30
很给力!
+ 100
共享资料的黑币奖励!

查看全部评分

来自 2#
ID:795427发表于 2022-9-15 11:30|只看该作者
perseverance51 发表于 2022-9-15 10:22
需要注意的是通过STC-ISP烧录时,时钟源选择内部,频率为8MHz,设置其他频率烧录后,屏幕只会在启动的时候 ...

根据程序附上原理图
,经测试,很难测准确。
来自 3#
ID:1109356发表于 2024-3-28 17:17|只看该作者
这个用来对照原程序看省事很多。
简化版的问题是把测电容内阻和测电感的部分都去掉了,
感觉可以再简化下,只留下两个脚测电容和电阻,
但要加一个预先测电容两端电压的功能,会比原版实用。
来自 4#
ID:1109356发表于 2024-4-4 18:20|只看该作者
shoppingx 发表于 2024-3-28 17:17
这个用来对照原程序看省事很多。
简化版的问题是把测电容内阻和测电感的部分都去掉了,
感觉可以再简化下 ...

做了一个试了试。

一开始没给3.3v降压芯片接滤波电容,连电脑USB供电时会出现每次测量结果无法重复的现象:测1k欧电阻有时显示为40uf电容,有时显示为二极管,有时找不到器件。
换充电宝供电后测电阻电容均可重复。接了0.1uf和10uf滤波电容后用电脑USB供电也没问题了。
不知道和其他回帖的类似现象是否同一原因造成。

用了680欧和470k欧的贴片电阻,在程序里相应改了R_L_VAL和R_H_VAL值,测电阻误差很小(和数字万用表相对照)。把Hr_LowCAPACITY_FACTOR 和Lr_HighCAPACITY_FACTOR均改为4后测电容误差减小到可接受(20pF测得30pF,10uF测得10.5uF,680uF测得740uF)。

没测其他器件,这样用来做备用表也够了。
来自 5#
ID:1109356发表于 2024-4-6 20:47|只看该作者
shoppingx 发表于 2024-4-4 18:20
做了一个试了试。

一开始没给3.3v降压芯片接滤波电容,连电脑USB供电时会出现每次测量结果无法重复的 ...

试图加上测电容内阻ESR和测电感的部分,
发现这里的程序可能是从ttester 0.99版或更早版本改写而来,
1.00版有了测电感的子函数,1.01版有了测ESR的子函数,1.07版有了测电容高频损耗的子函数
1.10版一下子多了蛮多其他子函数。。。
市面上的T4表似乎是1.07版或之后的。
参照1.07版把测电感和测电容内阻的部分加上去似乎也不会把固件变大多少,
可能STC8h1k16还够用。
6#
ID:507641发表于 2022-9-14 17:10|只看该作者
太强大了!请问OLED是什么型号?
7#
ID:819198发表于 2022-9-14 18:45|只看该作者
12864屏0.96寸OLED显示屏,4针,IIC。
8#
ID:53978发表于 2022-9-14 19:10|只看该作者
感谢楼主 这个可以搞一下
9#
ID:712493发表于 2022-9-14 20:56|只看该作者
感谢楼主 这个可以搞一下
10#
ID:983641发表于 2022-9-14 22:41|只看该作者
厉害哟,值得量产。
11#
ID:192294发表于 2022-9-14 22:47|只看该作者
非常强好!强烈支持LZ! 100个赞!!!58
12#
ID:216379发表于 2022-9-15 06:55|只看该作者
非常好强! 这个可以搞一搞!!
13#
ID:507641发表于 2022-9-15 07:51|只看该作者
rz12345 发表于 2022-9-14 18:45
12864屏0.96寸OLED显示屏,4针,IIC。

芯片型号 如 sd1330 这样.谢谢
14#
ID:1044789发表于 2022-9-15 08:02来自手机|只看该作者
挺强,可以做一做。
15#
ID:819198发表于 2022-9-15 09:00|只看该作者
12864屏0.96寸OLED显示屏,4针,IIC。 sd1306,某宝搜,一大堆
16#
ID:961114发表于 2022-9-15 09:10|只看该作者
实力派!!太强大
17#
ID:977861发表于 2022-9-15 10:05|只看该作者
STC8H1K16要另外买,其他型号手上有
18#
ID:795427发表于 2022-9-15 10:22|只看该作者
需要注意的是通过STC-ISP烧录时,时钟源选择内部,频率为8MHz,设置其他频率烧录后,屏幕只会在启动的时候显示闪烁一下就会一直黑屏,需要设置为8MHz才能正常显示。
19#
ID:977861发表于 2022-9-15 11:15|只看该作者
无Makefile文件?
20#
ID:507641发表于 2022-9-15 11:53|只看该作者
楼主发上来的与楼主的图有区别  有个警告的,可能有两个板本
21#
ID:819198发表于 2022-9-15 16:08|只看该作者
我用的是11.0592M,没问题的,不能上8M,以前我遇到过,是个别OLED体质问题。构思了很久,充分利用STC的管脚功能,才把电路结构做到这么简单,难道都没发现,我只用了3根线
22#
ID:79544发表于 2022-9-15 16:37|只看该作者
楼主您好 板子和程序引脚不对应啊。你得OLED焊的不对应 再就是按键程序是P0.1
23#
ID:507641发表于 2022-9-15 16:43|只看该作者
楼主大神,移植成功.给我们上上课说说原理
24#
ID:53978发表于 2022-9-15 17:16|只看该作者
楼主大神 手头没有STC8H单片机,目前这个情况又发不了货,可以用STC8A8K64S4A12吗?
25#
ID:430492发表于 2022-9-15 17:20|只看该作者
这个非常强大呀! 可以开模搞一套件啦!!
26#
ID:60656发表于 2022-9-15 21:35|只看该作者
多谢开源分享, 能在加个电感测量吗
27#
ID:961114发表于 2022-9-16 08:38|只看该作者
大神 帮把这个晶体管测量仪器,移植到 STC-屠龙刀-STC32G12K128核心功能实验板,
28#
ID:961114发表于 2022-9-16 09:48|只看该作者
大神辛苦了,帮用  屠龙刀三-STC32G12K128核心功能实验板去改 或 开天斧三-STC8H8K64U核心功能实验板去改 !   STC将提供赞助
29#
ID:1025950发表于 2022-9-16 10:22|只看该作者
感谢大神开源分享, 可以加个电感测量吗?
30#
ID:819198发表于 2022-9-16 10:41|只看该作者
电路图的按键画跳位了,不过实物照片是对的

31#
ID:1044789发表于 2022-9-16 10:51来自手机|只看该作者
可以试试这个项目
32#
ID:1044916发表于 2022-9-16 16:13来自手机|只看该作者
rz12345 发表于 2022-9-16 10:41
电路图的按键画跳位了,不过实物照片是对的

我换用STC8H8K64U,发现测不测都一样,都是显示毛瑟管
33#
ID:507641发表于 2022-9-16 16:54|只看该作者
rz12345 发表于 2022-9-15 09:00
12864屏0.96寸OLED显示屏,4针,IIC。 sd1306,某宝搜,一大堆

谢谢楼主大伽
34#
ID:581992发表于 2022-9-16 17:58|只看该作者
这个简单是简单,但是准不准啊?
35#
ID:433219发表于 2022-9-17 10:13|只看该作者
perseverance51 发表于 2022-9-15 11:30
根据程序附上原理图,经测试,很难测准确。

测 三极管、MosFet 之类的准确性,没多大意义。。。重要的  LCR测试功能就太强大了,

众所周知,小容量(体积)的C、L都是没有标签的,一旦拆封贴上,很难分析参数,有这个小玩意真好玩!
36#
ID:53978发表于 2022-9-17 12:18|只看该作者
wkman 发表于 2022-9-17 10:13
测 三极管、MosFet 之类的准确性,没多大意义。。。重要的  LCR测试功能就太强大了,

众所周知 ...

网上有开源的电桥镊子
37#
ID:434512发表于 2022-9-18 12:38|只看该作者
正好在找这方面资料 ,谢谢分享了
38#
ID:53978发表于 2022-9-24 12:37|只看该作者
也准备学一个

51hei截图20220924123403.png(44.3 KB, 下载次数: 175)

51hei截图20220924123403.png
39#
ID:324470发表于 2022-9-25 00:19来自手机|只看该作者
感谢开源,福利大家。
40#
ID:63317发表于 2022-9-25 05:56|只看该作者
感谢开源,福利大家
41#
ID:942056发表于 2022-9-25 19:13来自手机|只看该作者
这是利用p2口的pwm功能吗
42#
ID:324470发表于 2022-9-25 19:32|只看该作者
请问一下楼主,这个供电是用3.3V吗?
43#
ID:324470发表于 2022-9-25 21:41|只看该作者
这样单锂电经过LDO到3.3V供单片机能正常工作吗?


手机版|小黑屋|51黑电子论坛|51黑电子论坛6群QQ管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网