Estoy de acuerdo con Joby: Arduino es genial, pero siempre me siento sofocado por el marco con el que me rodean. Pasaría a utilizar C directamente en tu Arduino y crearía una gran cantidad de la funcionalidad de biblioteca que proporcionaban desde cero. Por lo general, prefiero la profundidad antes que la amplitud: no se limite a comenzar con otra familia de microcontroladores utilizando más marcos provistos. Aprenda un poco más acerca de cómo implementar algunas de estas funciones usted mismo.
Comience con un programa que funcione y reemplace las llamadas de la biblioteca Arduino con sus propias versiones, una función a la vez. Aprenderá mucho sobre los registros de control, el tiempo, las operaciones de bits, etc. si aún no lo ha hecho. Lea en profundidad la hoja de datos de ATMega328: todo lo que necesita está allí.
Pruebe un IDE diferente como AVR Studio o Code :: Blocks. Aprende la cadena de herramientas de GCC. Pruebe técnicas de codificación más avanzadas: pruebas unitarias, cobertura, perfilado, comprobación de pelusas / férulas. Ponga un RTOS en el Arduino.
Un programador / controlador combinado no es un signo de debilidad, es solo una opción de diseño. La única 'debilidad' que podría surgir es la falta de depuración en el circuito. Compra un AVR Dragon y tendrás ese valor por $ 50.