sistemas embebidos

8
1. Introducción. Una interrupción es generada cuando se requiere que el microprocesador detenga el proceso que está llevando a cabo para poder ejecutar una función específica de quien produce la interrupción. Cuando ejecuta la función específica se dice que el microprocesador atiende la interrupción. Las interrupciones se pueden clasificar como interrupciones de software, hardware y las excepciones. Las interrupciones por software se producen cuando el usuario solicita una llamada al sistema, las interrupciones por hardware son causadas cuando un dispositivo de hardware requiere la atención del microprocesador para que se ejecute su manejador. Por último se encuentran las excepciones donde el propio microcontrolador realiza la interrupción, que es producida por algún suceso como una división entre cero. [1] 2. Registro PORT del Arduino. En el microcontrolador atmega328p existen dos interrupciones INT0 e INT1 que pueden ser configuradas para responder de cuatro maneras diferentes. Pero primero es necesario habilitar las interrupciones, para eso es necesario utilizar EIMSK e introducir un 1 o un 0 dependiendo si se quiere activar una interrupción. Fig. 1 External Interrupt Mask Register Por ejemplo para activar la interrupción INT0 se tendría que ejecutar lo siguiente: EIMSK |= 0x01; Para poder activar la interrupción INT1 se hace:

Upload: martin-castro

Post on 03-Oct-2015

13 views

Category:

Documents


1 download

DESCRIPTION

Como se hace una practica de Sistemas Embebidos.

TRANSCRIPT

1. Introduccin.Una interrupcin es generada cuando se requiere que el microprocesador detenga el proceso que est llevando a cabo para poder ejecutar una funcin especfica de quien produce la interrupcin. Cuando ejecuta la funcin especfica se dice que el microprocesador atiende la interrupcin.Las interrupciones se pueden clasificar como interrupciones de software, hardware y las excepciones.Las interrupciones por software se producen cuando el usuario solicita una llamada al sistema, las interrupciones por hardware son causadas cuando un dispositivo de hardware requiere la atencin del microprocesador para que se ejecute su manejador. Por ltimo se encuentran las excepciones donde el propio microcontrolador realiza la interrupcin, que es producida por algn suceso como una divisin entre cero. [1]

2. Registro PORT del Arduino.En el microcontrolador atmega328p existen dos interrupciones INT0 e INT1 que pueden ser configuradas para responder de cuatro maneras diferentes. Pero primero es necesario habilitar las interrupciones, para eso es necesario utilizar EIMSK e introducir un 1 o un 0 dependiendo si se quiere activar una interrupcin.

Fig. 1 External Interrupt Mask RegisterPor ejemplo para activar la interrupcin INT0 se tendra que ejecutar lo siguiente:EIMSK |= 0x01;Para poder activar la interrupcin INT1 se hace:EIMSK |=0x02;Luego de haber habilitado la interrupcin lo que se tiene que hacer es configurar la manera en la que se necesita que la interrupcin responda, existen cuatro que son: Nivel Bajo Cualquier cambio Flanco de bajada Flanco de subidaCada una de estas se puede configurar para INT0 e INT1, pero antes es necesario utilizar EICRA e introducir una combinacin de 2 bits para cada interrupcin.Un ejemplo de cmo configurar el modo de respuesta de una interrupcin se presenta a continuacin:EICRA |= 0x02;El cual configura la interrupcin INT0 para que responda en flanco de bajada.El cmo se puede configurar cada modo de operacin se observa en la Figura 2 y en la Figura 3.

Fig. 2 Interrupt 1 sense control

Fig. 3 Interrupt 0 sense controlPara saber cules bits corresponden a cada interrupcin es necesario visualizar la Figura 4. Donde la posicin de los bits para EICRA en cada interrupcin es mostrada para poder configurar el modo de operacin.

Fig. 4 External interrupt control register APor ultimo para poder habilitar y deshabilitar las interrupciones en el programa principal es necesario utilizar el sei() que es para habilitar y el cli() que es para deshabilitar. [2]3. Procedimiento.Para poder realizar la prctica se necesit: Arduino uno Cable USB Integrado L293D (Puente H dual). Motor DC. Cable USB para fuente. Protoboard. Cables para conexin. Push Buttons.

Al no utilizar el circuito sugerido, se llevo a cabo el circuito con un puente H dual el cual ayudo a la operacin del motor usando el microcontrolador del arduino. Cabe mencionar que fue necesario la modificacin el modo de accionamiento del motor en cuanto a la combinacin de bits para hacer las operaciones necesarias sobre el motor.La respuesta a cada combinacin se puede observar en la Tabla 1.PC5 (Enable)PC4 (In 1)PC3 (In 2)Accin a tomar

101Forward

110Reverse

100Stop

111Stop

0No se aplicaNo se aplicaStop

Tabla 1. Accin para cada combinacin de bitsLa INT0 fue asignada como forward, mientras INT1 fue como reverse y por ltimo la entrada 24 PC1 fue asignada como stop. Es importante mencionar que el PC2 no fue utilizado ya que solo se necesitaba mandar 3 bits.El diagrama de conexin se observa en la Figura 5.

Fig. 5 Diagrama de conexin Arduino-motorEl programa que se realiz durante la prctica es el que se presenta a continuacin:volatile int x=0; //variable de control para interrupcionesvolatile int y=0; //variable de control para no activar al presionar dos veces INT0volatile int z=0;//variable de control para no activar al presionar dos veces INT1void setup(){ cli(); Serial.begin(9600); DDRD &=0xF3; //PD2 as input DDRC &=0xFD; //PC1 as input DDRC |=0x3C; //PC2-PC5 as outputs PORTD |= 0x0C; //Pull up resistor on PORTC |= 0x02; //Pull up resistor PC1 EICRA |=0x0A; //falling edge EIMSK|=0x03; //enable INTO and INT1 sei(); }void loop(){ while(1) { int i=0; //variable para nuestro timer manual if(check_status_PC1()==0) { if(x==1) //para realizar la operacion desde la interrupcion { PORTC=0x38; for (i; i=2) //control { x=0; } else x=2;}

boolean check_status_PC1(void){if (PINC & 0x02)return 1;elsereturn 0;}

4. Conclusiones.Vctor Manuel Mendoza Guzmn. En esta prctica se implement el uso de interrupciones para el desarrollo de un controlador de direccin de un motor. La dificultad de la prctica se bas en las restricciones que fueron impuestas. Se cre un contador mediante un ciclo FOR para la no utilizacin del delay y resolver el problema de las restricciones. Es importante el utilizar todos los medios disponibles para la solucin de los problemas, por lo que en esta prctica fueron desarrolladas ciertas habilidades para aplicar lo aprendido hasta ahora.Martin Eduardo Castro Vega. Fue importante aprender a utilizar las interrupciones ya que son de mucha utilidad, tambin se analiz el cmo funcionan las interrupciones y que existen de este tipo las cuales pueden ser configuradas su forma de accionamiento de cuatro formas diferentes, es interesante ya que dependiendo de lo que se necesite se puede obtener un diferente funcionamiento.

5. Bibliografa.[1] http://sopa.dis.ulpgc.es/ii-dso/leclinux/interrupciones/system_call/LEC2_INT_SOFT.pdf[2] http://www.atmel.com/Images/doc8161.pdf