Advertisement
Sidsh

ADC Documented 2.0

Mar 3rd, 2022
295
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.  
  3. *Team Id:           SM#2349
  4. *Author List:       (Premraj,Siddesh,Viraj,Siddharth)
  5. *Filename:          ADC
  6. *Theme:             Soil Monitoring Bot
  7. *Input:             (clk_1, dout, reset)
  8. *Output:                (adc_cs_n, din, adc_sck, S1, S2, S3)
  9.        
  10. */
  11. module ADC(
  12.     input  clk_1,               //50 MHz clock                                   PIN_R8
  13.     input  dout,                //digital output from ADC128S022 (serial 12-bit) PIN_A9
  14.     input reset,
  15.     output adc_cs_n,            //ADC128S022 Chip Select                         PIN_A10
  16.     output din,                 //Ch. address input to ADC128S022 (serial)       PIN_B10
  17.     output reg adc_sck,         //2.5 MHz ADC clock                              PIN_B14
  18.    
  19.     output S1,
  20.     output S2,
  21.     output S3
  22. );
  23.  
  24. reg [8:0]d1 = 9'b111011101;   //register to store channel adresses
  25. reg [1:0]din_r = 0;           //register to store current adress output
  26.  
  27. reg d5 = 0;                         //If line detected, value of d5 is high for sensor 1
  28. reg d6 = 0;                         //If line detected, value of d6 is high for sensor 2
  29. reg d7 = 0;                         //If line detected, value of d7 is high for sensor 3
  30. reg [5:0]c = 0;
  31.  
  32. //---------Assigning chip select pin---------
  33. assign adc_cs_n = 0;
  34.  
  35. //---------Scale the clock from 50 to 2.5 MHz---------
  36.    
  37. always @(negedge clk_1)begin
  38.    
  39.     if(reset == 0)
  40.      begin
  41.         c <= 0;
  42.      end
  43.     else
  44.     begin
  45.         if(c == 47)begin
  46.         c <= 0;
  47.         end else begin
  48.         c <= c + 1;
  49.         end
  50.     end
  51.    
  52.     if(reset == 0)
  53.      begin
  54.         din_r <= 0;
  55.      end
  56.  
  57.     case(c)                                 //To store channel address
  58.     1:din_r <= d1[0];
  59.     2:din_r <= d1[1];
  60.     3:din_r <= d1[2];
  61.    
  62.     17:din_r <= d1[3];
  63.     18:din_r <= d1[4];
  64.     19:din_r <= d1[5];
  65.    
  66.     33:din_r <= d1[6];
  67.     34:din_r <= d1[7];
  68.     35:din_r <= d1[8];
  69.     default din_r <= 0;
  70.     endcase
  71.    
  72. end
  73.  
  74. assign din = din_r;
  75.    
  76.    
  77. always @(posedge clk_1)begin
  78.  
  79.     if(reset == 0)
  80.      begin
  81.         d5 <= 0;            //Resetting value of d5
  82.         d6 <= 0;                //Resetting value of d6
  83.         d7 <= 0;                //Resetting value of d7
  84.  
  85.      end
  86.      
  87.     case(c)                 //if threshold value >2000, one assigned channel bit will be high. And the line will be detected
  88.     4:d7 <= dout;           //assigning value of dout to d7
  89.    
  90.     20:d5 <= dout;          //assigning value of dout to d5
  91.  
  92.     36:d6 <= dout;          //assigning value of dout to d6
  93.  
  94.     endcase
  95.    
  96. end
  97.  
  98. assign data_frame = c;
  99.  
  100. assign S1 = d5;
  101. assign S2 = d6;
  102. assign S3 = d7;
  103.    
  104.  
  105. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement