Thursday, January 12, 2012

32 bit painkillers...

The embedded market doesn't need another MBED, Maple, or Arduino Mega/DUE. These are great platforms, at reasonable prices, and as far as i can see, there is just no (horizontal) headache in the market that can be solved by the addition of another platform of this type / business model.

You might notice that the Arduino UNO was left off this list....that is because there is a fundamental difference to be found. There are -countless- projects / products out there that are based on the AT328/Arduino platform....so why don't we see the same width of dispersion (within the maker community) for ARM?

Things that are -not- the reason, in my opinion:
  • No Suitable platforms: Yeah, right. 
  • No approachable platforms: Mbed solves this, as does Maple, and Arduino is working on their DUE. 
  • Not easily integratable: Mbed and clones are painless to integrate. 
  • Chips too expensive: with bare chips at $1.50 - $10 per, ARM is cheaper than AVR. 
The problem is the time and money cost of prototyping and integration. Plain and simple.
This is a non issue for the AT328 - Arduino croud – DIP, <$5.

This cost comes from:
  • Lack of expertise: The number of people who can design, fabricate, and assemble a circuit-board for a 0.4mm tqfp is much smaller than those who can design and build for DIP (stripboard, anyone?) 
  • High unit cost... Even sending out to china, you are likely to spend close to $100 for a 2-3 boards. Then, unless you are proficient, you are going to take your chances or spend a large amount of time , or both, assembling the boards. 
  • High Cost ($50+) of common easily integrated DIP based products that solve the above problems
  • Still developing IDE solutions that are not too intimidating for the novice
The time and money cost of low volume integration is the painkiller opportunity for ARM / 32 bit (general) embedded development.

Even if breadboarding is falling out of favor for learning and experimentation, and it seems to be, a good baseboard (in the manner of the Arduino uno) solves this.

Breadboard/DIP/Strip/one sided/through hole/ easily made PCB's has value for to the amateur / small / educational / maker community for prototyping and small volume - proof of concepts. This is not likely to change

This explains my focus on low cost, DIP oriented solutions. I think that this is the way forward, at least until NXP/ST/TI/? Comes out with a PDIP28/40 ARM with respectable specs for <$10 (probably will never happen), realizing that this product will not really make money, but rather is advertising for adoption of their products.

I think that $10 is the magic number here. It may not be initially possible, but with scale it is. I can buy an 80x50mm board with an LPC1768 and a host of connectors for $15 in small production quantities. It should be possible to sell a chip that costs half as much, on a board 1/8th the size, with $2 less parts and connectors, for $10 and still make a couple of bucks. It will, of course, require an economy of scale.




Monday, January 2, 2012

Tough Choices....

We are reaching out to the community for a little feedback.... As one would expect, in order to shoehorn an ARM into 28 pin dip, with pin compatibility to another, unrelated chip, we have had to make a few design compromises....I'm going to outline them here, and I invite any feedback, suggestions, or comments that might be appropriate to foreseeable use cases.

Compromise 1: Pin doubling....

  1. To bring the equivalent functionality out to the appropriate pins, we have had to, in some cases, pair pins together. Use would normally consist of configuring the unused pin in a high z mode. 
  2. Most of these have been ADC pins. Our current design calls for a 500 ohm resistor in the ADC lines of doubled pins, to avoid pin to pin shorting issues. Our thoughts on this were: the Adc is high-Z anyway, so .5k should not be too big of a deal, and if it is, a non doubled pin could be used instead. 
  3. In 2 cases, however, we have had to double up pins that were non ADC related. For these we have PWM functionality paired with SPI SS0 and PWM functionality paired with MOSI0. 
  4. In these cases, we think that the best option will be to put the antishort resistor in the PWM rather than the interface pins....but we are very open to discussion on the issue. 
  5. A cool idea is to use the .5k resistor as a voltage divider....to directly read resistance. Connect the pin doubled ADC to the resistance you want to read,  supply power (or ground) from the doubled pin, read the ADC voltage with the far end of the test resistance connected to the opposite rail.
Compromise 2: Port fragmentation
  1. For similar reasons as above, we have had to break ports up into chunks. We have attempted to keep GPIO ports as contiguous as possible, but that isn't saying much in this case.
  2. Our solution is to write a library function that creates accesses fragmented ports as if they were contiguous, provisioning a "virtual" port when portwide access is required.
  3. This would either require calling a read or write function, or passing a function as a parameter.
  4. The ports could still be accessed directly, of course.

Chip selection...

To maintain full 5v compatibility, we have tentatively chosen the Nuvoton NUC100LE3AN. Another choice that fits all requirements, except for 5v output, would be the  ST32F1038. The ST part is 5v input compatible. Our requirements are: 7mm x 7mm package or smaller, less than $5, can achieve close to 50MHZ on a 16mhz crystal, 128k+ flash, 16K+ Ram, and all the peripherals required for matching the ATmega328p as closely as possible. Comments?

Viva la evolution!!