Microcontrolador vs Microprocesador.
Un microcontrolador es básicamente un sistema de entrada de datos físicos basados en señales eléctricas, ya sean en modo de potencia (electrónica analógica) , o en un sistema de comunicaciones basados en señales eléctricas(electrónica digital)
(Un purista lee esto y me apedrea, pero vamos, es una licencia poética)
Hay sistemas electrónicos para medir cualquier magnitud física, temperatura, humedad, presión, luz, radiación, peso, etc.
Ahora esos sistemas nos pueden dar la información, pero necesitamos procesarla, y podemos actuar con esos datos, para controlar, motores, calefacciones, frigoríficos, enviar información vía radio, etc. Prácticamente cualquier cosa que se nos pueda ocurrir.
Hablar con un sistema informático.
En el lenguaje tenemos un medio basado en las letras y estas en sonido que juntas hacen un medio de comunicación.
Ahora nos toca hablar con un sistema informático y no una persona, nosotros vamos ha hablar con un microcontrolador, que hay que decirle las cosas muy concisas y concretas y que solo entiende números
Medio de comunicación
En el medio hablado tenemos el sonido y su propagación por el aire.
Para hablar con el sistema informático tenemos la electricidad y los cables por los que viaja. (importante porque tendremos que montar circuitos y hacerlos de manera correcta para que la comunicación fluya correctamente)
Unidades de información
En el sistema humano tenemos las unidad mínima de información que es un sonido.
Utiliza sistemas de aritmética binaria
BIT.
Es la unidad mínima de información, que viene a decir. Presencia de electricidad o no electricidad.
- 0 –> Implica una tensión de 0v a 0.8v
- 1 –> Implicad una tensión de 2v a 5v
(NOTA: SON RANGOS QUE DEPENDEN DEL TIPO DE CHIP)
Un bit vendría a ser sonido o no sonido.
Curiosidad: La palabra bit se compone de (Binary Digit)
Boolean
Boolean es un tipo de dato que solo puede valer 0 ó 1 , cierto o falso, True o False,
Aunque internamente se guarde como la unidad mínima de información que dependerá de nuestro sistema si es de
8,16, 32 o 64 bits.
Lo más típico para nuestros sistemas de microcontroladores es que sean de 8,16, o los nuevos de 32 bits.
Unidad mínima de información
La unidad mínima de información depende de nuestro sistema, si es de 8, 16 , 32 o 64 bits, lo mas habitual en estos momentos es de 16 y 32 bits.
Byte.
Ahora bien si la información mínima es un valor de 0 y 1 , necesitamos poder avanzar.
Byte es un conjunto de 8 bits. que según los agrupemos podemos obtener distinta información, en realidad el byte es la unidad mínima de información
Si utilizamos un sistema sin signo.
00000000= 0
11111111= 255
Si utilizamos un sistema con signo, el último bit corresponde al signo, importante si vamos
01111111=127
11111111=-127
Es importante saber si estamos usando notación con signo y sin signo , porque los dos se representan igual, pero tienen valores diferentes.
Curiosidad
https://skeptics.stackexchange.com/questions/17324/airplane-software-crash-caused-by-zero-negative-altitude-at-dead-sea
Así que nosotros vamos a dar las primeras palabras para poder hablar con nuestro sistema y le podamos decir concretamente.
signed byte => Usamos un valor con signo
unsigned byte => Usamos notación con signo
char (letras como números)
Nuestro sistema electrónico no entienda de letras, solo números, y entonces como vemos texto en nuestros sistemas.
Se usa una representación ASCII y hay una manera de indicarle que lo que vamos a trabajar son letras y no números
char texto[5]=”Hola”; == 72,111,108,97,0 (Los textos incluyen un cero terminador que nos permiten saber cuando ha terminado un texto.
int (Números más grandes)
Bueno ya hemos pasado de números con valores superiores a 255 en notación y positiva y mayores o menores que 127 , -127 con notación negativa.
Con int estamos indicándole al sistema que vamos a usar 2 bytes para guardar la información.
unsigned int –> 0 – 2¹⁶ =65535
signed int –> -2¹⁵ a 2¹⁵= +/-32765
long (Números aún más grandes)
Si ahora necesitamos valores más grandes podemos pasar a la siguiente unidad 4 bytes.
unsigned long =0 a 2³² =4294967296
signed long = -2³¹ a 2³¹= +/- 2147483648
float (Y los decimales)
Ahora para representar los decimales usamos 4 bytes y hacemos una representación matemática basada en la base y el exponente
4 bytes = 1 bit signo, + 8 bits exponente + 23 significante -1,701411733e38 402823466e+38
https://es.wikipedia.org/wiki/Coma_flotante
double (más precisión)
Estariamos empleando 64 bits , pero en nuestro caso para trabajar con arduino float y double son iguales.
¿Cúal usamos y por qué?
Bueno queremos que nuestro sistema sea más eficiente, lo que significa trabajar con los números más ajustados posibles.
Nuestros microcontroladores tienen unos recursos muy limitados (estamos hablando de 2 kB de RAM) si usamos tablas y vectores nos quedaremos enseguida sin memoria para trabajar.
Además que para trabajar un sistema que trabaja con espacios de memoria de 8 bits para trabajar con 32 bit se necesitarían 4 operaciones.
Si y ahora nos hemos ganado un descanso , ¿quien me invita a un refresco ?