We will be using the Sunfounder Ultimate Raspberry Pi kit in all these lessons. You can pick your kit up HERE. In order to use the ADC0834 Analog to Digital converter in your projects, you must have the following library installed on your system. In order to do this, you need to copy the code below. Then create a new program on your Raspberry Pi, and paste the code. Then the code should be saved as ‘ADC0834.py’ in the SAME folder you will be running your main python program from. Also, you may save the program in the default python library file on the raspberry pi. To do this, you can save the file to:
/usr/lib/python3.7/ADC0834.py
Note the above includes the path and the file name. Using this is a better option, as any program on python3.7 should find the library here.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
#!/usr/bin/env python3 #----------------------------------------------------- # # This is a program for all ADC chip. It # convert analog singnal to digital signal. # # This program is most analog signal modules' # dependency. Use it like this: # `import ADC0834` # `sig = ADC0834.getResult(chn)` # # *'chn' should be 0,1,2,3 represent for ch0, ch1, ch2, ch3 # on ADC0834 # import RPi.GPIO as GPIO import time ADC_CS = 17 ADC_CLK = 18 ADC_DIO = 27 # using default pins for backwards compatibility def setup(cs=17,clk=18,dio=27): global ADC_CS, ADC_CLK, ADC_DIO ADC_CS=cs ADC_CLK=clk ADC_DIO=dio GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) # Number GPIOs by BCM mode GPIO.setup(ADC_CS, GPIO.OUT) # Set pins' mode is output GPIO.setup(ADC_CLK, GPIO.OUT) # Set pins' mode is output def destroy(): GPIO.cleanup() # using channel = 0 as default for backwards compatibility def getResult(channel=0): # Get ADC result, input channel sel = int(channel > 1 & 1) odd = channel & 1 # print("sel: {}, odd: {}".format(sel, odd)) GPIO.setup(ADC_DIO, GPIO.OUT) GPIO.output(ADC_CS, 0) # Start bit GPIO.output(ADC_CLK, 0) GPIO.output(ADC_DIO, 1) time.sleep(0.000002) GPIO.output(ADC_CLK, 1) time.sleep(0.000002) # Single End mode GPIO.output(ADC_CLK, 0) GPIO.output(ADC_DIO, 1) time.sleep(0.000002) GPIO.output(ADC_CLK, 1) time.sleep(0.000002) # ODD GPIO.output(ADC_CLK, 0) GPIO.output(ADC_DIO, odd) time.sleep(0.000002) GPIO.output(ADC_CLK, 1) time.sleep(0.000002) # Select GPIO.output(ADC_CLK, 0) GPIO.output(ADC_DIO, sel) time.sleep(0.000002) GPIO.output(ADC_CLK, 1) time.sleep(0.000002) GPIO.output(ADC_CLK, 0) time.sleep(0.000002) # ODD # GPIO.output(ADC_CLK, 0) # GPIO.output(ADC_DIO, channel) # time.sleep(0.000002) # GPIO.output(ADC_CLK, 1) # GPIO.output(ADC_DIO, 1) # time.sleep(0.000002) # GPIO.output(ADC_CLK, 0) # GPIO.output(ADC_DIO, 1) # time.sleep(0.000002) dat1 = 0 for i in range(0, 8): GPIO.output(ADC_CLK, 1); time.sleep(0.000002) GPIO.output(ADC_CLK, 0); time.sleep(0.000002) GPIO.setup(ADC_DIO, GPIO.IN) dat1 = dat1 << 1 | GPIO.input(ADC_DIO) dat2 = 0 for i in range(0, 8): dat2 = dat2 | GPIO.input(ADC_DIO) << i GPIO.output(ADC_CLK, 1); time.sleep(0.000002) GPIO.output(ADC_CLK, 0); time.sleep(0.000002) GPIO.output(ADC_CS, 1) GPIO.setup(ADC_DIO, GPIO.OUT) if dat1 == dat2: return dat1 else: return 0 def getResult1(): return getResult(1) def loop(): while True: for i in range(4): res = getResult(i) print ('res{} = {}'.format(i,res)) time.sleep(0.1) time.sleep(1) if __name__ == '__main__': # Program start from here setup() try: loop() except KeyboardInterrupt: # When 'Ctrl+C' is pressed, the child program destroy() will be executed. destroy() |