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
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
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)
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
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)
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)
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
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)
#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)
#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)