痞酷網_PIGOO

 找回密碼
 立即註冊
!!! [系統偵測到廣告阻擋軟體] !!!

如果您覺得痞酷網對您有些許幫助,或者您認同痞酷網的理想,

那麼希望您將痞酷網設定為白名單.

並請在上論壇的時候,動動您的手指,用行動支持我們.

謝謝!
樓主: antlu

簡易電感量測---- 野人獻曝經驗談

  [複製鏈接]
發表於 2012-11-10 00:13:03 | 顯示全部樓層
antlu 發表於 2012-11-9 06:09 PM static/image/common/back.gif
LCM & 7段顯示都可以用!!
把回收場的 儀表面板拆下來(一半顯示) 共陰極,接上轉接板, 就可以了!! 缺點是  ...

應該不是亮度不足   而是LED亮不亮都是紅色 而產生反差過小問題
一般傳統標準解法 是加一塊稍為暗而同色系透光膠片 當濾光片
DIY 有時手邊不會剛好就有 很久以前我都是剪傳統相機底片剩餘空白部分來用
有時拿超商附的淡白霧面塑膠袋剪來用 好幾年前台灣的超商改成要買的塑膠袋變太厚透光不良
逼急了偷剪女友的玻璃絲襪套上橡皮筋來用  有一陣子背負[變態]惡名  
可是效(笑)果真的很好 成就感之餘 同時小小滴滿足犯罪慾望
黑/黃/青/藍/粉紅色 異色形成高反差 提高了很好的辨識效果
 樓主| 發表於 2012-11-10 00:34:39 | 顯示全部樓層
SIMON1016 發表於 2012-11-10 12:13 AM static/image/common/back.gif
應該不是亮度不足   而是LED亮不亮都是紅色 而產生反差過小問題
一般傳統標準解法 是加一塊稍為暗而同色 ...

SIMON1016大:
"小小滴滿足犯罪慾望" 可以學著做吧!!(已經公諸於世!)(應該沒有智慧產權吧!!) 為了省4個電晶體,用異色形成反差,省錢又省事!! 感謝囉!!
發表於 2012-11-10 00:47:39 | 顯示全部樓層
去小書店買深咖啡色玻璃紙,或類似的暗色系紙來用,可以拿電表和LED去套上去試就知道效果了.

要不然去壓克力店買上面那些色系的壓克力板,用同樣方法試,可能得自己買一支鑽石刀回家來切割.
發表於 2012-11-10 02:10:40 | 顯示全部樓層
本帖最後由 SIMON1016 於 2012-11-10 01:16 AM 編輯

一般寫在 main() 裡的程式 多是在敘述整個主體框架運作
檢視時猶如在看最上層的系統方塊圖般的流暢
LV值的演算取得 雖然是很核心 但放在main() 裡面反而有層次節奏不明的感覺
換CPU/晶振頻率時 會吃虧得要去改main() 裡面

拾人牙慧 我續著xiaolaba 大的話...
同時LV值的演算 因為有事前紙上演算簡化後  真正寫出的程式碼已經簡化幾近於天書
把LV值的演算取得 獨立出來成一子式
LV值的演算子式 開頭再註解  原諧振公式 和 演算簡化過程 以及 傳入傳出變數
有交代來龍去脈 這樣一年後就不會成為無字天書

譬如說 一年後才有 雄大那個電容750PF 因為數值不同於原設計1000PF 需要重新演算簡化
       沒有那些註解 以及層次分明易懂的結構  會很頭痛
發表於 2012-11-10 03:03:20 | 顯示全部樓層
scottwang 發表於 2012-11-9 11:47 PM static/image/common/back.gif
去小書店買深咖啡色玻璃紙,或類似的暗色系紙來用,可以拿電表和LED去套上去試就知道效果了.

要不然去壓克 ...

壓克力買1~2mm薄的 畫線後烤軟(我有時浸開水) 就可以用剪刀沿著畫線處理

壓克力膠片類是最好的解法啦

只是我不太喜歡反光  有些工業數位表頭  會以咬花處理抑制反光  對現場人員幫助很大

照片:工業數位表頭  表面咬花處理抑制反光 紅色部分不是壓克力 而是以印刷方式達成
照片-0002.jpg


哪天我試看看只貼經過咬花處理的半透明膠片
----------------------------------------------------------

阿antlu大
     很 不好意思  我離題了




發表於 2012-11-10 03:28:23 | 顯示全部樓層
SIMON1016 發表於 2012-11-10 03:03 AM static/image/common/back.gif
壓克力買1~2mm薄的 畫線後烤軟(我有時浸開水) 就可以用剪刀沿著畫線處理

壓克力膠片類是最好 ...

>壓克力買1~2mm薄的 畫線後烤軟(我有時浸開水) 就可以用剪刀沿著畫線處理

烤軟會不會烤焦,變形,變成柯博文? ......

浸開水會有軟化作用嗎?

以前曾在工業控制的公司做R&D,LED的壓克力都是老闆負責,一次要訂許多的小片,現在我們自己要用只能另想辦法.

買薄的壓克力板是比較可行的方式,再配合鑽石刀.
 樓主| 發表於 2012-11-10 14:41:38 | 顯示全部樓層
scottwang 發表於 2012-11-10 12:47 AM static/image/common/back.gif
去小書店買深咖啡色玻璃紙,或類似的暗色系紙來用,可以拿電表和LED去套上去試就知道效果了.

要不然去壓克 ...

scottwang 大:
  我在光南有買到割壓克力的美工刀,很好用!! 以前用鋸片自己磨比較辛苦!! 以後就交給 裕洲大就OK了!他可是專家連"X禁品"都可以弄得到!!...(啊!不小心把心理的話都講出來了!!)
 樓主| 發表於 2012-11-10 15:00:29 | 顯示全部樓層
SIMON1016 發表於 2012-11-10 02:10 AM static/image/common/back.gif
一般寫在 main() 裡的程式 多是在敘述整個主體框架運作
檢視時猶如在看最上層的系統方塊圖般的流暢
LV值的 ...

SIMON1016大:
   感謝指導!!
   這就是 高手 與 菜鳥,專業 與 玩票的差別!! 以前都是修硬體(修到最後變"管人") 對於程式的 "眉眉角角"真的都沒有經驗,這次賺最多的就是我!! 剛剛慶祝岳父80大壽就急著趕回來做 89C2051的電感表,原本想說只要把IO設定改一改就可以,沒想到 三個問題 1.少了兩段 a b (經過加了 提升電阻後就好了) 2.因為等待 LM311 和雄爸的 750P電容所以先用頻率計加頻率進去,發現電感顯示與我原先的 STC89C52RC 的顯示值不一樣,還無法變零(頻率越高電感量越小)最低限到40. 3.閃爍現象!! 原因還不明白!!

  你的壓克力板用熱水軟化用剪刀剪,這創意真是"天才"啊!!  咬花 我這輩子第一次聽到!! 我都是用"砂紙"磨!!
   C 語言真的非常廣又深,沒上過課還有"性向"的天生不足,只能慢慢來自得其樂了!!
發表於 2012-11-10 15:01:58 | 顯示全部樓層
SIMON1016 發表於 2012-11-10 02:10 AM static/image/common/back.gif
一般寫在 main() 裡的程式 多是在敘述整個主體框架運作
檢視時猶如在看最上層的系統方塊圖般的流暢
LV值的 ...

高手來了....
高手來了....
發表於 2012-11-10 15:06:23 | 顯示全部樓層
本帖最後由 xiaolaba 於 2012-11-10 03:17 PM 編輯
antlu 發表於 2012-11-9 07:09 PM static/image/common/back.gif
LCM & 7段顯示都可以用!!
把回收場的 儀表面板拆下來(一半顯示) 共陰極,接上轉接板, 就可以了!! 缺點是  ...


哈....
這個好, 貧民板..俺有時間還是會抄襲你這個, 因為原來做用AT89C2051, 抄人家的源碼, 但是改不成, 自己有沒有時間慢慢重寫, 所以只用了他給的很陽春的第一個版本, 有點 BUG, 不過將就用,  Lx 太大或太小都不准

想請教你, 用哪家的COMPILER, 編譯後的ROM SIZE多大呢

還有, 要不要考慮把源碼寄存在 git hub, 可以方便你自己更新, 也方便想抄襲的人, 例如俺, 存取你的嘔心瀝血大作, 更好的保存版本控制和記錄
 樓主| 發表於 2012-11-10 15:20:33 | 顯示全部樓層
xiaolaba 發表於 2012-11-10 03:06 PM static/image/common/back.gif
哈....
這個好, 貧民板..俺有時間還是會抄襲你這個, 因為原來做用AT89C2051, 抄人家的源碼, 但是改不成,  ...

xiaolaba大:
   是這一家的 uVision2 Integrated Development Environment 這是買機票送"飛機"送的!!
   data=26.2 xdata=0  const=14 code 1775 我看不懂!!
   您願意用的當參考,那是我畢生的榮幸啊!!
發表於 2012-11-10 15:29:11 | 顯示全部樓層
antlu 發表於 2012-11-10 03:20 PM static/image/common/back.gif
xiaolaba大:
   是這一家的 uVision2 Integrated Development Environment 這是買機票送"飛機"送的!!
    ...

code 1775  = 1775 / 1024 = 1.73K ROM

請問你有沒有試過燒到 AT89C2051, 可用嗎. 因為記得 2051 號好像只有1.5K FLASH ROM
 樓主| 發表於 2012-11-10 15:33:38 | 顯示全部樓層
xiaolaba 發表於 2012-11-10 03:29 PM static/image/common/back.gif
code 1775  = 1775 / 1024 = 1.73K ROM

請問你有沒有試過燒到 AT89C2051, 可用嗎. 因為記得 2051 號好像 ...

xiaolaba大:
    哈哈哈!! 有燒進去而且可以動作!!(但是 動作不良!!)  閃爍 無法歸零 ...幫我看看如何!!
/*-----------------------------------------------
   7段顯示共陰 電感計 89C2051用
------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<stdio.h>
#include<intrins.h>
bit OVERFLOWFLAG;
bit TIMERFLAG;
unsigned int LVint;
#define DataPort P1//P0.0~P0.7 七段顯示的段顯示(共陰極)
#define DrivePort P3//驅動共陰極顯示器
unsigned char code  dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共陰7段值0~9
//unsigned char code  dofly_DuanMa[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共陽7段值0~9

unsigned char code dofly_WeiMa[4]={ 0xfe,0xfd,0xfb,0xf7};//共陰位碼1>>秒, 位碼2>>10秒,位碼3>>分, 位碼4>>10分,
//unsigned char code dofly_WeiMa[8]={ 0x01,0x02,0x04,0x08, 0x01,0x02,0x04,0x08 };//{ 0x01,0x02,0x04,0x08, 0x10,0x20,0x40,0x80 };//共陽位碼1>>秒, 位碼2>>10秒,位碼3>>分, 位碼4>>10分,

unsigned char TempData[4]; //存??示值的全局?量,把段碼的資料存到要顯示的緩衝器上面,利用類似查表的對應方式,送出至顯示器. TempData[ ] 是放置要顯示的7段資料
void Display_Data_Operation(void);
void Display(char n,char Num);
/*------------------------------------------------
                    定时器0初始化子程序
                                        本程序用于计数
------------------------------------------------*/
void Init_Timer0(void)
{
TMOD |= 0x01 | 0x04;          //使用模式1,16位计数器,使用"|"符号可以在使用多个定时器时不受影响                     
TH0=0x00;              //给定初值
TL0=0x00;         
EA=1;            //总中断打开
ET0=1;           //定时器中断打开
TR0=1;           //定时器开关打开

}
/*------------------------------------------------
                    定时器1初始化子程序
                                        本程序用于定时
------------------------------------------------*/
void Init_Timer1(void)
{
TMOD |= 0x20;          //使用模式2,8位定时器,使用"|"符号可以在使用多个定时器时不受影响
TH1=(256-230);              //给定初值,这里使用定时器最大值从0开始计数一直到256溢出自動重載
TL1=(256-230);
EA=1;            //总中断打开
ET1=1;           //定时器中断打开
TR1=1;           //定时器开关打开
}

/*------------------------------------------------
                 定时器0中断子程序
------------------------------------------------*/
void Timer0_isr(void) interrupt 1
{
TH0=00;              //重新给定初值
TL0=00;

OVERFLOWFLAG=1;  //溢出标志

}
/*------------------------------------------------
                 定时器1中断子程序
------------------------------------------------*/
void Timer1_isr(void) interrupt 3
{
static unsigned int i;//自動載入模式
i++;
if(i==400)       //100ms 计数时间单位,得出100ms脉冲个数 x10就是1s中脉冲个数,即为频率 Hz
   {
   i=0;
   TR0=0;        //2个定时器关闭
   TR1=0;
   TIMERFLAG=1;  //标志位清零
   }
}




void DelayUs2x(unsigned char t)
{   
while(--t);
}

void DelayMs(unsigned char t)
{
     
while(t--)
{

     DelayUs2x(245);
         DelayUs2x(245);
}
}





/*------------------------------------------------
                    主程序
------------------------------------------------*/
main()
{
unsigned  long int a;
float sq,LV;
Init_Timer0();      //初始化定时器0
Init_Timer1();      //初始化定时器1

while(1)
{

  if(TIMERFLAG)      //定时100ms到,做数据处理
    {
         a=TL0+TH0*256;//读取计数值
         a=a*25;     //扩大到实际值把顯示的值作校正同實際頻率 25.6
         sq=(a/1000)*(a/1000);//這很重要,不能改成 (a*a/1000000)
         LV=(1000000/(sq*39.4*0.001))-77;//顯示成微亨利單位
         LVint=LV;//change to 整數
         Display_Data_Operation();//把 電感值LV轉成顯示
         TR0=1;                     //2个定时器打开
         TR1=1;
         TH0=0;                     //保证计数器初值为0
         TL0=0;
         TIMERFLAG=0;               //打开计时计数标志
         Display(0,4);
        }
    Display(0,4);
  }
}

//--------------------------------------------------------------------------------------------
void Display_Data_Operation(void)//以時間分秒為共同語言, 數字轉換成7段顯示
{
TempData[3]=dofly_DuanMa[LVint/1000];
if(LVint<1000)//去零顯示
   TempData[3]=0;
TempData[2]=dofly_DuanMa[LVint%1000/100];//
if(LVint<100)
  TempData[2]=0;
TempData[1]=dofly_DuanMa[LVint%100/10];//
TempData[0]=dofly_DuanMa[LVint%10];//
Display(0,4);
}       
//--------------------------------------------------------------------------------------------
void Display(char n,char Num)// 把七段顯示出去,假如Startflag==1 則輸出RELAY,已經不管controlBit了 0516
{
      unsigned char i;
      unsigned char j;
      n=0;
          for(i=0;i<Num;i++)
           {
           DataPort= TempData; //
       DrivePort= dofly_WeiMa[i+j];      
                 DelayMs(15); //減少閃爍
       DataPort=0;
       }
          
}

發表於 2012-11-10 15:51:17 | 顯示全部樓層
antlu 發表於 2012-11-10 03:33 PM static/image/common/back.gif
xiaolaba大:
    哈哈哈!! 有燒進去而且可以動作!!(但是 動作不良!!)  閃爍 無法歸零 ...幫我看看如何!!
...

這是俺剛去下載 https://www.keil.com/download/product/
uVision C51 950

編譯的結果, 和你的 ROM SIZE 有一點分別
  1. Build target 'Target 1'
  2. compiling L-meter.c...
  3. linking...
  4. Program Size: data=28.2 xdata=0 code=1792
  5. "L-meter" - 0 Error(s), 0 Warning(s).
複製代碼
不過俺現在沒有硬件, 很難想像閃爍是怎樣, 請問你有 DEBUGGER 嗎
 樓主| 發表於 2012-11-10 16:44:12 | 顯示全部樓層
我沒有除錯的經驗ㄟ!! DEBUGGER 這是工具嗎?
發表於 2012-11-10 17:05:12 | 顯示全部樓層
8051開機接腳輸出1,89c2051開機接腳好像是輸出0,不知是不是跟這有關?
 樓主| 發表於 2012-11-10 17:11:34 | 顯示全部樓層
單晶片微電腦 發表於 2012-11-10 05:05 PM static/image/common/back.gif
8051開機接腳輸出1,89c2051開機接腳好像是輸出0,不知是不是跟這有關?

這我沒經驗!! 買了10個用很久還有2個!!
發表於 2012-11-10 17:19:18 | 顯示全部樓層
antlu 發表於 2012-11-10 04:44 PM static/image/common/back.gif
我沒有除錯的經驗ㄟ!! DEBUGGER 這是工具嗎?

喔..
那拍個短片來看看如何
發表於 2012-11-10 17:20:00 | 顯示全部樓層
我說錯了,拍謝
發表於 2012-11-10 18:46:11 | 顯示全部樓層
怎麼沒看到你控制繼電器的輸出?你流程好像怪怪的。我覺得應該是<主程式設count/timer的相關設定後,
打開TR0,啟動繼電器(延時一小段時間),第一個脈波進來時,打開TR1。等時間到,關閉TR0 TR1 ,把數據運算完及顯示。第二次要測量之前,清除相關暫存器,再從主程式開始。>
 樓主| 發表於 2012-11-10 19:46:35 | 顯示全部樓層
單晶片微電腦 發表於 2012-11-10 06:46 PM static/image/common/back.gif
怎麼沒看到你控制繼電器的輸出?你流程好像怪怪的。我覺得應該是

一般頻率計應該不需要吧!! 他是連續波!! 所以只要把閘門打開時間到關閉就好了,不是嗎?
 樓主| 發表於 2012-11-10 19:47:55 | 顯示全部樓層
xiaolaba 發表於 2012-11-10 05:19 PM static/image/common/back.gif
喔..
那拍個短片來看看如何

等到 750P電容器拿到再說!! 到時候會改程式!!
發表於 2012-11-10 19:58:44 | 顯示全部樓層
antlu 發表於 2012-11-10 07:46 PM static/image/common/back.gif
一般頻率計應該不需要吧!! 他是連續波!! 所以只要把閘門打開時間到關閉就好了,不是嗎? ...

計數器可以事先打開,但是<計時器>最好等繼電器彈跳消除後,第一個脈波進來時打開,開始計時,
這是時間準確性的問題。就像百米賽跑,槍聲響起才開始計時。槍聲還沒響起之前,選手跟碼錶都不許偷跑。
 樓主| 發表於 2012-11-10 22:17:06 | 顯示全部樓層
單晶片微電腦 發表於 2012-11-10 07:58 PM static/image/common/back.gif
計數器可以事先打開,但是最好等繼電器彈跳消除後,第一個脈波進來時打開,開始計時,
這是時間準確性的 ...

89C2051電路已經大致好了!! 缺 750P電容器(1000P) 但是用信號產生器送信號進去發現現象如下

89C2051  輸入頻率   94KHZ  顯示 386,  輸入頻率   20KHZ  顯示 9681 .

89S52      輸入頻率 238KHZ  顯示 386,  輸入頻率   52KHZ  顯示 9681 .

原因不詳!! 可能要查明 89C2051的相關資料...
發表於 2012-11-10 23:21:30 | 顯示全部樓層
antlu大
看了一下你的問題和前後,我想應該有的地方是你忽略掉的
如果現在你是用stc的mcu和at892051去跑同一個程式時
一般i/o就沒什麼,不過如果你用到計數這個東西時,這兩個會出現不同答案的
因為at和stc兩個的動作週期是不同的,
1個是12t的mcu另一個是1t的mcu,這會出現stc跑的比較快的問題
另,at的mcu以892051上限約在24mhz的xtal
而at89s52應該是上限33mhz,而stc89c52大約在35mhz
如果在取樣太慢或希望跑快一點時,有時提升xtal也是一種方式
不過這個是在量電感,頻率變高反而是越小的電感
電感小到一個程度時就不用太考慮頻率的問題了
單純參考看看

評分

1

查看全部評分

 樓主| 發表於 2012-11-10 23:47:21 | 顯示全部樓層
legion 發表於 2012-11-10 11:21 PM static/image/common/back.gif
antlu大
看了一下你的問題和前後,我想應該有的地方是你忽略掉的
如果現在你是用stc的mcu和at892051去跑同一 ...

LEGION大:
   感謝答覆!!
   89C2051 是1T的處裡器,不知道這訊息哪裡可以查得到? 1T是否意味著 外部T0 信號可以高到6M(假如石英震盪是12M)!! 我使用 89C2051 反而會閃爍(程式裡面 DelayMs(15),是不是只有1.25ms?)
   這樣定時器 Timer1  TH1=(256-230); TL1=(256-230);// 给定初值,这里使用定时器最大值从0开始计数一直到256溢出自動重載,會影響定時嗎? (我當初設定 250us 中断一次).
   
發表於 2012-11-11 00:12:15 | 顯示全部樓層
antlu大
89C2051 是12T的處裡器,stc的89c52才是1T的mcu
所以原始是在stc上的程式要移到89c2051上時要注意速度的問題
而且在stc89c52上的顯示移至2051時會閃爍的話
單純只是89c2051跑的太慢,顯示的更新速度太慢了,
過快則是字不閃,但顯示的亮度會變暗
還有在這里用c和用組合語言答案是不同的
在這里的取樣值可能會差到倍數的,所以要自己試試調整了,
不過我一直在想一個問題,antlu大你是不是都是copy樣版程式套上去用
有時如果自己能花點時間自己建個自己的程式作副程式,
應該就不會發生這類問題了
發表於 2012-11-11 00:14:30 | 顯示全部樓層
關於 閃爍...

void Display(char n,char Num)// 把七段顯示出去,假如Startflag==1 則輸出RELAY,已經不管controlBit了 0516
{
      unsigned char i;
      unsigned char j;
      n=0;
          for(i=0;i<Num;i++)
           {
           DataPort= TempData; //
       DrivePort= dofly_WeiMa[i+j];      
                 DelayMs(15); //減少閃爍
       DataPort=0;
       }
           
}


       DataPort=0; // <---  這是不是每個七段顯示移位顯示的遮沒






void Display(char n,char Num)// 把七段顯示出去,假如Startflag==1 則輸出RELAY,已經不管controlBit了 0516
{
      unsigned char i;
      unsigned char j;
      n=0;
          for(i=0;i<Num;i++)
           {
            DataPort=0; //移到前頭遮沒
           DataPort= TempData; //
       DrivePort= dofly_WeiMa[i+j];      
                 DelayMs(15); //減少閃爍
   //     DataPort=0;
       }
           
}
 樓主| 發表於 2012-11-11 00:43:33 | 顯示全部樓層
SIMON1016 發表於 2012-11-11 12:14 AM static/image/common/back.gif
關於 閃爍...

void Display(char n,char Num)// 把七段顯示出去,假如Startflag==1 則輸出RELAY,已經不管co ...

SIMON1016大:
   這樣可以增加一點時間!! 謝謝!!

 樓主| 發表於 2012-11-11 00:58:23 | 顯示全部樓層
legion 發表於 2012-11-11 12:12 AM static/image/common/back.gif
antlu大
89C2051 是12T的處裡器,stc的89c52才是1T的mcu
所以原始是在stc上的程式要移到89c2051上時要注意速 ...

LEGION大:
   以12T來算 89c2051每一個計數時間 T=12/11059200 ,T=1.08us  那89c52 1t 所以T=0.09us 囉!!
   你建議的 "花時間建立自己的副程式" 我會謹記在心!! 感謝!!
您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

關閉

站長小叮嚀上一條 /1 下一條

禁閉室|手機版|連繫我們|痞酷網電子技術論壇

GMT+8, 2024-11-17 10:29 PM , Processed in 0.181357 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.