Пример #1
0
def find_DMA_available():
	import RPIO.PWM as PWM
	result = None
	for i in range(0,15):
		if not PWM.is_channel_initialized(i):
			result = i
			break
	if result == None:
		raise ValueError('No DMA channel available, error')
	return result
Пример #2
0
def find_DMA_available():
    import RPIO.PWM as PWM
    result = None
    for i in range(0, 15):
        if not PWM.is_channel_initialized(i):
            result = i
            break
    if result == None:
        raise ValueError('No DMA channel available, error')
    return result
Пример #3
0
    def __init__(self, redPin, greenPin, bluePin):
        if not PWM.is_setup():
            PWM.setup(10,1)

        self.pins = [redPin, greenPin, bluePin]
        a=2
        while PWM.is_channel_initialized(a):
            a=a+1

        self.channels = [a, a+1, a+2]
        for channel_num in self.channels:
            PWM.init_channel(channel_num, subcycle_time_us=10000)
Пример #4
0
def init_pwm(channel, frequency):
    # channel_id = 2
    # channel: pwm['A'][channel_id],  pwm['B']channel_id,  pwm['C']channel_id,  pwm['D']channel_id
    # frequency: Frequency in Hz

    subcycle = (1/frequency)*1000000

    # if not already initialized by other pwms initialize channeç
    if not(PWM.is_channel_initialized(channel)):
        PWM.init_channel(channel, subcycle)

    # Test initialization
    if not(PWM.is_channel_initialized(channel)):
        print("ERROR: Channel could not be initialized!")
        return -1

    # Test Frequency
    if not(PWM.get_channel_subcycle_time_us(channel) == subcycle):
        print("ERROR: Frequency could not be setted!")
        return -1

    return 1
Пример #5
0
    def getFreePwmChannel(self):

        availableDmaChannels = {9, 10, 11}

        try:
            for channel in availableDmaChannels:
                if PWM.is_channel_initialized(channel) == 0:
                    return channel

            raise Exception("No uninitialized DMA channel available.")

        except Exception, exception:
            print exception
            exit(0)
Пример #6
0
    def __init__(self, channel=PWM_CHANNEL, pin=PWM_PIN, subcycle=PWM_SUBCYCLE, unit=PWM_UNIT):
        self._channel = channel
        self._pin = pin
        self._subcycle = subcycle
        self._range = int(subcycle / unit)

        if not PWM.is_setup():
            PWM.set_loglevel(PWM.LOG_LEVEL_ERRORS)
            PWM.setup()
            # work around bug in RPIO.PWM, https://www.raspberrypi.org/forums/viewtopic.php?p=509549
            signal.signal(signal.SIGCHLD, signal.SIG_IGN)

        if not PWM.is_channel_initialized(self._channel):
            PWM.init_channel(self._channel, self._subcycle)
Пример #7
0
    def getFreePwmChannel(self):

        availableDmaChannels = {9, 10, 11}

        try:
            for channel in availableDmaChannels:
                if PWM.is_channel_initialized(channel) == 0:
                    return channel

            raise Exception("No uninitialized DMA channel available.")

        except Exception, exception:
            print exception
            exit(0)
Пример #8
0
def main():
    # Set up Frequency in Hertz
    FREQUENCY = 1000
    SUBCYCLE_US = ((1 / FREQUENCY) * 1000000)
    CHANNEL = 0

    # Set duty_cycle 0 -> 100
    DUTY_CYCLE = 50

    # Set Pin
    PINO = PIN.CEL_A_1

    # Setup PWM and DMA channel 0
    PWM.setup()
    PWM.init_channel(channel=CHANNEL, subcycle_time_us=SUBCYCLE_US)

    # Test initialization
    if not (PWM.is_channel_initialized(CHANNEL)):
        print("ERROR: Channel could not be initialized!")
        return -1

    # Test Frequency
    if not (PWM.get_channel_subcycle_time_us(CHANNEL) == SUBCYCLE_US):
        print("ERROR: Frequency could not be setted!")
        return -1

    # Add pwm Pulse
    PWM.add_channel_pulse(dma_channel=CHANNEL,
                          gpio=PINO,
                          start=0,
                          width=((SUBCYCLE_US / 10) * (DUTY_CYCLE / 100)))

    # fake while
    print("Press any key to stop")
    input()

    # Stop PWM for specific GPIO on channel 0
    PWM.clear_channel_gpio(0, PINO)

    # Shutdown all PWM and DMA activity
    PWM.cleanup()

    return 0
Пример #9
0
    def start(self):
        if not PWM.is_setup():
            PWM.setup()
        if not PWM.is_channel_initialized(0):
            PWM.init_channel(0)

        #same as look_forward() without clearing first
        PWM.add_channel_pulse(0, self.pPanL, 0, self.pan_centerL)
        PWM.add_channel_pulse(0, self.pTiltL, 0, self.tilt_centerL)
        PWM.add_channel_pulse(0, self.pPanR, 0, self.pan_centerR)
        PWM.add_channel_pulse(0, self.pTiltR, 0, self.tilt_centerR)

        RPIO.setup(self.pPanicBtn, RPIO.IN)
        RPIO.add_interrupt_callback(self.pPanicBtn,
                                    edge='falling',
                                    pull_up_down=RPIO.PUD_UP,
                                    callback=self.cb_panic,
                                    debounce_timeout_ms=200)
        RPIO.wait_for_interrupts(threaded=True)
Пример #10
0
#set della granularity (è il default durante l'inizializzazione tic di incremento in microsecondi)
PWM.setup(granularity, 0)			#default: pulse_incr_us=10, delay_hw=0

for i in canale_dma:
	PWM.init_channel(i, subcycle_time[i])	#canale DMA con tempo subcycle
#	PWM.setup(granularity, 0)		#default: pulse_incr_us=10, delay_hw=0
	#aggiungo un impulso nel canale DMA all'interno di ogni subcycle per ogni GPIO
	#POSSO ANCHE NON AGGIUNGERE NIENTE :-), VOLENDO.
	PWM.add_channel_pulse(i, gpio_port[i], pulse_start[i], pulse_width[i])
#setup per output su GPIO
for i in gpio_port:
	RPIO.setup(i, RPIO.OUT)

for i in canale_dma:
	PWM.print_channel(i) 
	if PWM.is_channel_initialized(i):
		print ("canale ", i, " inizializzato")
	else:
		print ("canale ", i, " NON inizializzato")
	if PWM.is_setup():
		print ("setup canale ", i, "chiamato")
	else:
		print ("setup canale ", i, " NON chiamato")

try:
    while True:
	# LED per vedere se tutto funziona
	for t in led_time:
		for i in gpio_port:
			RPIO.output(i, RPIO.HIGH)
			sleep(t)
Пример #11
0
	#aggiungo un impulso nel canale DMA all'interno di ogni subcycle per ogni GPIO
	#POSSO ANCHE NON AGGIUNGERE NIENTE :-), VOLENDO.
#	PWM.add_channel_pulse(i, gpio_port[i], pulse_start[i], pulse_width[i])

PWM.add_channel_pulse(0, gpio_port[0], pulse_start[0], pulse_width[0])
PWM.add_channel_pulse(1, gpio_port[1], pulse_start[1], pulse_width[1])
PWM.add_channel_pulse(2, gpio_port[2], pulse_start[2], pulse_width[2])
PWM.add_channel_pulse(3, gpio_port[3], pulse_start[3], pulse_width[3])

#setup per output su GPIO
for j in gpio_port:
	RPIO.setup(j, RPIO.OUT)

for k in canale_dma:
	PWM.print_channel(k) 
	if PWM.is_channel_initialized(k):
		print ("canale ", k, " inizializzato")
	else:
		print ("canale ", k, " NON inizializzato")
	if PWM.is_setup():
		print ("setup canale ", k, "chiamato")
	else:
		print ("setup canale ", k, " NON chiamato")

try:
    while True:
	# LED per vedere se tutto funziona
	for t in led_time:
		for p in gpio_port:
			RPIO.output(p, RPIO.HIGH)
			sleep(t)