Anda di halaman 1dari 37

MICROCONTROLADORES 2. CLASE 2. FEBRERO 24 DE 2010. PROFESOR. ALONSO RETAMOSO LLAMAS.

ARQUITECTURA INTERNA DEL MICROCONTROLADOR MC9S08JM60 El microcontrolador JM60 de la empresa FREESCALE cuenta con una unidad central de procesos (CPU) con 5 registros encargados de casi la totalidad de los procesos internos del dispositivo. Estos son: el acumulador (A), el contador de programa (PC), el registro de condicin de cdigo (CCR), el apuntador de pila (SP) y el registro ndice (H:X) (ver figura).

1. ACUMULADOR. El acumulador (A) es un registro de 8 bits el cual es una de las entradas de la unidad aritmtico lgica (ALU) del microcontrolador y tambin sirve como almacenamiento temporal del resultado que se genera en dicho circuito (ver figura).

2. CONTADOR DE PROGRAMA. El contador de programa (PC) es un registro de 16 bits que entrega la direccin de la instruccin que ejecutar la CPU en el siguiente ciclo de mquina. Si el PC funcionar nicamente con el reloj de entrada, el programa avanzara de manera secuencial, es decir, de instruccin en instruccin sin la posibilidad de realizar saltos. Los saltos (llamados a subrutinas, while, if, else-if, break, return, for, do-while) o cambios de la secuencia uno a uno, se pueden ejecutar gracias a la existencia de la

carga en paralelo. Cuando el PC detecta un alto en el pin LOAD se carga en sus salidas el valor de los datos en paralelo P0..P16 (ver figura).

3. REGISTRO DE CONDICIN DE CDIGO. El registro de condicin de cdigo est ligado al funcionamiento de la ALU, ya que en este se almacenan las banderas que indican el tipo de resultado alcanzado por esta unidad. Si el resultado es igual a cero se activa la bandera Z; si el resultado genera un acarreo del ltimo BIT, se activa la bandera C; si el resultado genera desbordamiento se activar la bandera V; si el resultado genera un acarreo del bit 3 al bit 4 se activa la bandera H. El nico BIT de este registro que no se activa por el resultado de la ALU es I. Este BIT se emplea para habilitar o deshabilitar las interrupciones del microcontrolador (EnableInterrupts I=0, DisableInterrupts I=1) (ver figura).

4. REGISTRO NDICE (H:X). Es un registro de 16 bits con el cual se puede apuntar a cualquier posicin del mapa de memoria del microcontrolador. Al emplear este registro se puede de manera indirecta cargar el acumulador con el dato de la direccin apuntada por el registro (H:X) (ver figura).

5. REGISTRO PUNTERO DE PILA: Es un registro de 16 bits cuya labor es actualizar la pila del microcontrolador cada vez que se llama a una subrutina y se regresa de ella. En cualquier instante guarda el valor de la direccin siguiente disponible en la pila del microcontrolador. Si se llama a una subrutina o se produce una interrupcin el puntero de pila se decrementa. Si se sale de una subrutina o se termina la ejecucin de una interrupcin el puntero SP se incrementa (ver figura).

6. PGINA DE MEMORIA DEL JM60. El microcontrolador cuenta con una pgina de memoria de 65536 posiciones cada una de ellas con un almacenamiento de 8 bits. La pgina de memoria cuenta con 6 sectores distribuidos de la siguiente manera: los sectores 1 y 4 se utilizan para configuracin de los perifricos. El sector 2 es memoria RAM dinmica, en este se almacenan las variables de usuario y las direcciones finales se utilizan como la pila del microcontrolador. El sector 3 se puede acceder desde un perifrico interno y se emplea para el almacenamiento de constantes en tiempo de ejecucin. El sector 6 se utiliza para guardar el programa de usuario y las constantes declaradas con el modificador const de lenguaje C. el sector 5 se emplea como almacenamiento directo de la informacin que puede llegar por el puerto USB del microcontrolador. Cada vez que se llenen las 256 posiciones de este sector se genera una interrupcin la cual sirve para indicar al microcontrolador que debe llevar esa informacin hacia otro espacio de memoria antes que se ejecute otro ciclo USB. A continuacin se muestra la pgina de memoria del microcontrolador JM60.

CONEXIONES ELCTRICAS EN UN MICROCONTROLADOR Las conexiones elctricas son un tem importante en el tema de los microcontroladores. Una conexin mal hecha puede traer consecuencias desastrosas. En este numeral se analizarn algunas de las conexiones ms importantes que se deben tomar en cuenta cuando se disea un circuito cualquiera con base en microcontroladores. Dentro de estas conexiones estn: energa, oscilador, reset y puertos. 1. SUMINISTRO DE ENERGA EN UN MICROCONTROLADOR: En el suministro de energa para un microcontrolador se deben tener en cuenta tres aspectos muy importantes: el ruido producido por las fuentes de alimentacin conmutadas, el aislamiento entre las referencias de los circuitos digitales y analgicos y las protecciones elctricas. A continuacin se muestra un esquema que se puede emplear para energizar un microcontrolador teniendo en cuenta aspectos de protecciones y ruido producido por fuentes conmutadas.

Los condensadores reducen las seales de voltaje, recuerde que los condensadores no admiten cambios bruscos de voltaje I C . La bobina evita alteraciones bruscas en la corriente V L . El diodo zener se emplea en el circuito como proteccin contra sobrevoltajes y contra inversin de polaridad en las entradas del microcontrolador (ver figura).

Los circuitos digitales someten al resto de la circuitera, especialmente la analgica, a conmutaciones fuertes, estas se propagan a los circuitos analgicos a travs de la referencia causando mltiples inconvenientes en los componentes analgicos de un microcontrolador (PLL, convertidor analgico-digita, comparadores analgicos, etc). Para solucionar esta clase de

problemas, los microcontroladores separan cada una de estas referencias. Adems el diseador puede realizar un aislamiento adicional empleando resistencias de 0 (ver figura).

El suministro de energa del mdulo que se utilizar en este curso se puede entregar de dos maneras: la primera a travs del puerto USB de PC y la segunda mediante una fuente externa. La energa que puede suministrar el PC a travs del puerto USB tiene un lmite de hasta 500 mA. Si se conectan varios dispositivos USB al mismo tiempo que el mdulo, la capacidad anteriormente mencionada disminuye por el nmero de dispositivos conectados (ver figura). En el ejemplo de la figura se conectan 4 dispositivos al PC a travs del puerto USB. En este caso, la corriente ms grande que puede entregar el puerto USB al mdulo es de 125 mA. Si la corriente sobrepasa este valor entonces el computador corta el suministro hacia dicho el mdulo.

Si la capacidad de corriente del puerto USB es desbordada por la carga que le impone el mdulo JM60 y los accesorios conectados al mismo entonces se utiliza una conexin externa de energa como la que se muestra a continuacin:

2. CONEXIN DE LA REFERENCIA TEMPORAL EN UN MICROCONTROLADOR: En este caso la referencia de reloj o referencia temporal del microcontrolador se toma a partir de un cristal de cuarzo. Al tener conectado una referencia de reloj, el microcontrolador se convierte en circuito secuencial. En el mdulo de trabajo del JM60 el usuario no tiene que construir el circuito que se muestra a continuacin porque ya fue realizado en el mdulo.

El circuito interno del microcontrolador que maneja el cristal est constituido por un oscilador Collpitts, un PLL y un circuito adicional que divide la frecuencia por 2. La impedancia del lazo de realimentacin del oscilador est conformada por el cristal de 12 Mhz, las capacitancias de 22 pF y la resistencia de 10M. La salida del oscilador Collpitts es una onda sinusoidal de frecuencia 12Mhz. La seal sinusoidal se pasa a travs de un circuito limitador para convertir esta seal en una onda cuadrada de la misma frecuencia. La seal cuadrada de salida del limitador es la seal de entrada del PLL el cual incrementa la frecuencia en un factor igual a 4. La seal de salida del PLL se convierte en la entrada de un circuito que divide por 2 la frecuencia anterior. Este valor final de frecuencia se convierte en la referencia de reloj para los circuitos internos como CPU, TIMERS y otros (ver figura).

De acuerdo a la figura anterior se puede calcular el tiempo que le toma al microcontrolador ejecutar una cantidad dada de ciclos de mquinas de la siguiente forma: si cada ciclo de mquina se ejecuta en un periodo de la frecuencia del bus interna FBUS entonces una rutina de N ciclos se tardar N Seg . Una subrutina que necesita 1000 ciclos de mquinas consume un tiempo igual a 41.66667 . En el siguiente ejemplo se deben determinar el nmero de ciclos necesarios para cumplir con los retardos exigidos por el programa que se muestra a continuacin:

El retardo de 0.1 segundos requiere 0.1 24 10 2.4 millones de ciclos de mquina y el retardo de 0.2 segundos necesita 0.2 24 10 4.8 millones de ciclos de mquina. Estos retardos se pueden construir con una subrutina que se ejecute en la cantidad de ciclos de mquina

que se calcularon previamente. A continuacin se muestra un programa en lenguaje C que ejecuta el diagrama de estados del ejemplo anterior.

//DECLARA LA FUNCIN RETARDO void retardo(long int); //LLAMA LA FUNCIN PRINCIPAL. DESPUES DEL RESET SE LLEGA A ESTE PUNTO. void main(void) { //DECLARA DOS CARACTERES. char a,b; //ENTRA A UN CICLO INFINITO. for (;;) { //CARGA EL CARACTER A CON LA INFORMACIN DEL PUERTO A. a=PTA; //LLAMAR LA FUNCIN DE RETARDO. retardo(2400000); //ALMACENA EN EL CARCTER B LA INFORMACIN DEL PUERTO B. b=PTB; //LLAMAR LA FUNCIN DE RETARDO. retardo(4800000); } } //EJECUCIN FUNCIN retardo. ARGUMENTO DE ENTRADA DELAY (32 BITS). void retardo(long int delay) { //SE DECLARA UN ENTERO LARGO (32 BITS) CUYO NOMBRE ES i. long int i; //CICLO for PARA GENERAR UN RETARDO POR SOFTWARE. for (i=0;i<delay;i++); }

La variable empleada para generar el retardo se llama delay la cual se debe definir como tipo long int para que pueda contar hasta 4800000 ciclos de mquina requeridos por la subrutina anteriormente mencionada. El tipo de dato entero (int) no cumple con la cantidad de ciclos mquinas requeridos por el ejemplo en cuestin. 3. CONEXIN DEL PIN DE REINICIO (RESET): El pin de reinicio (RESET) en un microcontrolador cumple la funcin de poner el programa en una posicin de arranque conocida. Al mantener el pin RST en estado lgico bajo el programa quedar en la posicin de arranque. Si se libera el pin (estado lgico alto) el programa empieza su ejecucin. A continuacin se muestra la conexin de este pin en el mdulo JM60.

4. PUERTOS DISPONIBLES DEL MDULO JM60: El mdulo de trabajo JM60 tiene disponibles los puertos A, B, C, D, E, F y G. Del puerto A se puede emplear los pines A0 y A5; del puerto B se utilizan los pines B0, B1, B2, B3, B4 y B5; del puerto C se usan los pines C0, C1, C2, C3, C4 y C5; del puerto D se emplean los pines D0, D1, D2 y D7; del puerto E los pines E0, E1, E2, E3, E4, E5, E6 y E7; del puerto F los pines F0, F1, F2, F4 y F5 y del puerto G los pines G0 y G1. La conexin del pin G0 del puerto G es especial porque este se emplea para establecer la comunicacin entre el mdulo JM60 y el programa que realiza la programacin de la memoria FLASH del microcontrolador JM60 de FREESCALE. A continuacin se muestra dicha conexin.

PUERTOS DE ENTRADA Y SALIDA DIGITAL EN UN MICROCONTROLADOR Los puertos de entrada y salida digital son pines del microcontrolador que comunican este dispositivo con el mundo exterior (LEDS, RELES, MOTORES, PULSADORES, ETC). A continuacin se muestra el circuito que controla el funcionamiento de un puerto en un microcontrolador.

1. Puerto configurado como entrada digital: El primer paso para configurar el puerto como una entrada de seales digitales consiste en poner en nivel lgico bajo el bus de datos. A continuacin se genera un pulso en la seal CLK_CONFIG lo cual pone la salida del flip-flop de configuracin en nivel lgico bajo. Este nivel de voltaje hace que la compuerta seguidora que comunica la salida del flip-flop de informacin con el puerto se abra y que la compuerta seguidora que va desde el puerto hasta el multiplexor se cierre posibilitando la entrada de seales digitales desde el mundo exterior (puerto).

Despus de configurar el puerto como una entrada de seales digitales, se puede ver su funcionamiento con un circuito externo conectado en dicho pin (interruptor). Si el interruptor se abre, en el bus de datos del microcontrolador se leera un nivel lgico alto, se leera el estado contrario si el interruptor est cerrado (ver figuras).

El puerto de un microcontrolador permite conectar una resistencia de PULL-UP interna con el cual el diseador se ahorra la conexin de una resistencia a 5 voltios que conecte el interruptor con dicho nivel de voltaje (ver figura). Para ello se debe poner la seal PULL-UP en un nivel lgico alto.

2. Puerto configurado como salida digital: El primer paso para configurar el puerto como una salida de seales digitales consiste en poner en nivel lgico alto el bus de datos. A continuacin se genera un pulso en la seal CLK_CONFIG lo cual pone la salida del flip-flop de configuracin en nivel lgico alto. Este nivel de voltaje hace que la compuerta seguidora que comunica la salida del flip-flop de informacin con el puerto se cierre y que la compuerta seguidora que va desde el puerto hasta el multiplexor se abra posibilitando la salida de seales digitales hacia el mundo exterior (puerto).

Si el usuario necesita poner un nivel lgico alto en el puerto debe poner en alto el bus de datos y despus dar un pulso en la seal CLK_DATO del flip-flop de informacin (ver figura). En este caso la corriente sale del puerto hacia la carga y el diodo LED se enciende.

Si el usuario necesita poner un nivel lgico bajo en el puerto, el bus de datos debe estar en nivel lgico bajo y generar un pulso en la seal CLK_DATO del flip-flop de informacin (ver figura). En este caso la corriente en la carga es igual a cero y el diodo LED no se enciende.

En los dos casos anteriores la corriente que llega a la carga sale del puerto. El caso contrario tambin es posible si se conecta la carga como surtidor y no como drenador. En un primer caso se pone la salida en estado lgico bajo y la corriente fluye desde la fuente VDD hacia el puerto del microcontrolador (ver figura). En un segundo caso la salida se pone en estado lgico alto y la corriente no puede fluir hacia el microcontrolador porque la cada de voltaje entre VDD y el puerto es igual a cero (ver figura).

Las conexiones descritas anteriormente son posibles porque la compuerta seguidora conectada a la salida del flip-flop de informacin tiene en su interior un circuito PULL-UP y PULL-DOWN (ver figura).

3. Registro de configuracin PTxDD: Este registro hace parte de la memoria interna del microcontrolador y est conformado por todos los flip-flops de configuracin que tenga el puerto x (x: A,B,C,D,E,F,G). Los ejemplos que se muestran a continuacin sirven para dar una idea acerca de la conexin entre el hardware del microcontrolador y el software que lo maneja.

En el ejemplo anterior se unen las seales CLK_CONFIG del registro PTCDD para cargar todas las salidas (Q) del registro al mismo tiempo. Estos valores hacen, para este caso particular, que todos los pines del puerto C se comporten como salidas. Se debe notar que los bits ms significativos de la instruccin no son representativos para el puerto C ya que este no cuenta con 8 pines.

Este ejemplo se emplea cuando solo se desea cambiar uno de los bits del registro sin alterar los dems. En esta figura solo cambia el bit PTCDD3, pasa del estado lgico alto al estado lgico bajo, con lo cual, el pin del puerto se comporta como entrada digital.

4. Registro de informacin PTxD: Este registro hace parte de la memoria interna del microcontrolador y est conformado por todos los flip-flops de informacin que tenga el puerto x (x: A,B,C,D,E,F,G). El ejemplo que se muestra a continuacin debe configurar primero el puerto C para que sea capaz de controlar dos salidas y dos entradas. Una de las salidas es del tipo PULL-UP y la otra del tipo PULL-DOWN. En cuanto a las entradas, una de ellas necesita resistencia de PULL-UP interna.

El primer paso para tomar el control de este circuito desde el software debe ser la configuracin del mismo, para ello se cargan los registros PTCDD y PTCPE con los datos que permitan manejar una salida PULL UP, una salida PULL DOWN, una entrada con PULL externo y una entrada con PULL UP interno (ver figura).

Despus de la etapa de configuracin se pueden realizar las operaciones de lectura y escritura del puerto PTCD. Como primer ejemplo se escribe en el puerto un dato que permite encender los LEDS de los pines PTCD0 y PTCD1.

El ejemplo 2 consiste en enviar una orden a los LEDS para que se apaguen (ver figura).

El ejemplo 3 cambia el estado de una sola salida en el puerto (ver figura).

El ejemplo 4 lee el estado del puerto C y lo almacena en la variable tipo caracter a (ver figura).

El ejemplo 5 lee el estado del puerto C y lo almacena en la variable tipo caracter a (ver figura).

A continuacin se disear un programa que permita ver a travs de 4 LEDS un conteo ascendente descendente con los nmeros del 0 hasta 15. El circuito debe ser capaz de leer 2 interruptores, uno de ellos detiene el conteo y el otro se emplea para seleccionar conteo ascendente o descendente. La conexin del mdulo JM60 se muestra a continuacin:

La primera etapa de diseo debe ser el diagrama de flujo del programa que se graba en la memoria FLASH del microcontrolador.

A partir del diagrama de flujo se procede a generar el cdigo de la aplicacin que se graba en el microcontrolador. Entonces: void retardo(void); void main(void) { //DECLARA COMO CARACTER LA VARIABLE a. char a=0x0; MCU_init(); //DESHABILITA EL WATCH DOG TIMER. SOPT1=0x20; //CONFIGURA EL PUERTO E. PTEDD=0B00001111; //HABILITA LAS RESISTENCIAS DE PULL UP DE E4 Y E5. PTEPE=0B00110000; //APAGA TODOS LOS LEDS DEL PUERTO E. PTED=0B00000000; for(;;) { // MIENTRAS QUE E4 SEA IGUAL A CERO QUEDARSE EN CICLO INFINITO. while (PTED_PTED4==0); // SI E5 ES IGUAL A CERO INCREMENTE LA VARIABLE a. if (PTED_PTED5==0) { //a=a+1. a++; //SI a=16 ENTONCES a=0. if (a==16) a=0; } //SI E5 NO ES CERO ENTONCES DECREMENTE LA VARIABLE a. else { //a=a-1. a--; //SI a=255 ENTONCES a=15; if (a==255) a=0xF; } //LLAMAR A LA FUNCIN RETARDO. PTED=a; retardo(); } }

// GENERA UN RETARDO DE 0.1 SEGUNDOS. void retardo(void) { int i,j; for (i=0;i<1000;i++) for (j=0;j<2400;j++); } Proceso para crear un proyecto nuevo en CODEWARRIOR: 1. Abrir el programa CODEWARRIOR IDE de la siguiente manera:

2. seleccionar Create New Project.

3. Seleccionar el microcontrolador MC9S08JM60 y presionar Siguiente.

4. Presionar Siguiente.

5. Presionar Siguiente.

6. Seleccionar Device Initialization y despus presionar Siguiente.

7. Presionar Siguiente.

8. Presionar Finalizar.

9. Cerrar las ventanas Tip of The Day y la ventana del Processor Expert.

10. Doble click sobre el archivo main.c

11. Escribir el programa.

12. Salvar el programa.

13. Compilar el programa.

14. Corregir los errores.

El error en este caso es que no se ha definido cual es el tipo de dato de la variable a. En este caso se declara como un caracter y se hace por fuera de main para que se pueda identificar en cualquier parte del programa (variable global). 15. Programa corregido.

16. Abrir el depurador (Debug).

17. Agregue los registros PTED, PTEDD y PTEPE en la ventana cuyo nombre es Data 1. Coloque el puntero del ratn en el interior de la ventana y presione el botn derecho del mismo y selecciona Add Expression.

18. Escriba cada uno de los registros del numeral 17 en la ventana que se muestra a continuacin. Presione el botn OK y repita para los otros 2 registros.

19. Despus del proceso descrito por el numeral 18 la ventada Data 1 debe quedar de la siguiente manera:

20. En la misma ventana del numeral anterior presione sobre ella con el botn derecho del ratn y seleccione el formato binario para todos los registros de la siguiente manera:

21. para avanzar paso a paso utilice la tecla F11 o presione el botn que se muestra a continuacin:

22. la ventana Data 2 muestra la informacin cuando el programa pasa por una funcin, es decir, sirve para exhibir los datos i y j de la subrutina de retardo.

23. Para cambiar los valores de los interruptores utilice la ventana de comandos de la siguiente manera:

Anda mungkin juga menyukai