Arduino

De Jose Castillo Aliaga
Ir a la navegación Ir a la búsqueda

Arduino és una placa de circuit imprès simple basada en microcontrolador de codi obert provinent de la plataforma de codi obert Wiring amb l'objectiu de fer més simple i accessible el disseny de circuits electrònics amb microcontroladors.

El maquinari consisteix en dissenys simples de maquinari lliure amb processadors Atmel AVR en una placa amb pins E/S. L'entorn de desenvolupament implementa el llenguatge Processing de Wiring, molt semblant a C++. Arduino es pot utilitzar per desenvolupar objectes interactius autònoms o pot ser connectat a programari de l'ordinador (p. ex. Macromedia Flash, Processing, Max/MSP, Pure Data). Les plaques es poden muntar a mà o adquirir-se i els IDE de font oberta es poden descarregar de franc.

Arquitectura

Els microcontroladors com els que impulsen els Arduinos estan dissenyats per a aplicacions embegudes. A diferència de les computadores de propòsit general, un processador encastat normalment té una tasca ben definida que ha de realitzar de manera fiable i eficaç (i a un cost mínim). El disseny de microcontroladors tendeix a ser bastant espartà. Es renuncia als luxes d'emmagatzematge en memòria cau de diverses capes i dels sistemes de memòria virtual basats en disc, per exemple.

El model de Harvard resulta ser una bona elecció per a aplicacions embegudes i el Atmega 328 empleats en l' Arduino UNO utilitza una arquitectura Harvard relativament pura. Els programes s'emmagatzemen a la memòria Flash i les dades s'emmagatzemen a la memòria SRAM.

La major diferència entre aquests microcontroladors i el seu ordinador de propòsit general és la gran quantitat de memòria disponible . L'Arduino UNO té només 32K bytes de memòria Flash i 2K bytes de SRAM. Això és més de 100 mil vegades menys memòria física que un PC de gamma baixa. I això sense comptar el disc!

El treball en aquest ambient minimalista, ha d'utilitzar els seus recursos de manera intel ligent.

Memòria

Dins d'Arduino trobem 3 tipus de memòria:

  • Flash
  • SRAM
  • EEPROM

La memòria flash s'utilitza per emmagatzemar la imatge del programa i les dades inicialitzats. Podeu executar el codi del programa de flash, però no pot modificar les dades en la memòria flash del seu codi d'execució. Per modificar les dades, primer s'han de copiar en la SRAM

La memòria flash és la mateixa tecnologia utilitzada per al pendrives i targetes SD. És no volàtil, pel que el seu programa encara hi serà quan el sistema estiga apagat.

La memòria flash té una vida finita de prop de 100.000 cicles d'escriptura. Així que si carregues 10 programes per dia, tots els dies durant els propers 27 anys, és possible trencar-la. No obstant, si es puguera escriure durant l'execució, pot ser aquests cicles serien insuficients.

SRAM o memòria estàtica d'accés aleatori, es pot llegir i escriure des del programa en execució. La memòria SRAM s'utilitza per a diversos fins per un programa en execució:

  • Dades estàtics - Es tracta d'un bloc d'espai reservat en SRAM per a totes les variables globals i estàtiques del seu programa. Per a les variables amb els valors inicials, el sistema d'execució copia el valor inicial del flash quan s'inicia el programa.
  • Heap - El Heap és per als elements de dades assignats dinàmicament. La pila creix a partir de la part superior de l'àrea de dades estàtica.
  • Stack - La pila és per a les variables locals i ha de mantenir un registre de les interrupcions i trucades a funcions. La pila creix des de la part superior de la memòria cap avall, cap al heap. Cada interrupció, crida a la funció i/o assignació de variable local, fa que la pila creixi.

Free Memory.png


Molts problemes poden sorgir quant l'Stack i el Heap col·lisionen.

Projectes

Comptador

Per a fer aquest comptador utlitzem un Display BCD i un xip cd4511be

Si tenim en compte que el xip decodificador té aquestes entrades:

Cd4511 pin.jpg

i el display aquestes:

Displaybcd.png

Les connexions quedaran:

Arduino cd4511be
2 A
3 B
4 C
5 D
5v Vdd, LT, BL
GND VSS, LE

Les connexions del xip 4511 aniràn a les lletres segons l'esquema.

Contador.png

Primera versió del programa:

void setup()
{
 
  for (int i=2;i<6;i++){ 
  pinMode(i,OUTPUT);
  }
  
}
void loop()
{
  digitalWrite(2,0);
  digitalWrite(3,0);
  digitalWrite(4,0);
  digitalWrite(5,0);
  delay(1000);
  
  digitalWrite(2,1);
  digitalWrite(3,0);
  digitalWrite(4,0);
  digitalWrite(5,0);
  delay(1000);
  
  digitalWrite(2,0);
  digitalWrite(3,1);
  digitalWrite(4,0);
  digitalWrite(5,0);
  delay(1000);
  
  digitalWrite(2,1);
  digitalWrite(3,1);
  digitalWrite(4,0);
  digitalWrite(5,0);
  delay(1000);
  
  digitalWrite(2,0);
  digitalWrite(3,0);
  digitalWrite(4,1);
  digitalWrite(5,0);
  delay(1000);
  
  digitalWrite(2,1);
  digitalWrite(3,0);
  digitalWrite(4,1);
  digitalWrite(5,0);
  delay(1000);
 
  digitalWrite(2,0);
  digitalWrite(3,1);
  digitalWrite(4,1);
  digitalWrite(5,0);
  delay(1000);
  
  digitalWrite(2,1);
  digitalWrite(3,1);
  digitalWrite(4,1);
  digitalWrite(5,0);
  delay(1000);
  
  
  digitalWrite(2,0);
  digitalWrite(3,0);
  digitalWrite(4,0);
  digitalWrite(5,1);
  delay(1000);
  
  
  digitalWrite(2,1);
  digitalWrite(3,0);
  digitalWrite(4,0);
  digitalWrite(5,1);
  delay(1000);
}

Solució amb un for:

int n=0;

byte BCD[16][4]={{0,0,0,0},{1,0,0,0},{0,1,0,0},{1,1,0,0},
{0,0,1,0},{1,0,1,0},{0,1,1,0},{1,1,1,0},{0,0,0,1},{1,0,0,1},
{0,1,0,1},{1,1,0,1},{0,0,1,1},{1,0,1,1},{0,1,1,1},{1,1,1,1}};

void setup()
{
  for (int i=2;i<6;i++){ 
  pinMode(i,OUTPUT); 
  }
}

void loop()
{
  for (int i=0;i<4;i++){
  digitalWrite(i+2,BCD[n][i]);
  }
  delay(100);
 
 if (n!=9) n++; else n=0;
 
}

Fotos: [1] [2] [3]

Enllaços