def ain(n): numsamples = 65536 capture = adc.Capture() capture.cap_delay = 100 capture.oscilloscope_init( adc.OFF_VALUES + n, numsamples) # captures AIN0 - the first elt in AIN array #capture.oscilloscope_init(adc.OFF_VALUES+4, numsamples) # captures AIN1 - the third elt in AIN array capture.start() start = time.time() for _ in range(10): if capture.oscilloscope_is_complete(): break print '.' time.sleep(0.1) print "conversion consume time:", time.time() - start capture.stop() #print 'Saving oscilloscope values to "data.csv"' #for x in capture.oscilloscope_data(numsamples): #print x #print 'done' capture.close()
def init_capture(threshold0, threshold1, delay=0): capture = adc.Capture() capture.encoder0_pin = 0 # AIN0, aka P9_39 capture.encoder1_pin = 2 # AIN2, aka P9_37 capture.encoder0_threshold = threshold0 capture.encoder1_thredhold = threshold1 capture.encoder0_delay = delay capture.encoder1_delay = delay capture.start() yield capture capture.stop() capture.wait() capture.close()
def captureData(self): capture = adc.Capture() if self.delayADC != 0: capture.cap_delay = self.delayADC capture.oscilloscope_init(adc.OFF_VALUES, self.numSamples) # captures AIN0 - the first elt in AIN array capture.start() while(True): if capture.oscilloscope_is_complete(): break capture.stop() capture.wait() #print("Buffer atualizado com %d amostras."%(self.numSamples,)) self.captureSamples = capture.oscilloscope_data(self.numSamples) capture.close()
def captureData(self): capture = adc.Capture() bus = smbus.SMBus(1) data = [0x84, 0x83] bus.write_i2c_block_data(0x48, 0x01, data) i = 0 time.sleep(0.5) actual_time = time.clock() if self.delayADC != 0: capture.cap_delay = self.delayADC capture.oscilloscope_init( adc.OFF_VALUES, self.numSamples) # captures AIN0 - the first elt in AIN array capture.start() captureSamplesBuffer = [] internalADC_complete = False externalADC_complete = False while (True): if (externalADC_complete == False): data = bus.read_i2c_block_data(0x48, 0x00, 2) raw_adc = data[0] * 256 + data[1] if (i < self.numSamplesExternal): captureSamplesBuffer.append(raw_adc) else: self.captureSamplesExternal = tuple(captureSamplesBuffer) del captureSamplesBuffer[:] captureSamplesBuffer = [] i = 0 externalADC_complete = True if (capture.oscilloscope_is_complete() and internalADC_complete == False): internalADC_complete = True if (externalADC_complete and internalADC_complete): break time.sleep(self.delayCapture / 1000) capture.stop() capture.wait() print("Buffer atualizado com %d amostras." % (self.numSamples, )) self.captureSamples = capture.oscilloscope_data(self.numSamples) capture.close()
def __init__(self, config): # Initialize ADC self._adc = adc.Capture() self._adc.encoder0_pin = config.MOTOR_LEFT['encoder_pin'] self._adc.encoder1_pin = config.MOTOR_RIGHT['encoder_pin'] self._adc.encoder0_threshold = config.MOTOR_LEFT['encoder_threshold'] self._adc.encoder1_threshold = config.MOTOR_RIGHT['encoder_threshold'] self._adc.encoder0_delay = config.MOTOR_LEFT['encoder_delay'] self._adc.encoder1_delay = config.MOTOR_RIGHT['encoder_delay'] self._adc.ema_pow = config.EMA_POW self._ir_pins = config.IR_PINS self._scale = 2**config.EMA_POW self.timer = 0 self.speed_left = 0 self.speed_right = 0 self.enc_ticks_left = 0 self.enc_ticks_right = 0 self.values = tuple([0] * len(self._ir_pins))
import beaglebone_pru_adc as adc import time import struct numsamples = 65536 # how many samples to capture capture = adc.Capture() capture.oscilloscope_init( adc.OFF_VALUES, numsamples) # captures AIN0 - the first elt in AIN array #capture.oscilloscope_init(adc.OFF_VALUES+8, numsamples) # captures AIN2 - the third elt in AIN array capture.start() for _ in range(10): if capture.oscilloscope_is_complete(): break print('.') time.sleep(0.1) capture.stop() capture.wait() print('Saving oscilloscope values to "data.raw"') with open('data.raw', 'wb') as f: for x in capture.oscilloscope_data(numsamples): data = struct.pack('H', x) f.write(data) print('done')
class encoder: ladc1 = 0 ladc2 = 0 step = 0 freq = 100000 place = 0 last = 0 lastseq = 0 deg_inc = 360.0 / 1000 / 8 callback = None storage = None prog_start = None capture = adc.Capture() def adc1(self): if self.ladc1 == 0 and self.capture.values[0] > 1500: self.ladc1 = 1 return self.ladc1 elif self.ladc1 == 1 and self.capture.values[0] < 1000: self.ladc1 = 0 return self.ladc1 else: return self.ladc1 def adc2(self): if self.ladc2 == 0 and self.capture.values[2] > 1500: self.ladc2 = 1 return self.ladc2 elif self.ladc2 == 1 and self.capture.values[2] < 1000: self.ladc2 = 0 return self.ladc2 else: return self.ladc2 def __init__(self, callback, storage): self.capture.start() self.storage = storage self.callback = callback self.prog_start = time.time() self.run() def run(self): while True: # time.sleep(1.0/self.freq) vadc1 = self.adc1() vadc2 = self.adc2() #aadc1 = ADC.read("P9_37") #aadc2 = ADC.read("P9_38") seq = (vadc1 ^ vadc2) | (vadc2 << 1) if self.lastseq == seq: continue else: if self.lastseq == 0: if seq == 1: self.step = -1 if seq == 3: self.step = 1 self.lastseq = seq self.last = self.place self.place += self.step self.callback(self.place * self.deg_inc, self.storage, self.prog_start) #self.callback((seq, self.place, aadc1 , aadc2, vadc1, vadc2 ), self.storage, self.prog_start) #A B SEQ #0 0 00 LOW #0 1 11 B leads A #1 0 01 A leads B #1 1 10 HIGH
import beaglebone_pru_adc as adc import time import collections import sys import config from robot.motor import Motors if __name__ == '__main__': print 'Capturing IR values, wait 5 seconds\n', adc = adc.Capture() adc.ema_pow = 10 scale = 2**10 ir_pins = config.IR_PINS adc.start() stat = collections.defaultdict(list) time.sleep(0.1) for _ in range(1000): if _ % 200 == 199: sys.stdout.write('.') sys.stdout.flush() time.sleep(0.005) values = adc.values for i, pin in enumerate(ir_pins): stat[i].append(values[pin] / scale)
import beaglebone_pru_adc as adc #Importa a biblioteca como o objeto adc numsamples = 1000000 # capture = adc.Capture() #cria o objeto Capture, filho de ADC #capture.oscilloscope_init(No do registrador do ADC, No de amostras) capture.oscilloscope_init(adc.OFF_VALUES, numsamples) #Método de capture para configurar o modo osciloscópio #adc.OFF_VALUES <- Atributo de adc que representa o endereço de memória do ADC0 capture.start() #Método de capture que inicia a captura while True: if capture.oscilloscope_is_complete(): #capture.oscilloscope_is_complete() <- Método para verificar se o todas as amostras foram capturadas break capture.stop() #Método para parar a captura de dados e finalizar o arquivo do PRU capture.wait() #Método que espera o programa do PRU ser finalizado print capture.oscilloscope_data(numsamples) #Método que retorna uma tupla com as amostras salvas na memória RAM Capture.close() #Método para liberar os dados da RAM para o sistema operacional #Outros atributos de capture Capture.ema_pow #Se for diferente de 0, aplica um filtro EMA (Exponential moving average), cuja fórmula é ema += (value - ema / 2^ema_pow), por padrão é desativado Capture.cap_delay #Atributo que define a taxa de amostragem. Valor padrão é 0, ou seja. É aplicado um loop no código assemble do PRU