Add custom ADC lib - ADC test success
This commit is contained in:
		
							parent
							
								
									6bd766ee41
								
							
						
					
					
						commit
						1fa1149170
					
				| @ -2,7 +2,6 @@ | |||||||
| import os | import os | ||||||
| import sys | import sys | ||||||
| import time | import time | ||||||
| from mcp3208 import MCP3208 |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| # Include custom files | # Include custom files | ||||||
| @ -15,6 +14,7 @@ from interface_board_pins import ADC_CHANNELS | |||||||
| adc = MCP3208() | adc = MCP3208() | ||||||
| 
 | 
 | ||||||
| while True: | while True: | ||||||
|  |         print ("==================") | ||||||
|         for i in range(8): |         for i in range(8): | ||||||
|                 print('ADC[{}]: {:.2f}'.format(i, adc.read(i))) |                 print('ADC[{}]: {:.2f}'.format(i, adc.read(i))) | ||||||
|         time.sleep(0.5) |         time.sleep(0.5) | ||||||
|  | |||||||
							
								
								
									
										53
									
								
								rpi-scripts/interface_board_libs/adc_mcp3208.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								rpi-scripts/interface_board_libs/adc_mcp3208.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,53 @@ | |||||||
|  | import spidev | ||||||
|  | import time | ||||||
|  | 
 | ||||||
|  | class MCP3208: | ||||||
|  |     def __init__(self, bus=0, device=0): | ||||||
|  |         # Initialize SPI bus and device | ||||||
|  |         self.spi = spidev.SpiDev() | ||||||
|  |         self.spi.open(bus, device)  # Default SPI bus 0, device 0 (you can change as needed) | ||||||
|  |         self.spi.max_speed_hz = 1000000  # Adjust based on your needs (e.g., 1MHz) | ||||||
|  |         self.spi.mode = 0b00  # Set SPI mode (Mode 0 for MCP3208) | ||||||
|  |      | ||||||
|  |     def read(self, channel): | ||||||
|  |         """ | ||||||
|  |         Read the ADC value from the specified channel (0-7). | ||||||
|  |         """ | ||||||
|  |         if channel < 0 or channel > 7: | ||||||
|  |             raise ValueError("Channel must be between 0 and 7.") | ||||||
|  | 
 | ||||||
|  |         # MCP3208 sends a 3-byte response, which needs to be processed | ||||||
|  |         # Start with the single bit control byte, followed by the channel selection | ||||||
|  |         # MCP3208 uses 3 bits for the channel: 0-7 | ||||||
|  |         # The command byte looks like this: | ||||||
|  |         # |  Start | Single-ended | Channel (3 bits) | Don't Care (1 bit) | | ||||||
|  |          | ||||||
|  |         # Construct the 3-byte command | ||||||
|  |         # Start bit (1) | Single-ended (1) | Channel (3 bits) | Don't care (1) | End (1) | ||||||
|  |         command = [1, (8 + channel) << 4, 0] | ||||||
|  | 
 | ||||||
|  |         # Send command and receive the 3-byte result | ||||||
|  |         result = self.spi.xfer2(command) | ||||||
|  | 
 | ||||||
|  |         # Combine the result bytes (result is a list of 3 bytes) | ||||||
|  |         # First byte is ignored, we want the 2nd and 3rd bytes for our result | ||||||
|  |         value = ((result[1] & 0x03) << 8) | result[2]  # Convert to 10-bit value (0-1023) | ||||||
|  | 
 | ||||||
|  |         return value | ||||||
|  |      | ||||||
|  |     def close(self): | ||||||
|  |         """Close SPI connection.""" | ||||||
|  |         self.spi.close() | ||||||
|  | 
 | ||||||
|  | # Example usage: | ||||||
|  | if __name__ == "__main__": | ||||||
|  |     adc = MCP3208() | ||||||
|  |     try: | ||||||
|  |         while True: | ||||||
|  |             for i in range(8): | ||||||
|  |                 adc_value = adc.read(i) | ||||||
|  |                 print(f'ADC[{i}]: {adc_value}') | ||||||
|  |             time.sleep(0.5) | ||||||
|  |     finally: | ||||||
|  |         adc.close() | ||||||
|  | 
 | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user