If you
really want to learn how to interface a microcontroller to hardware,
stay away from all things Arduino.
I know everyone will tell you otherwise. But Arduino, hides too much from the user.
Sure it's easy. But you learn nothing as far as interfaces goes.
If your program is talking directly to the bare metal registers, you will see how the microcontroller talks to the hardware.
I would recommend starting with a PICKit 3 or 4 and one of the 8-bit PIC microcontrollers from Microchip. I suggest starting with a pic16f1709 or pic16f886. That with MPLAB X and the XC8 compiliers, you will be forced to:
1. learn how to read a datasheet
2. learn how to connect and program the microcontroller in C
3. learn how to setup the internal oscillator
4. learn how to directly read and write to the microcontroller registers to do I/O
Then when you've accomplished that you can:
5. learn how to read analog inputs
6. do SPI to something like a DAC (a MCP4802 comes to mind)
7. learn timers and interrupts
8. do PWM
You could start with a higher end pic18 or pic32 but the learning curve is steeper. For example, Cornell Univ. uses the pic32mx250f128 in their ECE-4760 course. But, it's a real bear to learn. And again, Cronell uses the Microchip pLib library to hide the MCU registers similar to the Arduino.
All for very little cost investment.
- You will need some kind of scope. A
PicoScope 2204A from tEquipment with their 6% EEVblog discount might be a good starter if you don't have one.
- A power supply. A couple batteries and a regulator (MC7805 +5V regulator) if nothing else.