Seguimos esta vez usando otras de las características de PSoC y son sus bloques digitales UDB.
Lo que haremos será hacer parpadear el LED de la tarjeta CY8CKIT-059 con un periodo de señal de 1 segundo y un ciclo útil del 50%.
Para esto vamos a usar un PWM que lo pueden encontrar en Digital->Functions->PWM y lo traemos a nuestro diagrama esquemático:
Y de este bloque vamos a explicar todas sus terminales.
Como entradas tenemos el pin de reset, este reset funciona por hardware, basta solo con darle un pulso para que el PWM vuelva a sus condiciones iniciales, por lo cual como no necesitamos hacer reset del PWM mediante hardware vamos a conectar un 0 lógico a este pin que se encuentra en Digital->Logic->Logic Low '0' lo ponemos en el esquemático y mediante el wire tool lo conectamos.
La otra entrada es el reloj o clock, de aquí partirá nuestro PWM para hacer sus "cuentas".
Un PWM funciona contando pulsos de el reloj que nosotros asignemos, uno de los parámetros mas importantes es el periodo que hace referencia a el numero de cuentas que tiene que hacer del reloj para que marque un periodo en la señal.
Por esto buscaremos un reloj en system->Clock, lo añadimos a nuestro esquemático y le damos doble clic para configurarlo:
Una características de los reloj es que lo podemos configurar a la frecuencia que nosotros queramos, en este caso le dejaré el nombre "Clock" y le pondré una frecuencia de 250Hz y les voy a explicar por que:
En la parte de abajo del PWM dice 8-bit, esto hace referencia a el numero de cuentas que es capaz de realizar o el periodo máximo, este PWM es configurable de 8 a 16 bits y tenemos que para 8 bits el periodo máximo es de 2^8 = 256 (255 comenzando en 0) y para 16 bits es 2^16=65536 (65535 comenzando en 0).
Pero si nuestro PWM funciona con la variable "periodo" que hace referencia a el numero de cuentas que tiene que hacer para marcar un nuevo periodo de la señal, ¿como sabemos cual es el valor de esa variable para que nuestro PWM nos entregue una señal de 1 segundo?. Para eso esta la ecuación.
En donde CLK es el reloj del PWM, Frec es la frecuencia que queremos en nuestra señal de salida que para este caso es de 1 Hz (este parámetro tiene que estar en Hz), y cuenta es nuestra variable "periodo".
Para nuestro ejemplo voy a reemplazar en la ecuación el CLK por los 250Hz del reloj que añadí y Frec por 1 Hz que es la frecuencia que quiero en mi señal de salida. Como resultado obtengo que Cuenta = 250, 250 esta dentro del rango de cuenta máxima del PWM configurado a 8-bits lo cual es lo que queríamos.
Con nuestra variable "periodo" definida daremos doble clic a el PWM para configurarlo:
El PWM tiene varios modos y para este ejemplo vamos a dejarlo en One Output que nos proporciona solamente una salida de PWM.
La resolución la dejaremos a 8 bits. Donde dice period pondremos el valor de nuestra variable periodo que fue de 250 para 1 segundo.
CMP Value hace referencia a el ciclo útil de la señal, para este ejemplo queremos un ciclo útil del 50% de la señal representada por la variable "periodo", entonces 250*0.5= 125 y ese es el valor de CMP Value.
El resto de parámetros para este ejemplo se dejarán por defecto, aplicamos los cambios y aceptamos.
Ahora solo nos falta conectar un pin digital de salida a el pin pwm:
Teniendo esto se ha terminado el diagrama esquemático.
Ahora pasamos a el main.c
Aquí solo tenemos que indicar el Start del PWM nada mas, como lo indica el codigo C adjunto.
Lo único que nos queda es en el archivo de asignación de pines decir que el led esta en el P2.1, Compilar y programar.
Videos sobre PSoC en español
https://www.youtube.com/c/PSoCProjects
Comments