Si ya tienes un Arduino, me quedaría con eso, va a ser mucho más comprensible que la Raspberry Pi, que es esencialmente un pequeño escritorio que ejecuta Linux en un factor de forma muy pequeño.
Mientras que con el Arduino, todo el sistema es lo suficientemente simple como para que puedan entenderlo.
No dijiste qué Arduino tienes, pero en cualquier caso, debes averiguar qué procesador ATmega está en tu tablero y luego descargar la hoja de datos para él. No descargue solo el resumen, descargue la hoja de datos completa que tendrá varios cientos de páginas. Por ejemplo, aquí está la hoja de datos para el ATmega328 , que es el microcontrolador utilizado en el Arduino Uno.
Aunque no es necesario para programar el Arduino en su versión de Sketch de C ++ (sospecho que pocos propietarios de Arduino se han tomado la molestia de descargar la hoja de datos, o incluso saben que existe una), al leerlo obtendrá una idea de lo que hay dentro El microcontrolador.
Un microcontrolador como el ATmega es mucho más que una CPU: tiene memoria flash programable, RAM, EEPROM, una gran cantidad de E / S que incluyen puertos paralelos, interfaces seriales (UARTS, SPI, I2C) y un ADC. (convertidor analógico a digital), y temporizadores. Habrá una sección separada en la hoja de datos para cada uno de estos temas.
No espere entender todo, o incluso mucho para empezar. Sin embargo, al ser un programador de lenguaje de alto nivel, es probable que esté interesado en los diversos registros internos, incluidos los 32 registros de propósito general y cómo se utilizan, los diversos modos de direccionamiento (hay varios, algunos bastante complejos) y el conjunto de instrucciones. parece.
Por ejemplo, hay un modo de direccionamiento, "direccionamiento de memoria de datos indirectos con incremento posterior", que permite implementar una referencia de C ++ como * x ++ en una sola instrucción.
Si nunca ha realizado la programación en lenguaje ensamblador, mirar los registros, el conjunto de instrucciones y los modos de direccionamiento le dará una idea de lo que está pasando dentro de ese nivel.
Luego tome mucho en todas las secciones que describen la E / S en el ATmeaga. Por ejemplo, mirar la descripción de los puertos GPIO para el ATmega le dará una mejor idea de lo que está sucediendo cuando usa las llamadas pinMode y digitalWrite / digitialRead, por ejemplo. Es posible que desee comprar algunos escudos adicionales para su Arduino para que pueda experimentar haciendo varios tipos de E / S.
Aunque comprar una tableta es una buena idea por muchas razones, no te ayudará a entender cómo funciona una computadora en absoluto.
Al igual que otros microcontroladores pequeños, por ejemplo, los PIC, es posible acceder al hardware en una placa Arduino; solo piense que es una placa de desarrollo AVR. No tienes que usar ninguna de las bibliotecas si no quieres.
Por ejemplo, para leer y escribir los puertos, puede utilizar las instrucciones:
DDRB = 0x01; // set data direction register for port B to output
PORTB = 0x01; // set bit 1 of PORTB
Esencialmente, ahora estás programando en C puro, no en C ++. Aquí hay más información sobre programar el Arduino en C .
Si no le gusta el IDE de Arduino, puede programar en Visual Studio o Atmel Studio IDEs.
Si realmente desea conocer el hardware, puede programar en lenguaje ensamblador usando las instrucciones en la hoja de datos que descargó anteriormente. "Programación arduino en ensamblador" de Google (sin las comillas) para muchos enlaces sobre este tema.
Aquí hay un tutorial de una hora en YouTube sobre la programación del ensamblador de la posada Arduino.
Y aquí hay un código de ejemplo: una subrutina para encender y apagar un LED en el ensamblador:
#include "avr/io.h"
#include "asmtest.h"
.global asminit
asminit:
sbi 4,5; 4 = DDRB (0x24 - 0x20). Bit 5 = pin 13
ret
.global led ; The assembly function must be declared as global
led:
cpi r24, 0x01 ; Parameter passed by caller in r24
breq turnoff
sbi 5, 5; 5 = PORTB (0x25 - 0x20). Bit 5 = pin 13
ret
turnoff:
cbi 5, 5; 5 = PORTB (0x25 - 0x20). Bit 5 = pin 13
ret
que se ensambla como un archivo .s separado. El código completo para el ejemplo de LED parpadeante de Arduino en el ensamblador, que muestra el uso de varios de los 32 registros de propósito general de Arduino, puede ser encontrado aquí .