Entradas

Mostrando las entradas de 2015

PoC - Controlar un AMux con la señal EoS del SAR ADC PSoC5LP

Imagen
El proposito de este proyecto es controlar las entradas del AMuxHw empleando solamente señales generadas por el hardware interno del PSoC5LP. En este caso lo hice usando una señal que veo poco en los foros de Cypress, es el EoS (End of Sample), cuando esta señal presenta un flanco de subida nos indica que el canal del ADC fue sampleado, pero ¿Por que no usar la señal EoC (End of Convertion)?, como su nombre lo indica, el EoC presenta un flanco de subida cuando la conversion fue terminada, es decir el valor analogo presente en el pin del ADC fue convertido a su valor binario equivalente. Entonces ¿Por que usar el EoS?, como ya vimos la señal EoS presenta un flanco de subida cuando termino el sampleo del canal del ADC, es decir, la diferencia entre la señal EoC y EoS es el tiempo que tarda el ADC en la conversión de analogo a binario, con esto en mente, podemos cambiar la entrada del AMuxHw tenemos la señal EoS, esta entra a trabajar funcionando como clock para un BasicCounter q

¿Como conectar un bus en PSoC Creator?

Imagen
Habia tenido problemas conectando unos pines a un bus, aqui la solución:

PSoC Creator external components

Imagen
Estoy haciendo componentes externos para usarlos en el esquematico de mis proyectos en PSoC Creator, los estaré subiendo en esta repo de GitHub: PSoC_Creator_External_Components. I'm making external components for use it on my PSoC Creator project's schematics, i will upload them on this GitHub repository: PSoC_Creator_External_Components. El primer componente fue un MPU6050, si quieres que haga algun modulo o componente hazmelo saber en los comentario, las instrucciones para añadir el componente a tu proyecto estan en el README del repo. The first component was a MPU6050, if you need help making one external component or module symbol let me know on the comments below, instructions for add the component to your project are in the repository README file. Acá la imagen del componente MPU6050: / Here´s the MPU6050 component image:

PyUSB

Descargamos y descomprimimos el zip que encontramos en su página, abrimos una ventana de comandos dentro de la carpeta y lo instalamos con: >python setup.py install Una vez terminado el proceso checamos que se instalo correctamente: >python Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:44:40) [MSC v.1600 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>>import usb >>> Al no marcar error sabemos que tenemos instalado PyUSB. Para obtener ayuda sobre el modulo: >>>import usb >>>help(usb) Help on package usb: NAME usb - PyUSB - Easy USB access in Python DESCRIPTION This package exports the following modules and subpackages: core - the main USB implementation legacy - the compatibility layer with 0.x version backend - the support for backend implementations. control - USB standard control requests.

Programar CY8CKIT049-42xx con OpenOCD y STLink-v2

Imagen
En sus versiones mas recientes OpenOCD tiene soporte para los microcontroladores PSoC4, usando el STLink-v2 que viene con la tarjeta STM32F4Discovery y conexiones SWD se puede programar la tarjeta CY8CKIT049-42xx. Una vez separado el "programador" que trae la tarjeta de PSoC4, las conexiones son las siguientes: Conexiones SWD entre la STLink-v2 y la CY8CKIT049-42xx Creamos nuestro programa en PSoC Creator, esta vez sin el componente Bootloader, el procedimiento es como si hicieramos un proyecto para la Pioneer Board de PSoC4. En mi caso el proyecto se llama LED, una vez compilado de manera exitosa nos situamos en el directorio de nuestro projecto, ingresamos en la carpeta con extensión .cydsn -> CortexM0 -> ARM_GCC_4xx -> Debug (o Release, dependiendo de como esta configurado el build process), dentro de esta carpeta esta el .hex generado despues de la compilación exitosa, (nombre_del_proyecto).hex, abrimos una ventana de comandos en esa carpeta, conectamos nue

nRF51 Blink | mbed | OpenOCD | ST-Link

Imagen
Otra forma de programar el modulo nRF51 es usando la plataforma de prototipado mbed. Podemos registrar una plataforma de Nordic, ya sea la nRF51822 mKIT o el nRF51 DK, incluso el Dongle, en lo particular no he usado mucho mbed pero para hacer pruebas rapidas viene bien. nRF51822 mKIT Como vemos este tiene dos LEDs: LED1 en P0.18 y LED2 en P0.19, además tiene dos botones de usuario, BTN1 en P0.16 y BTN2 en P0.17. Tambien cuenta con perifericos ya mapeados en pines, como el SPI, I2C, entradas analogicas en P0.1 hasta P0.6. nRF51-DK Este DK tiene cuatro LEDs, LED1 en P0.21, LED2 en P0.22, LED3 en P0.23 y LED4 en P0.24, este ultimo comparte pin con el Slave Select del SPI0, cuenta con cuatro botones, BTN1 en P0.17, BTN2 en P0.18, BTN3 en P0.19 y BTN4 en P0.20, tambien tiene las mismas entradas analogicas de P0.1 hasta P0.06. nRF51 Dongle Este tiene solo un LED RGB, el LED rojo en P0.21, LED verde en P0.22 y LED azul en P0.23 y seis I/O disponibles en uno de los costado

Blink nRF51 | Keil | St Link

Imagen
Siguiendo la tradición hice que un LED haga el famoso blink. La primer prueba la hice con Keil 5, ya que tiene muchos ejemplos para el nRF51422 que viene en el DK oficial, lo único que tiene diferente al nRF51822 es que el primero soporta el protocolo ANT+. Abrimos Keil y presionamos sobre  el Pack Installer: Y nos aparecerá la siguiente ventana: En la parte izquierda abrimos la pestaña de All Devices -> Nordic Semiconductor -> nRF51 Series -> nRF51822_xxAA , esta es la versión del micro que tengo. El código completo del chip es: nRF51822 QFAAH0 1517DE que con ayuda de esta tabla sabemos que revisión es el chip: En mi caso es un nRF51822, empaquetado QFN48 6mm x 6mm, 256 kB de Flash y 16 kB de RAM, y fue fabricado la semana 17 del año 2015. Del lado derecho baje todos los drivers para tenerlos a la mano, y en la pestaña de examples escogí el blink blank PCA10028, esto quiere decir que el ejemplo no depende de un SoftDevice (blank) y que es

nRF51

Imagen
Esta semana llegaron dos modulos del nRF51822 que compré en Ebay . Tardarón exactamente un mes en llegar a México. Hasta el dia de hoy pude checarlos, no tenian ningún cortocircuito, ni fallas en la soldadura :). Por casualidad encontré el que parece ser la Wiki del fabricante de este Core51822 , solo me sirvió para descargar el pdf del esquematico.   No esperaba mucho, solo confirmar que tiene los dos XTALs necesarios. Los unicos pines que no estan mapeados son los P0.26 y P0.27. porque es donde esta conectado el XTAL de 37.768 kHz. Como pueden ver en las etiquetas NC del lado izquierdo de la board es donde deberian estar los pines P0.26 y P0.27 (esto lo digo porque en la parte trasera de la placa estan marcados todos los pines en el silkscreen y ahi están anotados). Para grabar el nRF51 voy a utilizar el ST Link que viene incorporado en una STM32F4 Discovery, aquí las conexiones: !!!Importante recordar que el nRF51822 solo soporta hasta 3.3 V en

SysTick en PSoC 4 y 5LP

Como parte de la documentación de PSoC Creator tenemos el System Reference Guide, dentro de este, en la sección 15, encontramos el System Timer (SysTick), el cual esta presente en los Cortex M0 (PSoC 4) y Cortex m3 (PSoC 5LP). Es un contador descendente con un valor reload/tick de 24-bits, que usa como clock el System Clock, tiene la capacidad de generar una interrupcción cuando el número de ticks expira (se hace cero) y el counter es recargado . Es práctico cuando se necesita de un tiempo preciso y no tenemos un timer o contador disponible para hacer el trabajo. Contamos con los siguientes APIs en el Creator: CySysTickStart() /* Configura e inicia el SysTick timer */ CySysTickInit() /* Inicializa el SysTick Timer */ CySysTickEnable() /* Habilita el SysTick Timer y su interrupción */ CySysTickStop() /* Detiene el SysTick Timer */ CySysTickEnableInterrupt() /* Habilita la interrupción del SysTick Timer */ CySysTickDisableInterrupt() /* Deshabilita la interrupción del SysTick Timer

Nordic nRF51822

Estudiando el SDK 8.1.0

PSoC 5LP y nRF24L01+

Despues de muchos errores de programación pude comunicar dos de estos modulos (al parecer xD) Code sooooon...

Hardware FSM PSoC 4

Imagen
Este es un proyecto basado en una FSM que vi hace unos años, esta implementada con solo HW (hardware) usando unos Community Components que encontré en el foro de Cypress, en concreto los FlipFlops,  aquí los puedes obtener. Esta es la (famosa jaja) FSM que implemente, es una maquina dispensadora de refrescos: En el estado 000 se ilumina el led conectado a la salida de Sol.Mon. (Solicita moneda), cuando la entrada M este en '1' pasa al estado 001 si esta en '0' se quedara haciendo un loop en el estado 000, estando ya en el estado 001 dependemos de la entrada MP, si esta en '1' regresa al estado 000, si esta en '0' pasa al estado 010, estando en el estado 010 checamos la entrada EP (equal price = las monedas suman el precio del refresco), si EP esta en '1' pasa al estado 011 (Se ilumina el led conectado a al pin SIRVE), esperamos a que la entrada MS este en '1' para limpiar la maquina (Se ilumina el led conectado a la salida CLR)

The first ARM processor in the world with Sophie Wilson

Imagen

sprintf en PSoC Creator 3.0 y 3.1

Imagen
Esta función nos ayuda a convertir un dato entero en un string, para después poder imprimirlo con la funcion UART_UartPutString. Para poder usar sprintf  tenemos que añadir primero el header de stdio: #include <stdio.h> Luego si estas en Creator 3.0 Das click derecho en el proyecto. Build Settings ARM GCC Linker Command Line y añades -u_printf_float aplicas y esta listo -u_printf_float en el Command Line Si estas en Creator 3.1 hay un paso adicional descrito en este post en los foros de Cypress. (Por defecto  -u_printf_float ya esta incluido en la newlib-nano Float Formatting del Linker)  Tenemos que incrementar el heap size del proyecto: .cydwr System Heap Size(byte). Por defecto esta en 0x80, lo cambiamos a 0x200 y ya podremos usar el sprintf !! Heap Size por defecto Nuevo Heap Size Informacion sacada de Digitalprojectsudistrital y el foro de Cypress Un video de su aplicacion:

Clock on PSoC 4 digital output pin

Imagen
Tratando de hacer una FSM me di cuenta que no podia poner una señal de Clock directamente en un pin digital de salida en un PSoC 4 (al menos no como pense que podia hacerse). La solución la encontre en este post de hace dos años :| . Y el resultado final queda asi:

PSoC Maker Google Hangout

Imagen

Lab 8, Shape the World "SwitchLEDInterface"

En este Lab se hizo un ejemplo de una alarma, en mi caso recicle codigo que habia usado en los labs anteriores. El jueves pasado (Febrero 19) subieron una noticia, diciendo que este Lab8 y el Lab10 no activarian el scope y daban algunos pasos para poder agregarlo en dichos Labs, esto me dio problemas ya que las funciones del Timer4 no estaban implementadas dentro de una funcion que debiamos de invocar (TExaS_Scope();), asi que no la agregue, al final no influyo en el grader. Los pasos que tenia que seguir el sistema son: • Hacer PE1 salida y PE0 entrada. • Iniciar con el LED encendido (PE1 = 1). • Esperar 100 ms • Al presionar un switch (en mi caso lo llame boton, ubicado en PE0) toggleara el LED ubicado en PE1 cada 100ms. • Repetir los pasos 3 y 4 una y otra vez. Este es parte del codigo (las declaraciones de las funciones estan afuera del main), no era muy dificil, pero por no poder estudiar entre semana se me olvidaron algunas cosas XD. int main(void){ //********

Lab 7, Shape the World

En el laboratorio numero 7 del curso en linea de TI "Shape the World" seguimos haciendo uso de delays, leds y el switch con los que cuenta la placa. La función para generar el delay me causo problemas, aun ignoro el porque, para hacerla funcionar la borre y escribi exactamente lo mismo -.-. Con este codigo obtuve los 45/45 puntos en la simulacion del laboratorio, no lo pude checar en el hardware real ya que no tengo la placa. // 0.Documentation Section // Lab7_HeartBlock, main.c // Runs on LM4F120 or TM4C123 LaunchPad // Input from PF4(SW1) is AS (atrial sensor), // Output to PF3, Green LED, is Ready, // Output to PF1, Red LED, is VT (ventricular trigger) // Make PF4 input, PF3,PF1 output // Initialize Ready to high and VT to low // Repeat this sequence of operation over and over // 1) Wait for AS to fall (touch SW1 switch) // 2) Clear Ready low // 3) Wait 10ms (debounces the switch) // 4) Wait for AS to rise (release SW1) // 5) Wait 250ms (simulates the time b

Iniciando con la KL25Z

Imagen
Primeros pasos con la placa FRDM-KL25Z de Freescale. Tutorial para poder usar la FRDM - KL25Z board en Windows 8.1. Para maquinas con Windows anteriores podemos usar los pasos descritos en el Quick Start package . Igualmente sera muy util tener a la mano el esquematico de la placa, ya sea la Rev E o la Rev  F (solo cambiaron el C12 de 1uF a 0.1uF).

Lab 5, Shape the World

Imagen
Codigo que use en el Lab 5 del curso de TI Shape the World // ***** 0. Documentation Section ***** // main.c // Runs on TM4C123 // UART runs at 115,200 baud rate // Daniel Valvano // June 17, 2013 // Lab 5 // Jon Valvano and Ramesh Yerraballi // November 21, 2013 // ***** 1. Pre-processor Directives Section ***** #include // standard C library #include "uart.h" // functions to implment input/output #include "TExaS.h" // Lab grader functions // ***** 2. Global Declarations Section ***** // FUNCTION PROTOTYPES: Each subroutine defined unsigned long Calc_Area(unsigned long l, unsigned long w); void EnableInterrupts(void); // Enable interrupts // ***** 3. Subroutines Section ***** int main (void) { unsigned long length, width, area; TExaS_Init(UART_PIN_PA0,UART_PIN_PA1); // this initializes the TExaS grader lab 5 UART_Init(); // initialize UART for printing printf("\nThis program calculates areas of rect

PsoC 4xxx

Imagen
Los microcontroladores de Cypress no son tan comunes o no he podido encontrar tanta información como los de otras compañias, pero este blog digitalprojects nos ayuda bastante para dar los primeros pasos con estos micros, usando las placas de entrenamiento como la Psoc 4 (Pioneer) y la Prototyping kit.

Lab 6, Shape the World

En el Lab6 nos piden prender el Led Azul desde la configuración del PORTF. Dentro del main debemos chequear el estado del Sw1, si esta presionado, el Led Azul debe flashear, si no esta presionado el Led debe quedarse encendido. Configuracion del PORTF void PORTF_Init (void){ volatile unsigned long delay; SYSCTL_RCGC2_R |= 0x20; //Enable PORTF clock delay = SYSCTL_RCGC2_R; GPIO_PORTF_AMSEL_R &= (~0x14); //Clear PF4 and PF2 on AMSEL GPIO_PORTF_PCTL_R &= (~0x14); //Clear PF4 and PF2 on PCTL GPIO_PORTF_DIR_R &= (~0x10); //Set PF4 as input, PF2 as output GPIO_PORTF_DIR_R |= 0x04; GPIO_PORTF_AFSEL_R &= (~0x14); //Clear PF4 and PF2 on AFSEL GPIO_PORTF_DEN_R |= 0x14; //Set PF4 and PF2 on DEN GPIO_PORTF_PUR_R |= 0x14; //Set PF4 and PF2 on PUR GPIO_PORTF_DATA_R |= 0x04; //Set PF2 in DATA so the LED is initially ON } Solución al Lab6 del curso Shape the World de T.I. // BranchingFunctionsDelays.c Lab 6 // Ru