RoadTest: Cypress PSoC4 Pioneer kit
Evaluation Type: Evaluation Boards
Did you receive all parts the manufacturer stated would be included in the package?: True
What other parts do you consider comparable to this product?:
What were the biggest problems encountered?: C source code editor has no auto-complete- (update: the current version does have autocomplete, and much more)
I was eager to give this Cypress PSoC4 Pioneer Kit a try. I'd spent a couple years getting to know a dozen different project boards and processors from TI, Freescale, NXP, Infineon, Silicon Labs, ST Micro, Renesas, Atmel, and so on... While each had differing strong points that set them apart for a unique situation, ultimately I found few functionally or technically compelling reasons to prefer a particular brand's microprocessor. The toolsets are what set each apart for me. I tended to spend most time with the MCUs that had the most convenient IDE that made discovering and accessing the features visually clear and easy. It was time to see if Cypress' PSoC system really had something substantial over a “plain” MCU – as this video suggests:
Overview of workflow - http://www.cypress.com/psoc/video.cfm?video=17
To try out its unique abilities I perused the Component Catalog with 139 items. I was initially drawn by the OpAmps available, but captured by the possibilities of the Look Up Table (LUT) component. The LUT can implement up to a 5 input 8 output truth table. As I'd recently been studying various implementations of state machines in software, I was struck by the simplicity of implementing this in hardware with a very simple interface. So, that settled it – a simple application using the LUT.
Certainly, there are more flexible/cheaper methods of implementing a two digit voltmeter, but I had a bunch of old 7-segment LED displays littering my parts bin, and the 5x8 truth table simply handled the translation of hex values to appropriate combinations of LED segments to light up for each digit.
I immediately appreciated the Arduino pin compatibility and I happened to have a few proto-boards to drop in and begin. Primarily I've got two 7-segment displays in place, with discrete surface mount resistors on the back. The 9-pin serial level shifter is connected to a GPIO pin which I have internally connected to Serial TX component for sending out a stream of data. The other part on the board is a differential pressure sensor that I used to give me something to measure with the ADC SAR component in the PsoC.
The next bit I appreciated was the practically any-to-any pin mapping available in the PSoC. This let me solder pins, one after the other to the next GPIO pin, to the LED segments. I just used the diode setting on my multimeter to identify which segments ended up connected to which port and pin numbers that I identified from the Pioneer Kit Guide. The board silk also indicates pin # on the back.
The Design sheet of the project let me layout all the Digital Output Pin components in a way that helped me to recognize where pins were connected. The green boxes behind are just indications to make the segment assignments clearer. The green circle indicates the decimal point, which I have pulled down with a Logic Low component to simply keep it on. I named each pin according to the port and pin to which the LUT output should ultimately connect.
The LUT configuration pane is plain and simple. If any help is needed, as on any component configuration pane, the Datasheet button is always there. You can see how I've set up mine, for any hex value on the inputs, the outputs for the appropriate segments are pulled low to illuminate the correct digit on the display.
Notice how the Control Register component is connected to the LUT inputs. The Control Register is what is used by the software running on the ARM core to send data out to the hardware. Simply by writing the desired hex value to my instance of a Control Register that I have named Display_Data, the corresponding digits are displayed on the pair of 7-segment LED displays.
And here we see the final connection from the components to the actual hardware pins: a super simple selection from a drop down list to match the name that I had given the Output Pin components.
This ADC SAR component is used to read the analog value of pin 1 on port 2. I have it reduced, from four, to a single input, and sampling continuously and reporting a cumulative average every 256 samples. Each time a reading is complete, the eoc pin will emit a pulse that I have triggering my instance of the Interrupt component called isr_DataReady.
PSoC Creator generates the code for the API to access the hardware that you've laid out. To determine the API you've got to work with, look under the “Generated_Source” section in the Workspace Explorer of the project. In my case I wanted to put some code into my ISR for the ADC. With a few lines of code I'm reading data from ADC, transmitting it out a serial port, and displaying it on a physical display. (I know, I'm not actually writing hex into the Control Register. This is just an example.) This example also required four lines in main.c to initialize the hardware components.
Now that we get to the coding, I must mention the first and only wart that I've found: the editor provides no autocomplete while typing. Luckily the API and all the datasheets are so convenient – and I actually learn other useful details in the datasheets – but I still expect to have autocomplete.
In conclusion: Cypress' PSoC system does live up to the claims and this PSoC4 Pioneer Kit has become my new favorite board. It has a stunning amount of utility for a $25 board with two powerful PSoC parts and a great IDE to access all that power easily.