Llevo muy poco tiempo programando y conociendo el PROYECTO ARDUINO y comparto mi poca experiencia que ira creciendo simultáneamente a mi autoaprendizaje.
Este es un resumen de lo que es el proyecto ARDUINO, cualquier aporte (correcciones, ampliaciones, sugerencias, criticas, propuesta etc.) es bienvenida.
Antes de Arduino, el Microchip PIC fue el microcontralodor de elección de muchas personas, con la llegada del proyecto ARDUINO, se ha creado una tendencia a nivel mundial de entrarse en el mundo de la electrónica y la programación computacional, sin tener bastos conocimientos en estos dos campos, también es usado los ARDUINOs como hardware de control para prototipado pero no como parte de un producto final de producción.
La marca ARDUINO implica tanto hardware como software, la palabra ARDUINO es un apellido italiano, donde se dice que unos de los desarrolladores de este proyecto, uso el nombre final de un bar que se llama "BAR DEL REY ARDUINO"
HARDWAREUtilicemos la ARDUINO BOARD llamada "Arduino MEGA 2560" como tarjeta de referencia, esta tarjeta posee un uctrl referencia ATMEga2560 (256KiB) de memoria flash
La memoria FLASH sirve para contener el programa de control y un código bootloader (cargador de programa, código ~8KiB) se usa el bootloader con el propósito de reducir costos al no programarse la tarjeta con programadores externos si no básicamente a través del chip ATMEGA16u2 para la conversión de transmisiones serie RS-232 a señales USB, para usar un puerto USB del computador como un puerto RS-232 (programación y comunicación serial)
/!\ TOMO prestadas algunas imágenes de JORGE555 (http://elecrab.com), próximamente las actualizare con unas propias
PROGRAMADOR EXTERNOEn el hardware encontramos una tarjeta o PCB denominada
ARDUINO BOARD que poseen como dispositivo electrónico principal un
MICROCONTROLADOR (con arquitectura AVR [para la mayoría de tarjetas] o ARM [presente solo en Arduino-DUE]) próximamente saldrá al mercado una ARDUINO BOARD, con microcontrolador mas un procesador fabricado por la compañia estadounidense TEXAS INSTRUMENTS, tarjeta llamada ARDUINO TRE el propósito es tener una pequeña y económica PC con característica de CONTROL, que pueda cargar un OS (Sistema Operativo) e ir mas allá de lo que propone el proyecto RASPBERRY-PI en su versión actual #3.
PUERTOS DE CONEXIÓN
En los extremos de la mayor parte de las ARDUINO BOARD se ubican unos conectores o pines-hembra para conexión con otros módulos externos (periféricos arduino) pines que también sirven para la conexión por medio de cables, por lo general hacia un protoboard o módulos tipo arduino (sensores, pantallas, teclados, etc), estos pines de conexión están agrupados por finalidad de operación para facilitar las conexiónes, por ejemplo conjunto de pines consecutivos para entradas análogas, pines para entradas y/o salidas digitales, pines de salida para ser usado como PWM (modulación por ancho de pulsos), entradas-salidas como puertos de comunicación serial. Los pines conectores son solo una extensión de los pines del microcontrolador, estos no llevan una circuiteria especial como se hacia antes con procesadores para darle características de control.
En la ARDUINO BOARD también encontramos los componentes externos mínimos al microcontrolador para que pueda ser incorporado a un uso electronico, los cuales son:
I: Los condensadores de desacople que se encargan de proporcionar los pulsos de corriente que necesita el microcontrolador para operar dentro de un circuito electrónico.
II. La señal de reloj, se puede generar con componentes internos del microcontrolador por medio de la configuración o programación de registros, también se puede generar la señal de reloj con componentes externos como cristales que generan una frecuencia de reloj mas precisa que con la que se obtiene por medio de la configuración de registros.
III. Resistencias de pull-up/pull-down para configurar características especiales del microcontrolador.
Otros componentes de la tarjeta son boton reset (reinicio),
conector de fuente de alimentación externa (por lo general de 12VDC)
interfaz USB multiproposito como alimentación de la tarjeta, comunicación serial y programación del microntrolador por medio del ATmega16U2
regulador de voltaje a 5V y 3.3V
Fuente:
http://www.embarcados.com.br/arduino-mega-2560/ La filosofía de proyecto ARDUINO fue en un inicio que todo sea reproducible, nada oculto o privado (HARDWARE Y SOFTWARE LIBRE) pero ya vemos que no se esta cumpliendo por que algunas tarjetas nuevas no suministran los archivos esquemáticos, por ultimo empresas como GOOGLE, INTEL y TEXAS INSTRUMENTS están apoyando este gran proyecto.
fuente parcial:
http://elecrab.com/archives/80Informacion sobre el ArduinoBoardTre e Intel Galileo
https://www.arduino.cc/en/Main/ArduinoBoardTrehttps://www.arduino.cc/en/ArduinoCertified/IntelGalileoSOFTWARELa magia del proyecto ARDUINO, no es el hardware, así este en la mayoría de los casos sea de muy de bajo costo, o que sea en su mayoría también hardware abierto (esquemáticos libres, etc.), si no que la magia radica en el
SOFTWARE, primeros veamos como se pueden programar, los microcontroladores, existen dos tipos de lenguajes de programación computacional funcionales 100% (lenguajes de bajo/alto nivel) otros están en desarrollo como programación en bloques, por diagramas de flujo.
LENGUAJE DE BAJO NIVEL como lo es el lenguaje ensamblador, lenguaje que permite codificar con instrucciones directas o propias a las características de una determinada CPU, su sintaxis se basa en OPERACIONES y OPERANDOS, operación (que acción se va a realizar), operandos (donde se va realizar [símbolos y parámetros]), este tipo de sintaxis es muy compleja, pero programar en lenguaje ensamblador es dominar por completo la arquitectura de una CPU, con la desventaja que el lenguaje ensamblador es propio para cada CPU, si programas en diferentes familias de microcontroladores y marcas tendrás que aprender el manejo propio de cada uno de ellas. es usado en la actualidad como curso de arquitectura de hardware, códigos en donde se desee máxima eficiencia.
LENGUAJE DE ALTO NIVEL, el mejor lenguaje que tiene caracteristicas de operación de bajo nivel es el lenguaje C, por esta razón se usa como lenguaje de programación de microcontroladores, se pretende con los lenguajes de alto nivel ABSTRAER el proceso de codificación, se define la ABSTRACCIÓN para aislar un elemento de su contexto o del resto de los elementos que lo acompañan. y se define la CAPA DE ABSTRACCIÓN como la manera de ocultar los detalles de implementación de ciertas funcionalidades.
El lenguaje C utilizado para programar microcontroladores, usa las mismas palabras clave del C tradicional, mas otras especificas, pero por cuestiones de arquitectura limitada de las CPU de los microcontroladores hay ciertas restricciones en el uso de tipo de datos en especial de punto flotante, otras caracteritricas no estan disponibles ya que son propias solo para procesadores. El lenguaje que proporciona el fabricante por lo general es un C adaptado a una familia especifica de microcontroladores, el "El lenguaje ARDUINO" también se basa en lenguaje C, pero no con todo el poder hasta ahora comparado con el C suministrado por el fabricante.
veamos la siguiente comparación el primer código no corresponde o hace lo mismo que los dos siguientes solo es un ejemplo demostrativo, me pueden colaborar portando el código 2 y 3 a ASM.org $0000 ;sin interrupciones
.include "1200def.inc" ;definición de registros internos PORTB, etc
ser r16 ;pone a 0xFF el registro 16 (en ptos 1=salida)
out ddrb, r16 ;r16 es enviado a ddrb (configura pto.b salidas)
clr r16 ;limpiamos el reg 16
out ddrd, r16 ;configuramos pto.d como entradas
inicio: in r17, pind ;la entrada del pto.d se va al registro 17
andi r17, $03 ;aislamos los 2 primeros bits
cpi r17, $01 ;compara el reg.17 con 01h (entrada1=1?)
breq arran ;si, goto a arran
cpi r17, $02 ;compara el reg.17 con 01h (entrada2=1?)
breq paro ;si, goto a paro
rjmp inicio ;(salto incond)
arran: ldi r18, $0F ;cargamos 0fh en el reg 18
out portb, r18 ;prenden los cuatro leds de menos peso
rjmp inicio ;conectados en el puertob y goto a inicio
paro: ldi r18, $00 ;cargamos 00h en el reg 18
out portb, r18 ;y lo sacamos por el puertob (leds off)
rjmp inicio ;goto inicio
LENGUAJE para microcontroladores ATMEL
#include <avr/io.h>
#define F_CPU 8000000UL //clock frequency
#include <util/delay.h>
#define ledPin PORTA0
int main(void){
DDRA |= (1<<ledPin); //output pin
while(1){
PORTA ^= (1<<ledPin); //Toggle led
_delay_ms(500); //Delay 0.5 s
}
}
Ahora en eL lenguaje ARDUINO
int pinSalida = 7;
void setup() {
// Configurar los pines del microcontrolador
pinMode(pinSalida, OUTPUT);
}
void loop() {
//Pone a 1 y a 0 el pin de salida.
digitalWrite(pinSalida, HIGH);
delay(500);
digitalWrite(pinSalida, LOW);
}
A simple vista, vemos una mayor abstracción en el lenguaje de ARDUINO, en palabras comunes se entiende a simple vista en mayor porcentaje el código del lenguaje ARDUINO que el código escrito en lenguaje C propio de un microcontrolador, este simple y elemental echo, a encaminado a muchas personas sin tener bastos conocimientos en electrónica y programación computacional, a experimentar con arduino y en el ámbito de la educación como curso de nivel básico para aplicar los conceptos de una manera mas rápida y practica sin detenerse en la manipulación de registros, que es un método de programación profesional que requiere conocimientos avanzados.
fuente parcial:
http://elecrab.com/archives/1En redacción ...
Palabras reservadas (imcompletas y no revisadas) del lenguaje Arduino
se dividen en 3 grupos, Variables Structure & Functions
A: variables
I Constantes
HIGH
LOW
INPUT
OUTPUT
INPUT_PULLUP
LED_BUILTIN
SERIAL
DISPLAY
PI
HALF_PI
TWO_PI
LSBFIRST
MSBFIRST
CHANGE
FALLING
RISING
false
true
null
II Variables de designación de puertos y constantes
DDRB
PINB
PORTB
PB0
PB1
PB2
PB3
PB4
PB5
PB6
PB7
DDRC
PINC
PORTC
PC0
PC1
PC2
PC3
PC4
PC5
PC6
PC7
DDRD
PIND
PORTD
PD0
PD1
PD2
PD3
PD4
PD5
PD6
PD7
III Tipos de datos
void
boolean
byte
char
unsigned char/long/int
double
float
int
long
short
string
class
IV Conversion
char()
byte()
int()
word()
long()
float()
Variable Scope & Qualifiers
static
volatile
const
Utilities
sizeof()
PROGMEM
B: Structure
setup()
loop()
Control Structures
if
if...else
for
switch case
while
do... while
break
continue
return
goto
Further Syntax
; (semicolon)
{} (curly braces)
// (single line comment)
/* */ (multi-line comment)
#define
#include
Arithmetic Operators
= (assignment operator)
+ (addition)
- (subtraction)
* (multiplication)
/ (division)
% (modulo)
Comparison Operators
== (equal to)
!= (not equal to)
< (less than)
> (greater than)
<= (less than or equal to)
>= (greater than or equal to)
Boolean Operators
&& (and)
|| (or)
! (not)
Pointer Access Operators
* dereference operator
& reference operator
Bitwise Operators
& (bitwise and)
| (bitwise or)
^ (bitwise xor)
~ (bitwise not)
<< (bitshift left)
>> (bitshift right)
Compound Operators
++ (increment)
-- (decrement)
+= (compound addition)
-= (compound subtraction)
*= (compound multiplication)
/= (compound division)
%= (compound modulo)
&= (compound bitwise and)
|= (compound bitwise or)
C: Functions
Digital I/O:
pinMode()
digitalWrite()
digitalRead()
Analog I/O:
analogReference()
analogRead()
analogWrite() - PWM
Due & Zero only:
analogReadResolution()
analogWriteResolution()
Advanced I/O:
tone()
noTone()
shiftOut()
shiftIn()
pulseIn()
Time:
millis()
micros()
delay()
delayMicroseconds()
Math:
min()
max()
abs()
constrain()
map()
pow()
sqrt()
Trigonometry:
sin()
cos()
tan()
Characters:
isAlphaNumeric()
isAlpha()
isAscii()
isWhitespace()
isControl()
isDigit()
isGraph()
isLowerCase()
isPrintable()
isPunct()
isSpace()
isUpperCase()
isHexadecimalDigit()
Random Numbers:
randomSeed()
random()
Bits and Bytes
lowByte()
highByte()
bitRead()
bitWrite()
bitSet()
bitClear()
bit()
External Interrupts:
attachInterrupt()
detachInterrupt()
Interrupts
interrupts()
noInterrupts()
Communication:
Serial
Stream
USB (32u4 based boards and Due/Zero only)
Keyboard
Mouse
PD:
hardware y software libre es la posibilidad, de mejorar la educación y educarse, derechos de autor, patentes, registros solo beneficia a unos pocos