A few months ago, I posted about my PSoC Pioneer 4200 board. I was impressed then and I still am; but I am now ready to reveal the however...
Entire post here: http://www.hackster.io/rayburne/psoc-4-the-arduino-killer
Summary of my 90 days at the current time:
UPDATE: My view after 90 days...
I am a hobbyist; I am not presently working on any commercial projects. Essentially, I am retired and just playing with the PSoC. I have a couple of years of PIC experience and 3 years of Arduino experience and the following summary must be cast in that light.
After 3 months, I am still impressed with the PSoC 4200. The Cypress Creator 3 programming tool is excellent for a no-cost development environment. However, even after exploring many parts of the environment over the past months, there are still areas in which I have not ventured. The tool is massive and for a hobbyist spending only a few hours a week, it may be too daunting. Unfortunately, I do not know of much that Cypress can trim because a good portion of the tool is required to utilize the PSoC. Also, the tool integration into the back-end store of component PDF files is necessary. Way too much time must be dedicated initially in reading the various PDF files. The sheer volume of documentation is a two-edged sword; the information is available, but the datasheets on the component configurations can be heavy reading. As I stated earlier, this is a professional development environment and the documentation is professional, too.
Note to anyone following my footsteps: spend the $25 and get the PSoC 4200 Pioneer Kit. You cannot use the internal breakpoint debugger on the $4 Prototype boards. I nearly drove myself crazy trying to use the Arduino serial debugging philosophy; it is simply too crude for the PSoC capabilities. The Pioneer evaluation board shines and the integrated debugging capabilities will return your $25 investment many times over. Additionally, and I consider this important, the Pioneer board is jumper selectable between 3.3 Volts and 5.0 Volts. The $4 Prototype board is always 5V when used with USB and can only be 3.3V when used with an external power supply. If you have 3.3V sensors connected to the Prototype board, you MUST disconnect all 3.3V components before using USB to reprogram the PSoC. The Pioneer board jumper settings for V+ is an efficiency tool and may well save a few 3.3V sensors from cremation.
I am not a professional C/C++ programmer although I have attended professional classes back during the days I was working for 'the man'. Using the Arduino, I never had many issues but the SoC is going to drive a stake into your heart. By default, the PSoC is C-code. There are a few internet articles on how to use C++ with the PSoC but this should not be taken to assume that you can use Arduino libraries... you cannot, unless you rewrite them in C or unless you rewrite a significant amount of Arduino code to interface with the PSoC. I found the Internet articles to be of little value. Most of the time, sections of Arduino libraries (Example: Adafruit GPS) can be extracted and used directly in your own C inline or put into a simple function. For the most part, the Types between the two environments translate at the 16-bit level but the ARM has extended Types to manage the 32-bit variables. So, be forewarned that you will spend some time dealing with type casting.
Praise be to the Arduino team for making things easy for novice programmers and hiding complexity. PSoC will hide nothing from you, so be prepared for a shock. Hardware Pins in the Arduino world are all converted for our convenience to aliases such as D1 and A0. PSoC uses route-able physical pin technology where signals are (for the most part) simply assigned to an arbitrary external pin number and then the whole collection is given a cute name (alias) for code use. This is ultimately flexible but does not automatically transcend from project to project. As your knowledge grows with PSoC you will find yourself evolving your usage of external pins. Unfortunately, few of us actually take the time to return to past projects to bring them in-line with our current knowledge level.
Getting a handle on all of the PSoC configurable hardware, such as Universal Digital Blocks (UDB), can be overwhelming. Everything has a separate datasheet but the TRM (Technical Reference Manual) is the king-book. For the PSoC 4200 series, this document is a 16M Byte PDF file... 678 Pages. Many Arduino users have never opened the Atmega328P reference manual but you will open the PSoC TRM.
The single item that impacts programmer productivity (or ability to just complete a project) is the lack of library support from the community. Remember, libraries are C-centric and not C++, so some of the everyday magic used in Arduino does not translate into PSoC. Critical libraries for Nokia GLCD and TFT Color SPI displays exist and Cypress has an embedded software component for 2x16 Hitacahi LCD but I have found nothing as complete as the Adafruit or Henning Karlsen software. With enough research, you can likely find pieces of the puzzle, but you will likely need to work diligently to complete or perfect the code.
In my opinion, the Cypress PSoC 4 users forum is nothing to write home about - I'm not sure it has reached critical mass and should even be called a forum. The active members are few and because of the nature of the PSoC product, most inquiries generally require uploading a complete ZIP of your project for inspection by others. There are no 'code tags' for the forum and the overall feel is "rough' in my opinion: no edit and no delete at present: to Cypress's defense, I have spoken with one of the EVP and have been informed that improvements are forthcoming. Cypress is a professional company and have a staff of engineers that answer questions relating to product; technical or otherwise, but these inquiries are managed through "case numbers" submission. Cypress sell PSoC in huge quantities to large corporations that demand no-nonsense support. This is not a hobbyist market. If you venture into this world, know that there is no hand-holding like the Arduino forum.
So, my overall summary is mixed: fantastic technology, free development tools, reasonably priced development products, reasonably priced IC's. I am delighted that I have spent a few months in this environment and I have created a few projects but I did cheat somewhat and followed work that I had previously done on the Arduino AVR platform. GPS Clock & Calendar, TFT Color Terminal, Nokia B/W SPI Terminal, 6 channel A/D, etc. I used very little of the overall capability of the PSoC 4200 in the area of configurable hardware; for example, I did not use a single OpAmp. But, I have gotten a taste of the hardware resource editor, the schematic project template, the bootloader, the UART, and the UDB. I really like the concept of PSoC and I have assembled enough of the PSoC 4200 prototype boards ($4) to continue to experiment. I have my 4200 Pioneer board for real-time debugging of my C code and examining the internal workings of the PSoC. (I really, really like this board.) I expect to continue my learning, but I am ready to go back to Arduino for my everyday playtime. Remember, I am a hobbyist and I am not working on commercial "stuff", so I can play with the Arduino and accomplish something in a short matter of time. At $3 each, the Atmega328P-PU are affordable and I have a tube of chips here on the workbench for my own designs. I also like to play with the Attiny85 chips. And then there is the 1284P-PU that I also love in my Bobduino board. Oh, that 8-bit vs 32-bit stuff is way overrated: only a few mathematical functions actually benefit from the 32-bit architecture. Mostly, I found myself having to cast variables to uint8_t in the PSoC. The 48MHz clock is very nice, but it takes more manipulation in many cases. When working with GPS or serial at 19200 BAUD, I saw no differences in human perception between the PSoC and the 8-bit 16MHz Arduino. In the case of the GPS, all of the character gathering from the GPS, the string parsing, the display arrangements, the display output were all accomplished and the Arduino was waiting on the next NEMA sentence to come in from the GPS. Hurry-up and wait in the Arduino translated to hurry-up and wait longer in the PSoC.