Exemplo n.º 1
0
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()
Exemplo n.º 2
0
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()
Exemplo n.º 3
0
    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()
Exemplo n.º 5
0
    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))
Exemplo n.º 6
0
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')
Exemplo n.º 7
0
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
Exemplo n.º 8
0
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)
Exemplo n.º 9
0
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