ARMing a Breadboard – Everyone Should Program an ARM
hackaday.com
hackaday.com
This seems to not be common knowledge. Maybe the atmosphere of typical ARM applications is already so buried under NDAs that nobody cares, or maybe people just punch "ARM Architecture Reference Manual" into Google and grab one of the many slightly-outdated copies that are floating around on .edu servers. But I found it pretty surprising after seeing how widespread ARM is in "open" hardware.
That said, people who just want to play with ARM-based hardware can get pretty far by leaning on the GNU support and third-party documentation (there are some Game Boy Advance documents that cover the ARMv4 instruction set, for example).
For example, Googling for "arm tbl" brings up this: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc....
which contains links to the rest of the AArch64 instruction set. The documentation has scary "Superseded" notices, but it's all basically accurate and it's enough to do low-level programming.
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc....
That's what everyone does, and AFAIK the ARM ISA documentation is public. The lower-level details to do with the core hardware itself/how to synthesise the core are NDA'd, however.
But now we're seeing ARM chips with built in clocks, and fewer base components required and I think the end of that AVR dominance is on the horizon. And that is why Dialog is buying Atmel[1].
Getting started with ARM is easy with one of ST's Nucleo boards (which are kinda Arduino Shield compatible, the biggest issue I have hit is that i2c at 3.3v is an issue on some boards). Their Discovery boards are even more capable but can be a bit more work to breadboard with.
Once ARM put out a supported GCC on launchpad.net it really made it easy to get a development environment up (no more crosstool or other package for building a cross compiler).
The ARM used in the article is the only TDH available AFAIK.
For SMD-only parts, there are SMD to DIP adapters readily available to let you use them on breadboards; for relatively low-frequency digital work, there's no problem using them, so being available in through-hole isn't a practical advantage.
Oh, and with a mild amount of bravery, soldering SMD components isn't that difficult. A cheap toaster oven that you know damn well will never ever ever be used for making food again can do a decent enough job of doing the reflow for you.
The 5V chips are also better at taking punches from miswired projects.
I agree with you on the general tolerances to abuse though. I've filled out a couple of surveys sent to me by semiconductor folks (I often get one after attending a free training session) and I've mentioned several times that a short/overvoltage hardened chip would be a useful thing for me. You can do that with off chip parts but since manufacturers are wondering what to do with an abundance of silicon surface area to distinguish their products, I continue to suggest that would be one way.
No, just 2K. [0]
> The M0+ chips seems to all come with 64K of RAM
That would be 8K. [1]
[0] http://www.atmel.com/devices/atmega328.aspx
[1] http://www.st.com/web/en/catalog/mmc/FM141/SC1169/SS1817?sc=...
It has up to 32K of RAM and 256K of flash [2], the larger Cortex chips have the big RAM numbers as you note.
[1] http://design.avnet.com/axiom/atmel-sam-r21-atmel-cortex-m0-...
[2] http://www.atmel.com/Images/Atmel-42223-SAM-R21_Datasheet.pd...
Never could stomach PIC. 8051 is 'quirky'; PIC is 'wtf?'. YMMV.
[1] http://playground.arduino.cc/Main/I2CBi-directionalLevelShif...
The cheapest ARM Cortex M3/M0 or even a ARM7 is $1+. When you are shipping products (and not doing a hobby project), BOM cost is a major factor. If you sell a Million Units each with a micro in them, the cost difference is about $700,000. Even keeping cost aside, size matters. The smallest 8 Bit micros from Atmel or Microchip or any 8051 is around 3x3mm. Most ARM micros are much larger.
Rule of thumb that I use is to pick the micro by function, price and size. Sometimes a 8-Bit micro is more than enough for the job. Buying something that costs more, bigger in size and for which the MHz is not an advantage is an overkill.
Having said that, a companion product that also working on requires the MHz and so, a Cortex-M3 fits perfects there.
I don't think that statement reflects the situation today.
Cost differences at the low end have become increasingly narrow, where they are present at all. Using just Digikey pricing at 10k, as above, it's easy to find M0/M0+ parts in the range of $0.40--$0.50/ea at 10k.
> The smallest 8 Bit micros from Atmel or Microchip or any 8051 is around 3x3mm. Most ARM micros are much larger.
These parts are obviously available in a range of package sizes, but the smallest M0+ MCUs are also 3x3mm.
This particular part 8K flash and 2K RAM. Now the M0+ is better for these low end parts because it has the Thumb instruction set which gives it better code density than the original M0
I also use the ST micros for most of my projects, but the AVR is also a great device with a well supported toolchain - I think it's generally easier for most beginners due to easy to use peripherals and simpler clock trees than the ST chips, while still being production-ready.
[1] aliexpress.com/item/Free-Shipping-Nano-3-0-Controller-Board-Compatible-with-Arduino-Nano-CH340-USB-Driver/2021663360.html
They fill the "can't be bothered to read the 500 page long datasheet" niche for me nicely. I remember having to get along with datasheets and simple programmers and writing PIC assembly back in the 1990s and I'm glad that time is gone.
Stm8, $1.28 http://m.aliexpress.com/item/32351992629.html
Stm32, $3.06 http://m.aliexpress.com/item/1568685935.html
Edit: my phone did a stupid.
Most "shields" and devices are tested and libraries made easily available for Arduino/Atmel 324P. Going to ARM means having to rebuild some of your toolkit, or finding it.
But again, it's ARM. And the "more expensive one" is 32bit.
This used to be a deterrent for me, but these days I just whip out my ExpressPCB and make a breakout board for the part that I'm interested in playing with. The price is really manageable. Typically my breakout board includes a few basic goodies such as decoupling caps, and a 3.3 V regulator.
But I appreciate the simplicity of being able to just breadboard something.
One reason that this works so well is the chip has a built-in serial bootloader.
That's a nice touch.
I'm just an amateur in this area, so if someone who is more knowledgeable could confirm or deny with I wrote above that would be great.
http://dangerousprototypes.com/2011/12/05/breadboard-limitat... [might have to ask EE friends about transmission line termination at those frequencies]
2. See also this video (and comments on video) where they measure:
I think the STM32F4 board is around £12 if I recall correctly.
https://boards.openpandora.org/topic/5600089-jumping-into-ar...
Jumping into ARM assembly .. with notaz' help!
I've got a usb to serial adapter just sitting here, definitely trying this project for just $6
Wish it only needed 5V supply, I have endless phone chargers laying around from 500ma to 2a
In the passive voltage divider circuit, if the load varies its current draw, you have to have a resistor in parallel with the load so that the total current through both the load and the resistor doesn't vary significantly (where "significant" is derived from your tolerance for voltage variation).
https://www.arduino.cc/en/Tutorial/ArduinoToBreadboard
To make 3.3V out of 5V you can use a voltage regulator.
I have a stash of old linear ones that aren't fortunately. Worth their weight in gold.
To get more memory, though, you have to go surface-mount.
The datasheet (at http://www.semtech.com/images/datasheet/sc189.pdf) has several example circuits.
http://www.aliexpress.com/item/MB102-Breadboard-Power-Supply...
http://pcbheaven.com/wikipages/images/voltagedivider_1235725...
The Rload and R2 are parallel resistors really so if Rload is really low which it is generally if it's doing anything then it will effectively shrink the R2 resistance (Rload || R2) and therefore voltage. Then whatever is connected as Rload won't get enough volts + current.
You can fix this to some degree by using very low values of R1 and R2 but then they start to sink lots of current as they are in series across the power supply and get hot so this becomes an efficiency problem. If you're really unlucky the magic smoke comes out or you touch one and burn your fingers emitting a nice bacon smell.
You can fix all of this with a single NPN transistor and a zener diode pretty easily but you might as well use a regulator IC then.
Analogue electronics is fun even if it does burn and explode in your face occasionally! My shit blows up all the time: http://i.imgur.com/GZBKblt.jpg
https://www.sparkfun.com/products/11736
http://www.adafruit.com/products/284
In addition, this is an easy to apply 3.3 V regulator chip, in a package that's compatible with a breadboard:
I just installed gcc and use openocd to program.
I'm fairly sure I just did "sudo apt-get install gcc-arm-none-eabi" for the compiler.
http://libopencm3.org/wiki/Main_Page is worth looking at too, in case you haven't seen it.
Come on, there's a lot of 'just' there. It's not too bad if you just want to play with the discovery board, but there's very little documentation on how to use the discovery board as a programmer. The official docs for the discovery board don't give you crucial information about jumper settings, and I ended up having to download some bloated Windows tool from STM just to output a suitable .ld script for the STM32F030K6. I'm sure it's not as difficult as it used to be, but it's vastly less straightforward than setting up an AVR toolchain.
To be honest, the page you linked to contains no useful information. I can see that it's some kind of peripheral library. It doesn't look like it does anything in particular that StdPeriph doesn't already do (and 90% of example code uses StdPeripg). Plus the github page warns that the API is unstable. Again, compare to AVR. The arm tools are much better of course, but it's so much harder for a beginner to find answers to simple questions. E.g., can I reset an STM32F0K6 with only two pins using OpenOCD and the STLink programmer on the discovery board? (The answer appears to be yes, but it's not readily googleable.)