|  | 
          11樓
          巨大八爪鱼
          2014-9-30 23:30
          
          
            以下就是我獲得的我的遙控器發射的電平,我做了一點修改而已   | 
    
      |  | 
          12樓
          巨大八爪鱼
          2014-9-30 23:34
          
          
            以下為根據bin文件生成波形圖的php程序代碼:【portcheck.php】
 <?php
 /* 根據EEPROM內容生成I/O口波形圖像
 * 作者:巨大八爪魚
 * 時間:2013年9月30日15:08:06
 **/
 define("US_PER_PX",50); //每像素表示多少微秒
 define("FILENAME","錯誤的紅外發射.bin");
 header("Content-type:image/png");
 
 function BIT($n)
 {
 return 1<<$n;
 }
 
 $file=fopen(FILENAME,"rb"); # 打開文件
 $time=fread($file,480); # 持續時間
 $port_states=fread($file,30); # 高低電平標識
 fread($file,1); # 該位始終是0x3d,跳過
 $length=ord(fread($file,1)); # 長度
 
 # 計算圖片寬度
 $width=0;
 for ($i=0;$i<$length;$i++)
 {
 $t=ord($time[$i*2])*256+ord($time[$i*2+1]);
 $width+=$t;
 }
 $width=ceil($width/US_PER_PX);
 
 $im=imagecreatetruecolor($width,64);
 $back_color=imagecolorallocate($im,251,252,205);
 imagefill($im,10,5,$back_color); # 背景顏色
 
 $color=imagecolorallocate($im,0,64,0);
 $x=$y=0;
 for ($i=0;$i<$length;$i++)
 {
 $lasty=$y;
 $y=10;
 if (ord($port_states[(int)floor($i/8)])&BIT($i%8))
 $y=50; # 如果該位是高電平
 
 # 電平發生跳變時加豎線
 if ($y!=$lasty && $i>0)
 imageline($im,$x,11,$x,49,$color);
 
 # 從第二個電平開始更換顏色
 if ($i==1)
 $color=imagecolorallocate($im,0,0,128);
 
 $t=ord($time[$i*2])*256+ord($time[$i*2+1]);
 $t/=US_PER_PX;
 imageline($im,$x,$y,$x+$t,$y,$color); # 繪製水平線
 $x+=$t;
 }
 
 fclose($file);
 
 imagepng($im);
 imagedestroy($im);
 ?>
 
   | 
    
      |  | 
          13樓
          巨大八爪鱼
          2014-9-30 23:34
          
          
            1.EEPROM倒數第二位在該版本程序中恆為0x3d,這是版本識別碼,將來的版本會改變這個識別碼2.把「18b20單總線信號.bin」燒寫回EEPROM,然後打開單片機,就會發現第142、143、144等多個連續的id號是相同的。通常如果電平變化得太快,小於1us,那麼就會出現這種情況。所以程序中port_states數組還是很有必要設置的。
 3.默認在php繪圖的時候每像素表示100us,如果繪出的圖形太密,比如像「18b20單總線信號_100ms.png」那樣,那麼請減小US_PER_PX常量的值,比如設為1us,出來的效果就是「18b20單總線信號_1ms.png」
   | 
    
      |  | 
          14樓
          巨大八爪鱼
          2014-9-30 23:38
          
          
            回覆:12樓簡單說一下這個php程序的使用方法,在自己的電腦上安裝php開發環境(相關資料見php吧),然後把這個php文件放進去
 然後用ISP線連接電路板和電腦,打開AVR Fighter,讀取EEPROM並保存為bin文件,把這個bin文件放入php文件所在的文件夾,把這個bin文件命名為「錯誤的紅外發射.bin」,當然文件名可以隨便取,別忘了改相應的php程序的第7行的那個FILENAME常量的值。
 用瀏覽器訪問這個php頁面,就可以得到電平圖像了。
 
   | 
    
      |  | 
          15樓
          巨大八爪鱼
          2014-9-30 23:40
          
          
            以下為我通過這個工具得到的一些波形圖: 18b20單總線信號_1ms   | 
    
      |  | 
          16樓
          巨大八爪鱼
          2014-9-30 23:41
          
          
            回覆:15樓 這個圖像太寬了,沒法直接看,請右鍵另存到本地再看  | 
    
      |  | 
          17樓
          巨大八爪鱼
          2014-9-30 23:42
          
          
            18b20單總線信號_5ms:   | 
    
      |  | 
          18樓
          巨大八爪鱼
          2014-9-30 23:42
          
          
            18b20單總線信號_100ms:   | 
    
      |  | 
          19樓
          巨大八爪鱼
          2014-9-30 23:42
          
          
            某51單片機程序P0某口的波形2:   | 
    
      |  | 
          20樓
          巨大八爪鱼
          2014-9-30 23:47
          
          
            以下就是一個典型的遙控器發射的波形:  可以用畫圖軟件量出來,引導碼是9ms高電平4.5ms低電平,然後一堆用戶碼和鍵碼,最後用引導碼和短碼表示重複按鍵  |