miércoles, 6 de junio de 2012

Erregistroen bidezko kontrola

Kosta zait baina azkenean zerbait aurkezteko denbora eduki dut. Ikasleek klasean egin duten lana pixkat moldatu behar izan dut garbiago ulertu ahal izateko ariketa eta berarekin doan teoria.

Orain arte pin bat irteera modura hasieratu eta 0 edo 1-ean jartzeko gure arduinoan PINMODE eta DIGITALWRITE funtzioen bidez egin dugu. Era hau oso erreza programatzen da, baina ez da batere eraginkorra, denbora asko behar baitu funtzioa exekutatu ahal izateko. Hori lantzeko duela zenbait denbora 10 Led Argi jokoa ariketa ikusi genuen.

Beste era berdina egiteko mikrokontroladoreak dituen erregistroak zuzenean programatuz egin dezakegu. Era honetara zailagoa da programazioa, gainera mikrokontroladorearen barne arkitektura ezagutu beharra dugu. Aldi berean erregistroak zuzenean programatuz denbora asko aurrezten dugu eta sketch-a denbora laburragoan exekutatzen da.

Mikroaren arkitektura ezagutzeak zera esan nahi du, arduino plakako mikrokontroladorearen pin bakoitza zer den ezagutzea. Horrez gain pin-ak kontrolatu ahal izateko barne erregistro batzuk BAXUAN edo ALTUAN jarri beharko dira.



Komentatu dugun modura erregistroen bidez lor daiteke hori. Gaiari buruzko informazio gehiago nahi izan ez gero Atmega 328 mikrokontroladorearen datasheet-a irakurtzea komeni da. Erregistroen funtzionamendua ulertu ahal izateko, arduinok dituen 3 erregistroen bidez (DDR, PORT eta PIN) pultsagailu bat sakatzean led bat piztuko dugu eta askatzean led-a itzali egingo da.


  • DDRX: pin bat irteerak edo sarrera modura definitzen du, 1 sartu ezkero irteera eta 0 sartu ezkero sarrera.
  • PORTX: sarrera bezela definitu ditugun pinetan 1 sartu ezkero pin barnean dagoen pull up-a aktibatzen du eta 0 sartu ezkero desaktibatu. Irteera bezela definituta badugu pina, 1 sartu ezkero 5V aterako ditugu pin horretatik eta 0 jarri ezkero 0V.
  • PINX: sarrerak irakurtzen ditu, 1 ematen badu sarrera hori kanpotik elikatzen ari dela esan nahi du, 0 ematen badu kanpotik ez zaio ezer elikatzen ari.
X-a Atmega 328p-ak dituen 3 portuetako batengatik ordezkatu behar da (B, C eta D portuak).

Proteusen zirkuitu elektrikoa hemengo hau da:


Hemen bideoa duzue programaren funtzionamenduarekin:
                  

eta azkenik sketch-a  daukagu hemen azpian:

int x=0;
void setup()
{
  Serial.begin(9600);
  DDRD = B00010000;   //D portuko 4. pina irteera, besteak sarrera
  PORTD = B11101111;  //D portuko 4. pina BAXUAN, besteak pull-up aktibo
}
void loop()
{
  x=PIND & B00000010;  //D portua irakurri eta 1.pina gorde
  if(x==0)             //botoia dakatua badago...
  {
    PORTD = B11111111; //D portuko 4.pina ALTUAN, besteak pull-up aktibo
  }  
  else                 //botoia sakatua ez dagoenez
  {
    PORTD = B11101111; //D portuko 4.pina BAXUAN, besteak pull-up aktibo

  }
}


No hay comentarios:

Publicar un comentario