久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3962|回復: 1
打印 上一主題 下一主題
收起左側

我的數字電位器FPGA verilog i2c控制設計 含源碼文檔原理圖

[復制鏈接]
跳轉到指定樓層
樓主
ID:429897 發表于 2019-2-14 14:20 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
數字電位器的型號是tpl0102
我所做的內容是用iSe14.7設計一個i2c,來控制它輸出電阻的大小;
總阻值是100KΩ;
  1. `timescale 1ns / 1ns
  2. //////////////////////////////////////////////////////////////////////////////////
  3. // Company:
  4. // Engineer:
  5. //
  6. // Create Date:    08:59:53 02/12/2019
  7. // Design Name:
  8. // Module Name:    IIC
  9. // Project Name:
  10. // Target Devices:
  11. // Tool versions:
  12. // Description:
  13. //
  14. // Dependencies:
  15. //
  16. // Revision:
  17. // Revision 0.01 - File Created
  18. // Additional Comments:
  19. //
  20. //////////////////////////////////////////////////////////////////////////////////
  21. module IIC(
  22.                 clk_sys,
  23.                 rst_n,
  24.                 //key_wr,
  25.                 //key_rd,
  26.                 eeprom_scl,
  27.                 //led,
  28.                 eeprom_sda
  29. );

  30. input clk_sys;
  31. input rst_n;
  32. //input key_rd;
  33. //input key_wr;

  34. output reg eeprom_scl;
  35. //output [3:0] led;                        

  36. //output reg [7:0] result; //256
  37. //output reg led;

  38. inout  eeprom_sda;

  39. //reg [3:0] led;
  40. reg clk;
  41. reg [7:0] cnt;//256
  42. reg [7:0] state;//256
  43. reg [3:0] counter;//16
  44. reg link_sda;
  45. reg wr;
  46. //reg rd;
  47. reg sda_buf;

  48. reg [7:0] data;
  49. //reg [24:0] Cl; // C1 延時計數器
  50. //wire C1_Clk;   // 產生一個脈動時鐘
  51. //assign Cl_Clk = (Cl == 25'd24999999 ) ? 1 : 0;
  52. assign eeprom_sda = (link_sda)?sda_buf:1'hz;
  53. always @ ( negedge clk_sys or negedge rst_n)
  54.         begin
  55.                 if(!rst_n)
  56.                         begin       
  57.                                 clk <= 0;
  58.                                 cnt <= 0;
  59.                                 //Cl  <= 0;
  60.                         end
  61.                 else
  62.                         begin
  63.                                 if(cnt<249)
  64.                                         cnt <= cnt + 1'b1;
  65.                                 else
  66.                                         begin
  67.                                                 clk <= ~clk;
  68.                                                 cnt <= 0;
  69.                                         end
  70.                                 //if(Cl<25'd24999999)Cl <= Cl + 1'b1;
  71.                                 //else Cl <= 25'd0;
  72.                         end
  73.         end//250*20ns=5000ns=5us=200KHZ;5us*2=10Us=100KHZ;
  74.        
  75. always @(negedge clk or negedge rst_n)
  76.         begin
  77.                 if(!rst_n)
  78.                         begin
  79.                                 eeprom_scl <= 0;
  80.                         end
  81.                 else
  82.                         eeprom_scl <= ~eeprom_scl;
  83.         end//50KHz=20us=20000ns
  84.        
  85. always @ (posedge clk or negedge rst_n)
  86.         begin
  87.                 if(!rst_n)
  88.                         begin
  89.                                 state <= 0;
  90.                                 link_sda <= 0;
  91.                                 sda_buf <= 0;
  92.                                 counter <= 0;
  93.                                 wr <= 1;
  94.                                 //led = 1;
  95.                                 //rd <= 0;
  96.                                 //result <= 0;
  97.                                 data <= 0;
  98.                                 //led <= 4'b0001;
  99.                         end
  100.                 else
  101.                         begin
  102.                                         case(state)
  103.                                                 0:begin
  104.                                                                 wr <= 1;
  105.                                                         if(!eeprom_scl)
  106.                                                                 begin
  107.                                                                         link_sda <= 1;
  108.                                                                         sda_buf <= 1;
  109.                                                                         state <= 1;
  110.                                                                 end
  111.                                                 end
  112.                                                
  113.                                                 1:begin
  114.                                                         if(eeprom_scl)
  115.                                                                 begin
  116.                                                                         sda_buf <= 0;
  117.                                                                         state <= 2;
  118.                                                                         data <= 8'b10100000;
  119.                                                                        
  120.                                                                 end
  121.                                                 end
  122.                                                
  123.                                                 2:begin
  124.                                                         if((counter<8)&&(!eeprom_scl))
  125.                                                                 begin
  126.                                                                         counter <= counter + 1'b1;
  127.                                                                         data <= {data[6:0],data[7]};
  128.                                                                         sda_buf <= data[7];
  129.                                                                 end
  130.                                                         else if((counter == 8)&&(!eeprom_scl))
  131.                                                                 begin
  132.                                                                         counter <= 0;
  133.                                                                         state <= 3;
  134.                                                                         link_sda <= 0;
  135.                                                                 end
  136.                                                         end
  137.                                                        
  138.                                                 3:begin
  139.                                                         if(eeprom_scl)
  140.                                                                 begin
  141.                                                                         if(!eeprom_sda)
  142.                                                                                 begin
  143.                                                                                         state <= 4;
  144.                                                                                         data <= 8'h00;//μ??·
  145.                                                                                 end
  146.                                                                 end
  147.                                                        
  148.                                                 end
  149.                                                
  150.                                                 4:begin
  151.                                                         link_sda <= 1;
  152.                                                         if((counter < 8)&&(!eeprom_scl))
  153.                                                                 begin
  154.                                                                         counter <= counter + 1'b1;
  155.                                                                         data <= {data[6:0],data[7]};
  156.                                                                         sda_buf <= data[7];
  157.                                                                 end
  158.                                                         else if ((counter == 8)&&(!eeprom_scl))
  159.                                                                 begin
  160.                                                                                         counter <= 0;
  161.                                                                                         state <= 5;
  162.                                                                                         link_sda <= 0;
  163.                                                                                         sda_buf <= 1;
  164.                                                                 end
  165.                                                 end//
  166.                                                
  167.                                                 5:begin
  168.                                                         if(eeprom_scl)
  169.                                                                 begin
  170.                                                                         if(!eeprom_sda)
  171.                                                                                 begin
  172.                                                                                         if(wr == 1)
  173.                                                                                        
  174.                                                                                         begin
  175.                                                                                                 state <= 6;
  176.                                                                                         end
  177.                                                                                         data <= 8'b00000101;//
  178.                                                                                 end
  179.                                                                 end
  180.                                                 end
  181.                                                
  182.                                                 6:begin
  183.                                                         link_sda <= 1;
  184.                                                         if((counter < 8)&&(!eeprom_scl))
  185.                                                                 begin
  186.                                                                         counter <= counter + 1'b1;
  187.                                                                    data <= {data[6:0], data[7]};
  188.                                                                         sda_buf <= data[7];
  189.                                                                 end
  190.                                                         else if((counter == 8)&&(!eeprom_scl))
  191.                                                                         begin
  192.                                                                                 counter <= 0;
  193.                                                                                 state <= 7;
  194.                                                                                 link_sda <= 0;
  195.                                                                         end
  196.                                            end
  197.                                                
  198.                                                 7:begin
  199.                                                         if(eeprom_scl)
  200.                                                                 begin
  201.                                                                         if(!eeprom_sda)
  202.                                                                                 state <= 8;
  203.                                                                 end
  204.                                                                                
  205.                                                 end
  206.                                                
  207.                                                 8:begin
  208.                                                         link_sda <= 1;
  209.                                                         sda_buf <= 0;//先拉低,再拉高;
  210.                                                         if(eeprom_scl)
  211.                                                          begin
  212.                                                                 //led <= 0;
  213.                                                                 sda_buf <= 1;
  214.                                                                 state <= 0;
  215.                                                                    //wr <= 0;
  216.                                                                 //led <= 4'b0100;
  217.                                                                 //led[0] <= 1;
  218.                                                                 //led[1] <= 0;
  219.                                                          end
  220.                                                          //if(Cl_Clk)led[3] <= ~led[3];
  221.                                                 end
  222.                                         default : state <= 0;
  223.                                         endcase
  224.                                 end
  225.                 end
  226. endmodule       
復制代碼



tpl0102-ep.pdf

1.07 MB, 下載次數: 27, 下載積分: 黑幣 -5

煉獄傳奇-IIC之戰.pdf

934.5 KB, 下載次數: 26, 下載積分: 黑幣 -5

IIC.zip

232.27 KB, 下載次數: 32, 下載積分: 黑幣 -5

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:15726 發表于 2020-9-13 19:31 | 只看該作者
學習一下IIC知識,感謝分享。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 污书屋 | 免费午夜电影 | 国产精品永久免费视频 | 亚洲高清视频一区二区 | 欧美精品久久一区 | 久久久久国产一区二区三区四区 | 亚洲一区二区av | 国产伦精品一区二区三区在线 | 91精品国产91久久久久久最新 | 性欧美hd | 亚洲日韩欧美一区二区在线 | 国产免费又色又爽又黄在线观看 | 久久国产免费 | 天天操综合网 | 精品九九在线 | www精品美女久久久tv | 国产精品久久久久久久7电影 | 亚洲精品三级 | 999久久久久久久久6666 | 九九热国产视频 | 久久在看 | 精品1区| 久久久久亚洲精品 | 久久久久久久一区 | 亚洲网站在线 | 成人h动漫精品一区二区器材 | 亚洲综合一区二区三区 | 亚洲欧美中文字幕 | 日本久久福利 | av香港经典三级级 在线 | 91精品国产综合久久久亚洲 | 亚洲一区二区在线视频 | 亚洲成人精选 | 亚洲欧洲一区二区 | 性国产xxxx乳高跟 | 黄色成人免费看 | 午夜激情免费 | 天天操人人干 | 国产精品一区二区三区久久久 | 国产视频1区 | 特级做a爱片免费69 精品国产鲁一鲁一区二区张丽 |