Beruflich Dokumente
Kultur Dokumente
Captulo 3
Una de las razones del xito de los PIC se basa en su utilizacin. Cuando se aprende a manejar uno de ellos, conociendo su arquitectura y su repertorio de instrucciones, es muy fcil emplear otro modelo. Concretamente se ha utilizado el PIC 18F452 por varias razones: Dispone de un gran nmero de pines de propsito general. Posee una arquitectura para la mejora de la optimizacin de cdigo cuando se utiliza programacin en C. Su precio puede ser superior a los de otros microcontroladores de Microchip, pero al no ser un proyecto pensado para producir muchas unidades merece la pena ese gasto adicional. Posee mucha variedad de interrupciones, muy til para generar seales peridicas o para el uso de botones. Permite velocidades superiores a otros de gama inferior, lo cual nos va a ser muy til para la generacin de seales mediante el HVDAC. Adems, cuanto ms flexible sea el diseo del sistema de desarrollo mayor ser el nmero de dispositivos que podemos controlar en un futuro. Trae implementado en el hardware los elementos necesarios para una comunicacin RS232, que ser la que vamos a utilizar en el proyecto para comunicarnos con el PC.
Captulo 3
1 Caractersticas relevantes
1 La arquitectura del procesador sigue el modelo Harvard: En esta arquitectura, la CPU se conecta de forma independiente y con buses distintos con la memoria de instrucciones y con la de datos y as permitir su acceso simultaneo.
Bus de datos
MEMORIA DE DATOS
Bus de Instrucciones
MEMORIA DE INSTRUCCIONES
CPU
8
Figura 1. Modelo Harvard
12
2 Se aplica la tcnica de segmentacin (pipe-line) en la ejecucin de las instrucciones: La segmentacin permite al procesador realizar al mismo tiempo la ejecucin de una instruccin y la bsqueda del cdigo de la siguiente. De esta forma se puede ejecutar cada instruccin en un ciclo (un ciclo de instruccin equivale a cuatro ciclos de reloj) excepto las instrucciones de salto que ocupan dos ciclos al no conocer la direccin de la siguiente instruccin hasta que no se haya completado la de bifurcacin. Se puede observar en el esquema de la figura 2.
CLK
ciclo
BI3
BI2
BI1
EI3
EI2
EI3
3 El formato de todas las instrucciones es de la misma longitud: Las instrucciones de los microcontroladores de la gama baja tienen una longitud de 12 bits. Las de la gama media tienen 14 bits y 16 las de la gama alta. Esta caracterstica es muy ventajosa en la optimizacin de la memoria de instrucciones y facilita enormemente la construccin de ensambladores y compiladores.
Captulo 3
4 Procesador RISC (Computador de Juego de instrucciones reducido): Los modelos de la gama baja disponen de un repertorio de 33 instrucciones, 35 los de la gama media y hasta 75 los de la alta, como nuestro 18F452. 5 Todas las instrucciones son ortogonales: Cualquier instruccin puede manejar cualquier elemento de la arquitectura como fuente o como destino. 6 Arquitectura basada en un banco de registros: Esto significa que todos los objetos del sistema (puertas de E/S, temporizadores, posiciones de memoria, etc.) estn implementados fsicamente como registros. 7 Diversidad de modelos de microcontroladores con prestaciones y recursos diferentes: La gran variedad de modelos de microcontroladores PIC permite que el usuario pueda seleccionar el ms conveniente para su proyecto. 8 Herramientas de soporte potentes y econmicas: La empresa Microchip y otras que utilizan los PIC ponen a disposicin de los usuarios numerosas herramientas para desarrollar hardware y software. Son muy abundantes los programadores, los simuladores software, los emuladores en tiempo real, Ensambladores, Compiladores C, Intrpretes y Compiladores BASIC, etc.
Captulo 3
soportar las E/S comprendido entre 12 y 20. El voltaje de alimentacin admite un valor muy flexible comprendido entre 2 y 6,25 V, lo cual posibilita el funcionamiento mediante pilas corrientes teniendo en cuenta su bajo consumo (menos de 2 mA a 5 V y 4 MHz). Y por otro lado, conviene nombrar dos restricciones importantes de la gama baja y es que la pila slo dispone de dos niveles, lo que supone no poder encadenar ms de dos subrutinas y adems no admiten interrupciones.
Captulo 3
3 PIC 18F452
3.1 Caractersticas generales
A continuacin enumeramos las principales caractersticas de este microcontrolador de gama alta: Velocidad de funcionamiento hasta 40 MHz. 40 pines y puertos A, B, C, D, E. Juego de instrucciones RISC. Memoria de programa de 32 Kbytes. Memoria de datos de 1536 bytes. Memoria EEPROM de 256 bytes. Instrucciones de 16 bits de anchura. Direccionamiento de datos de 8 bits. 18 fuentes de interrupcin con niveles de prioridad. Multiplicador hardware de un solo ciclo de 8 x 8 bits. Pines para interrupciones externas. Temporizadores de 8 y 16 bits. 2 mdulos capturadotes, comparadores y de modulacin PWM. Puerto serie sncrono que soporta modo SPI e I2C. USART direccionable que soporta RS-232 y RS-485. Convertidor analgico digital de 10 bits con 8 canales de entrada. Deteccin de bajo voltaje programable. Ahorro de energa mediante modo SLEEP.
Captulo 3
MCLR/VPP: Reset externo. Por esta entrada se aplica tambin la tensin / VPP usada en la grabacin del programa. RA0/AN0: E/S digital o entrada analgica. RA1/AN1: E/S digital o entrada analgica. RA2/AN2/VREF: E/S digital, entrada analgica o salida de la tensin de referencia. RA3/AN3/ VREF: E/S digital, analgica o entrada externa de VREF. RA4/TOCKI: E/S digital o entrada del reloj para TMR0. RA5/AN4/SS/LVDIN: E/S digital o entrada analgica. Seleccin del puerto serie sncrono o deteccin de bajo voltaje. RB0/INT0-RB2/INT: E/S digitales del Puerto B. Pueden actuar como entrada de interrupcin externa. RB3/CCP2: E/S digital captura/comparacin. del puerto B. Salida del mdulo 2 de
RB4: E/S digital puerto B. Interrupcin al cambiar el valor del pin. RB5: E/S digital puerto B. Interrupcin al cambiar el valor del pin. Pin habilitador para la programacin ICSP de bajo voltaje. RB6: E/S digital puerto B. Interrupcin al cambiar el valor del pin. Pin de reloj para la programacin ICSP. RB7: E/S digital puerto B. Interrupcin al cambiar el valor del pin. Pin de datos para la programacin de ICSP.
Captulo 3
RE0/RD/AN5: E/S digital del Puerto E. Seal de lectura del Puerto paralelo esclavo. Entrada analgica. RE1/WR/AN6: E/S digital. Seal de escritura del Puerto paralelo esclavo. Entrada analgica. RE2/CS/AN7: E/S digital. Seal de activacin del Puerto paralelo esclavo. Entrada analgica. VDD: Entrada de la alimentacin positiva del dispositivo. VSS: Entrada de la alimentacin negativa del dispositivo. OSC1/CLKIN: Entrada al cristal cuarzo o reloj externo OSC2/CLKOUT: Salida del cristal. En modo R-C por esta patita sale FOSC1. RC0/T1OSO/T1CL1: E/S digital del Puerto C. Conexin del oscilador externo para el temporizador TMR1 o entrada de reloj para el TMR1. RC1/T1OSI/CCP2: E/S digital del Puerto C. Conexin del oscilador externo para TMR1 o salida del modulo 2 de captura/comparacin. RC2/CCP1: E/S digital captura/comparacin. del Puerto C. Salida del modulo 1 de
RC3/SCK/SCL: E/S digital. E/S de reloj para el Puerto serie sncrono (SSP) de los mdulos SPI a I2C. RC4/SDI/SDA: E/S digital. Entrada de datos serie en el modo SPI. E/S de datos serie en modo I2C. RC5/SD0: E/S digital del Puerto C. Salida de datos serie en el modo SPI. RC6/TX/CK: E/S digital. Transmisin serie asncrona. Entrada de reloj para comunicacin serie sncrona. RC7/RX/DT: E/S digital. Recepcin serie asncrona. Lnea de datos en la comunicacin serie sncrona. RD0/PSP0-RD7/PSP7: E/S digitales del Puerto D. Este Puerto puede trabajar como Puerto paralelo esclavo para interconexin con un bus de datos de 8 bits de otro microprocesador.
Una vez explicado el funcionamiento de cada puerto del PIC18F452, en la siguiente figura extrada del data-sheet se muestra su arquitectura interna, es decir, un diagrama de bloques donde se muestran los perifricos y las lneas de entrada y salida.
Captulo 3
Captulo 3
Captulo 3
RCIO: capacidad y resistencia externas con pin de entrada salida habilitado. RC: capacidad y resistencia externas.
En estas configuraciones tan solo se necesita un condensador y una resistencia. Se utiliza cuando no se necesita una precisin muy alta. La frecuencia de funcionamiento depender, adems de los valores de la resistencia y el condensador, de la temperatura. La configuracin fsica es la siguiente:
EC: Reloj externo. EC: Reloj externo con pin de entrada salida habilitado.
Captulo 3
3.4 RESET
El reset de los microcontroladores puede ser originado por las siguientes causas: Conexin de la alimentacin (POR: Power On - Reset). Activacin del puerto MCLR (Master Clear Reset) durante una operacin normal. Activacin de MCLR en el estado de Reposo o SLEEP. Desbordamiento del Perro guardin. Instruccin de RESET. Circuito de Brown-out, se activa cuando Vdd cae por debajo de un umbral. Llenado de la pila. Desbordamiento de la pila.
A la mayora de los registros no les afecta el RESET, sin embargo el resto son llevados obligatoriamente a un estado de reset. Existe un registro llamado RCON que contiene 5 bits que actan como banderas para indicar el tipo de RESET que se ha producido. Estos cinco bits son: RI, T0, PD, POR y BOR, los cuales pasan de 1 a 0 cuando se activan y lo hacen de la siguiente manera segn la situacin de RESET producida:
Captulo 3
Captulo 3
3.5.3 Organizacin de la memoria de datos La memoria de datos viene implementada en memoria RAM esttica. Cada registro posee una direccin de 12 bits, lo que permite tener hasta 4096 bytes de memoria de datos. El mapa de memoria de datos est dividido en 16 bancos de 256 bytes cada uno. Los cuatro bits menos significativos del registro de seleccin de banco seleccionan cual es el banco al que se acceder. Adems, esta memoria contiene el registro de funciones especiales y el registro de propsito general. El primero de ellos es usado para el control y el estado del controlador y de los perifricos, mientras que el segundo se usa para almacenamiento de datos. Veamos en las siguientes figuras el mapa de la memoria de datos y todos los registros de funciones especiales:
Los registros son de 8 bits y el conjunto de registros est formado por cuatro bancos, como se puede ver en la figura de la pgina siguiente:
Captulo 3
3.5.4 Banco de acceso El banco de acceso es una mejora en la arquitectura muy til para la optimizacin del cdigo de los compiladores de C, precisamente el lenguaje que vamos a utilizar en este proyecto. La regin de la memoria de datos puedes ser usada para: Evaluaciones computacionales intermedias. Variables locales de subrutinas. Cambio de contexto de las variables ms rpido. Variables comunes. Evaluacin o control ms rpido de los registros de funciones especiales.
3.5.5 Registro de estado El registro de estado contiene el resultado de las operaciones aritmticas de la ALU. Consta de 5 bits que indican: N, si el ltimo resultado fue negativo; OV, si se produjo un desbordamiento; Z, si el resultado de la ltima operacin fue 0 y 2 bits ms de acarreo de borrado.
Captulo 3
Por ltimo, comentar que tanto la lectura como la escritura y el borrado de la memoria flash requiere de una secuencia de instrucciones en lenguaje ensamblador, que en C es considerablemente ms reducida.
Captulo 3
Los bits de control RD y WR inician las operaciones de lectura y escritura respectivamente. Estos bits no pueden ser puestos a 0, slo es posible ponerlos a 1 por software, y ser el hardware quien los ponga a 0 cuando la operacin termine. De esta manera se previenen interrupciones en los procesos de lectura o escritura. 3.7.1 Lectura de la memoria de datos EEPROM Para leer una zona de la memoria EEPROM se debe primero escribir la direccin en el registro EEADR, luego poner a 0 los bits EEPGD y CFGS (bits sptimo y sexto del registro EECON1 respectivamente) y por ltimo poner a 1 el bit de control RD. El dato estar disponible en el siguiente ciclo de instruccin. 3.7.1 Escritura de la memoria de datos EEPROM Para una escritura ser algo similar, primero se debe escribir la direccin en el registro EEADR y el dato a escribir en EEDATA, luego habr que seguir una secuencia de operaciones. sta consiste primero en deshabilitar las interrupciones, luego escribir 55h en EECON2, tras esto escribir AAh en EECON2 y por ltimo poner el bit de control WR a 1. Adems es necesario que el bit WREN del registro EECON1 est a 1 para permitir las escrituras. De este modo se evitan escrituras accidentales.
3.9 Interrupciones
Una interrupcin consiste en una detencin del programa en curso para realizar una determinada rutina que atienda la causa que ha provocado la interrupcin. Es como una llamada a subrutina, que se origina por otra causa que no es una instruccin del tipo CALL (instruccin en ensamblador para llamar a subrutinas). Tras la terminacin de la rutina de interrupcin se retorna al programa principal en el punto en que se abandon. Las causas que originan una interrupcin pueden ser externas, como la activacin de un pin con el nivel lgico apropiado, e internas, como las que pueden producirse al desbordarse un temporizador, como el TIMER 0. En las aplicaciones industriales, las interrupciones son un producto muy potente para atender los acontecimientos fsicos en tiempo real. Las interrupciones evitan que la UCP explore continuamente el nivel lgico de un puerto o el valor de un contador. Los PIC18FXXX tienen mltiples fuentes de interrupcin y prioridades. Existen diez registros para controlar las operaciones de interrupcin, estos son: RCON: el bit sptimo de este registro se encarga de habilitar las prioridades en las interrupciones.
Captulo 3
INTCON, INTCON2, INTCON3: registros de lectura y escritura que contienen bits de enable, de prioridad y banderas. PIR1, PIR2: estos dos registros contienen bits de bandera individual para las interrupciones de perifricos. PIE1, PIE2: contienen los bit habilitadores individuales para las interrupciones de perifricos IPR1, IPR2: contiene los bits de prioridad individuales para las interrupciones de perifricos.
Cada causa de interrupcin, excepto INT0, esta controlada mediante tres bits. Uno de ellos acta como una bandera de sealizacin que indica si se ha producido o no el acontecimiento, otro es el permiso o prohibicin de la interrupcin y el ltimo indica baja o alta prioridad de la interrupcin. Cuando una interrupcin es atendida, el GIE (Habilitador global de Interrupciones) es desactivado para evitar que se produzca otra interrupcin al mismo tiempo, volviendo a activarse al salir de la subrutina. La direccin de retorno es puesta en la pila y en el contador de programa se carga la direccin de vector de interrupcin (000008h 000018h dependiendo del nivel de prioridad). En la figura siguiente se ofrece el esquema, compuesto de puertas lgicas, que controla la generacin de la interrupcin cuando aparece un nivel alto en su lnea INT de salida.
Captulo 3
3.10.1 Puerto A Se trata de un puerto bidireccional de 7 bits. Dependiendo del valor en TRISA se comportarn como entrada o salidas. Al leer el registro PORTA se obtiene el estado de los pines. El pin RA4 es multiplexado con la entrada de reloj del TIMER 0, el resto de pines del puerto tiene niveles de entrada TTL y manejadores de salida CMOS. Estos pines, adems, estn multiplexados con entradas analgicas y las entradas de referencia Vref + y Vref -. El modo de operacin de cada puerto es seleccionado mediante la puesta a 0 o a 1 del registro ADCON1. 3.10.2 Puerto B Registro bidireccional de anchura 8 bits. TRISB y PORTB tienen el mismo cometido que en el puerto A. Hay que anotar que tras un reset estos pines son configurados como entradas digitales. Cuatro de los pines del puerto B, RB4:RB7, pueden ser fuente de interrupcin cuando cambia el valor que tienen a la entrada. Slo si estn configurados como entradas es posible que acten de esta forma. RB0:RB2 pueden ser (si se configuran de tal modo) fuente de interrupcin externa. El pin RB3 puede ser configurado mediante el pin de configuracin CCP2MX como pin perifrico alternativo para el mdulo de comparacin CCP2. 3.10.3 Puerto C Es un puerto bidireccional de 8 bits, cada patita acta como entrada o salida digital, segn la programacin de TRISC. Adems, tambin puede actuar como entrada o salida
Captulo 3
de diversos perifricos internos, debindose tener cuidado en la configuracin del registro TRISC en este caso. Para informacin ms detallada se puede consultar la pgina 19 de esta memoria o mirar el data sheet del dispositivo. 3.11.4 Puerto D De nuevo se trata de un registro de 8 bits de anchura, con los correspondientes registros TRISD y PORTD. Adems de cmo puertos de entrada salida digitales, tambin puede funcionar como Puerto Paralelo Esclavo para soportar la interconexin directa con el bus de datos de 8 bits de otro microprocesador. En este caso los buffer de entrada son TTL. Para funcionar en este modo hay que poner a 1 el bit 4 (PSMODE) de TRISE. En tal caso, las lneas RE <2:0> del Puerto E pasan a soportar las seales de control CS, WR y RD, entre el Puerto D y el bus del microprocesador. Cada vez que el microprocesador realiza un ciclo de lectura o escritura sobre el Puerto D el bit 7 (PSPIF) del registro PIR1 se pone a 1. 3.10.5 Puerto E Este puerto, que slo dispone de tres patitas, se configura como entradas digitales tras un RESET. Las 3 patitas pueden funcionar como E/S digitales, segn la programacin de los tres bits menos significativos del registro TRISE. Tambin pueden actuar como seales de control (RD, WR y CS) para el flujo de datos entre un microprocesador y el Puerto D, cuando esta programada en el modo Esclavo. Deben programarse como entradas en este caso. Finalmente, tambin pueden realizar estos tres pines la funcin de canal de entrada analgica para el Conversor A/D, segn la programacin del registro ADCON1.
3.11 Temporizadores
3.11.1 TMR0 El primer temporizador tiene las siguientes caractersticas: Contador temporizador de 8 o 16 bits (seleccionable por software). Posibilidad de lectura y escritura. Prescaler de 8 bits programable por software slo para este temporizador. Fuente de reloj externa o interna segn se elija. Interrupcin en el desbordamiento. Registro T0CON para controlar todos los aspectos, incluido el prescaler.
Este temporizador, por ser el principal y el resto bastante similares a l, lo explicaremos ms detalladamente. En la siguiente figura se muestra los distintos bits y sus funciones del registro T0CON:
Captulo 3
El temporizador 0 puede actuar como temporizador o contador. Si funciona como temporizador (poniendo a 0 el bit T0CS) el registro aumentar una unidad con cada ciclo de instruccin. Si funciona como contador (un 1 en el bit T0CS), el registro aumentar con cada subida o bajada del pin RA4/T0CKI. Este aumento ser producido con el flanco de bajada o de subida segn se programe en el bit T0SE. Los registros que guardan el valor del contador son TMR0L y TMR0H para el byte menos significativo y el ms significativo respectivamente. Como se dio a conocer en las caractersticas, se dispone de un contador de 8 bits que hace las veces de prescaler. En este contador no podemos escribir, ni podemos leer de l. El bit PSA determina, si se pone a 0, que se va a utilizar el prescaler y mediante los bits PS0:PS2 se le asigna un valor entre 0 y 256. La interrupcin del temporizador 0 ocurre cuando el contador se desborda, ya sea desde 00h hasta FFh en modo de 8 bits, o de FFFFh hasta 0000h en modo 16 bits. Este desbordamiento pone a 1 el bit TMR0IF, a no ser que se enmascare mediante la puesta a 0 del bit TMR0IE.
Captulo 3
3.11.2 Temporizador TMR1 El temporizador 1 posee las siguientes caractersticas: Contador temporizador de 16 bits (implementado con 2 registros llamados TMR1H y TMR1L). Posibilidad de lectura y escritura. Seleccin de reloj externo o interno. Interrupcin en el desbordamiento. Posibilidad de RESET desde el mdulo CCP. Registro T1CON para controlar el temporizador.
Este temporizador puede funcionar como temporizador y como contador externo e interno. El modo de operacin se determina mediante el bit TMR1CS del registro T1CON, si ste vale 0 el temporizador aumentar con cada ciclo de instruccin, si por el contrario vale 1 aumentar con cada flanco de subida del reloj externo o del oscilador interno que posee este temporizador (se activa con el bit T1OSCEN). Cuando este oscilador es habilitado los pines del dispositivo RC1/T1OSI y RC0/T1OSO/T1CKI pasan a ser entradas directamente. Respecto a la interrupcin, cuando se produce el desbordamiento y la interrupcin est habilitada (bit TMR1IE a 1), se pone a uno la bandera TMR1IF para indicar que el contador ha llegado a FFFFh. 3.11.3 Temporizador TMR2 Este temporizador, el tercero del microcontrolador, tiene las caractersticas siguientes: Contador de 8 bits (registro TMR2). Registro peridico de 8 bits (registro PR2). Se puede leer y escribir. Prescaler programable (1:1, 1:4 y 1:16 mediante dos bits del registro T2CON). Postscaler programable (1:1 hasta 1:16 mediante cuatro bits del mismo registro). Interrupcin en la coincidencia de TMR2 y PR2. Registro de control T2CON. Posibilidad de ser usado como tiempo base para PWM (modulacin de anchura de pulsos).
Captulo 3
Para minimizar el consumo, este contador puede ser apagado o encendido mediante el bit TMR2ON del registro T2CON. Este temporizador ser el que utilizaremos en la aplicacin del proyecto, principalmente por la utilidad de poder generar una interrupcin mediante contadores internos y pasados tantos ciclos de instruccin como uno desee. Veamos un esquema funcional:
El temporizador 2 puede ser utilizado como tiempo base para los perifricos de modulacin de anchura de pulsos o el de captura y comparacin. El reloj de entrada tiene una frecuencia que es la cuarta parte de la del oscilador y tiene, como se nombr antes, la posibilidad de utilizar un prescaler al principio y un postscaler tras la comparacin con PR2. El contador del temporizador cuenta hasta que su valor coincide con el de PR2, en ese momento se resetea y empieza la cuenta de nuevo. Luego tras pasar por el postscaler se producir una interrupcin si sta est habilitada. PR2 es lgicamente un registro en el que est permitida la lectura y la escritura. Vemos el registro de control de este temporizador:
Captulo 3
3.11.4 Temporizador TMR3 A continuacin estn las caractersticas de este ltimo temporizador: Contador temporizador de 16 bits (dos registros de 8 bits llamados TM3H y TMR3L para el byte alto y el bajo respectivamente). De lectura y escritura. Reloj interno o externo seleccionable. Interrupcin en el desbordamiento. Registro para el control del Timer3 T3CON.
Este temporizador tiene un funcionamiento totalmente igual al Timer1, para ms informacin consultar el Data Sheet.
Los mdulos CCP1 y CCP2 son idnticos, excepto en ciertas funciones especiales de disparo. Ambos constan de dos registros CCPRxH y CCPRxL. 3.12.1 Modo de Captura En este modo el registro CCPRxH/L de 16 bits captura el valor contenido en el TMR1 o TMR3, siempre que ocurra uno de los siguientes acontecimientos en la pata Rcy/CCPx del Puerto C, que previamente ha tenido que configurarse como entrada en el registro TRISC: Un flanco ascendente. Un flanco descendente. Cada 4 flancos ascendentes. Cada 16 flancos ascendentes.
Captulo 3
Al realizarse una captura se activa la bandera CCPxIF del registro PIR1 o PIR2 y si se programa adecuadamente el bit de permiso en PIE1 o PIE2, se genera una interrupcin. Ya se puede leer el valor del registro CCPRx. Cuando se produce una captura y no se ha ledo el contenido de CCPRx se borra y pasa a contener el nuevo. Si se van a modificar las condiciones en las que se va a efectuar la captura conviene detener o desactivar el modulo CCP para que no se produzcan falsas interrupciones durante la operacin. Una aplicacin del modo de Captura puede ser la medicin de los intervalos de tiempo que existen entre los impulsos que llegan a la pata Rcy/CCPx configurada como entrada. En este modo de trabajo TMR1 debe usarse como entrada de reloj externo sincronizado. 3.12.2 Modo de Comparacin Cuando un modulo CCP trabaja de esta manera el contenido del registro CCPRxH/L se compara continuamente con el del TMR1 o TMR3, que debe trabajar en modo sncrono. Cuando coinciden ambos valores la patita RC2/CCP1 (RC1/CCP2), que previamente se habr configurado como salida, puede bascular a 1, a 0, o bien no variar (dependiendo de los bits CCP1M3:CCP1M0 (CCP2M3:CCP2M0)), pero se activar el sealizador CCPxIF. En tal caso, si el bit de permiso esta activado se provoca una interrupcin. Si se selecciona la funcin especial de disparo, el CCP1 pone a 0 al TMR1 con lo que CCPR1 funciona como un registro de periodos capaz de provocar interrupciones peridicamente. Tambin el CCP1 o CCP2 pone a 0 el TMR1 o el TMR3 y por ltimo CCP2 inicia una conversin en el Convertidor A/D, con lo que se pueden realizar peridicamente conversiones de analgico-digitales, sin el control del programa de instrucciones. 3.12.3 Modo de modulacin de Anchura de Pulsos (PWM) En este modo CCP1 produce una salida en modulacin de anchura de pulsos de hasta 10 bits de resolucin. Antes, el segundo bit de TRISC se debe poner a 0 para configurar el pin RC2/CCP1 como salida. Una salida PWM tiene un periodo base y un periodo en el cual la salida est a nivel alto. El periodo base se especifica mediante el registro PR2 y se puede calcular mediante la frmula: Periodo base = (PR2+1) 4 TOSC Prescaler TMR2 Cuando el valor de registro PR2 coincide con TMR2 ocurren los siguientes tres eventos: TMR2 es puesto a 0. El pin CCP1 es puesto a 1. El periodo a nivel alto es latcheado de CCPR1L a CCPR1H.
Captulo 3
El periodo a nivel alto se especifica escribiendo en el registro CCPR1L (los 8 bits ms significativos) y en los bits cuarto y quinto del registro CCP1CON (los dos bits menos significativos). La siguiente ecuacin nos calcula el tiempo de este periodo: Tiempo a nivel alto = (CCPR1L:CCP1CON<5:4>) TOSC (TMR2 Preescaler) La figura 15 representa cualquiera de los registros CCP1CON o CCP2CON. Los bits 4 y 5 funcionan solamente en el modo PWM y son los dos bits de menos peso cuando se trabaja con una resolucin de 10 bits. CCPxM3:CCPxM0 seleccionan el modo de trabajo.
Captulo 3
Cada puerto asociado al convertidor puede ser configurado como entrada analgica o como entrada salida digital (RA3 tambin puede ser voltaje de referencia). Los registros ADRESH y ADRESL guardan el resultado del convertidor. Cuando una conversin es completada, tras guardarse el valor en los registros anteriores, el bit GO/DONE (ADCON0<2>) es puesto a 0 y el bit de interrupcin ADIF es puesto a 1. En la siguiente figura est el diagrama de bloques de este mdulo:
Para hacer una conversin se deben seguir los siguientes pasos: Configurar el mdulo analgico digital. Configurar los pines analgicos, el voltaje de referencia y los pines de entrada salida digital (ADCON1). Seleccionar el canal de entrada (ADCON0). Seleccionar el reloj de conversin. Encender el mdulo. Configurar la interrupcin. Poner a 0 el bit ADI. Poner a 1 el bit ADIE. Poner a 1 los bit GIE y PEIE.
Esperar el tiempo de adquisicin requerido. Empezar la conversin (poner a 1 el bit GO/DONE de ADCON0).
Captulo 3
Esperar que la conversin se complete o la interrupcin suceda. Leer el resultado de los registros ADRESH y ADRESL y poner el bit ADIF a 0 si es necesario. Es necesario esperar dos veces el tiempo por bit (definido como TAD) antes de realizar otra conversin.
La conversin A/D requiere de 12 TAD por cada conversin de 10 bits. La fuente del reloj de la conversin se puede seleccionar por software y existen siete opciones posibles que van desde dos hasta sesenta y cuatro veces el periodo del oscilador en potencias de dos. Para una conversin correcta se debe asegurar un TAD de al menos 1.6 s. En el Data Sheet del microcontrolador se puede encontrar una informacin ms extensa sobre este mdulo, que aqu no merece la pena ser incluida.
Captulo 3
puede recibir y transmitir ocho bits de datos simultneamente. SSPSR es un registro de desplazamiento que funciona serie/paralelo/serie. Cuando se acaba de transmitir o recibir un dato completo se activa el bit BF (Buffer Lleno) del registro SSPSTAT. Tambin lo hace la bandera SSPIF y si el bit de permiso esta activado se genera una interrupcin. Cuando se recibe un dato durante una transmisin se ignora y se activa el bit WCOL del registro SSPCON que indica que se ha producido una colisin. (Para ver los detalles de funcionamiento de los registro SSPSTAT y SSPCON consultar el Data Sheet del 18F452 que se puede encontrar en la pgina web de microchip.) En el caso que se reciba un nuevo dato en SSPSBUF sin haber ledo el anterior se genera un error de desbordamiento.
3.14.2 Modo I2C Este tipo de interfaz serie ha sido desarrollado por Philips y utiliza slo dos hilos trenzados y una masa comn para la interconexin de los diversos dispositivos, que han tenido que ser diseados para soportar este protocolo, asegurando una gran fiabilidad en la comunicacin que llega a tolerar una velocidad mxima de 400 Kbps. Es capaz de interconectar hasta 128 dispositivos situados a gran distancia, por lo que resulta muy usado en edificios inteligentes, control de distribuciones de electricidad, agua y gas, piscifactoras, etc. El master es el que inicia y termina la transferencia general y provee de la seal de reloj. El esclavo es el dispositivo direccionado por el master mediante 7 bits, lo que limita el nmero de componentes a 128.
Captulo 3
El inicio de la transmisin se determina con el bit de inicio (S) y el final con otro bit de stop (P). El bus serie de 2 hilos utiliza uno de ellos para transferir datos (SDA) y el otro para la seal de reloj (SCL). En el protocolo I2C cada dispositivo tiene asignada una direccin de 7 o de 10 bits que enva el master cuando comienza la transferencia con uno de ellos. Tras la direccin se aade el bit de recepcin/transmisin o lectura/escritura (R/W). Los datos se transmiten con longitud byte y al finalizar cada uno se inserta un bit de reconocimiento ACK. Debe existir un mdulo de arbitraje que gestione que slo hay un maestro en cada instante sobre el bus compartido. La figura muestra un esquema interno de funcionamiento del interfaz I2C.
SSPBUF es el registro donde se almacena el byte a transmitir o el que se recibe. SSPSR es el registro desplazamiento serie de la lnea E/S. SSPADD es el registro de direcciones que identifica el dispositivo (modo esclavo) o que lo direcciona (modo master). El registro de control SSPCON selecciona las diversas funciones del modo I2C. Cada vez que se detecta un bit de inicio o un bit de stop es posible que se active la bandera SSPIF y en el caso de estar tambin activado el bit de permiso correspondiente generar una interrupcin.
Captulo 3
Asncrono (full-duplex) Para comunicacin bidireccional. La pata RC6/Tx/CK acta como lnea de transmisin y RC7/Rx/DT acta como recepcin. Cada dato lleva un bit de inicio y otro de stop. Sncrono (semiduplex) Comunicacin unidireccional. Una sola lnea para los datos que se implementan sobre la patita RC7/Rx/DT. Existen dos modos, en el modo master la seal de reloj sale por la patita RC6/Tx/CK y en el modo esclavo entra por ella. En ambos modo los datos pueden ser de 8 o 9 bits, pudiendo emplear el noveno como bit de paridad, transmitindose o recibindose por el bit <0> de RXSTA y/o RCSTA. El registro especfico TXSTA acta como registro de estado y control del transmisor y el RCSTA hace lo mismo para el receptor. La velocidad en baudios se establecen por el valor cargado en el registro SPBRG y el bit BRGH del registro TXSTA, con el que se puede elegir la velocidad alta (1) o baja (0) en el modo asncrono. BAUDIOS = FOSC / (n(x + 1)) n = 4 en el modo sncrono n = 16 en el modo asncrono de alta velocidad n = 64 en el modo asncrono de baja velocidad x = valor cargado en el registro SPBRG (0 a 255) y siendo x = (FOSC / Baudios) / (n 1)
Mediante la programacin de los bits del registro TXSTA y RCSTA se configura el modo de trabajo. As, SPEN configura RC7/Rx y RC6/Tx como lneas de comunicacin serie. El transmisor se activa con el bit TxEN. El dato a transmitir se carga en TxREG y luego pasa al registro transmisor TSR, cuando se haya transmitido el bit de stop del dato anterior. Entonces se activa la bandera TxIF y si el bit de permiso esta activado se produce una interrupcin. Activando Tx8/9 se inserta el noveno bit almacenado en el bit <0> (TxD8) de TXSTA. El bit TRMT indica si el transmisor esta vaco o no. El dato se recibe por RSR y cuando se completa se pasa al registro RCREG para su posterior lectura, activndose la bandera RCIF y si acaso la interrupcin. Si se activa el bit RC8/9del RCSTA el noveno bit se deposita en el bit <0> (RCD8) del RCSTA. Los bits OERR y FERR indican error de desbordamiento y de trama, respectivamente.
Captulo 3
En la figura 19 se ofrece la asignacin de funciones de los bits de los registros TXSTA y RCSTA que gobiernan al receptor y transmisor asncronos, respectivamente. En modo sncrono el SCI trabaja en half duplex, no pudiendo emitir y transmitir a la vez. La seal de reloj la enva el transmisor (maestro) conjuntamente con los datos. Los principios y el funcionamiento de la emisin y la recepcin sncronas son similares al modo asncrono y nicamente hay que seleccionar esta forma de trabajo cargando adecuadamente los registros TXSTA y RCSTA.
La figura superior muestra el registro TXSTA donde el bit 7, CSRC, es el bit de seleccin de reloj siendo solo importante en el modo sncrono donde se elige entre maestro o esclavo. El bit 6 habilita la transmisin de 8 o 9 bits, en general, es TXEN, quien habilita la transmisin. El bit SYNC selecciona el modo USART entre sncrono y asncrono. Finalmente BRGH selecciona si el rango de baudios ser de baja o alta velocidad en el modo asncrono, TRMT es el bit de estado del registro de desplazamiento del transmisor y TX9D es el noveno bit de datos de transmisin. Se puede emplear como bit de paridad. La figura de la pgina siguiente muestra el registro RCSTA donde el bit 7, SPEN, es el bit de habilitacin del puerto serie. El bit 6 habilita la recepcin de 8 o 9 bits y SREN,
Captulo 3
bit 5, habilita la recepcin nica y CREN, bit 4, la recepcin continua. Los bits 1 y 2 son bits de error y finalmente, RX9D es el noveno bit de datos de recepcin.
Captulo 3
Si est habilitado, el mdulo de deteccin de bajo voltaje seguir funcionando aunque el dispositivo est en modo SLEEP. Si se produce la interrupcin despertar y se atender la interrupcin.
Captulo 3
El dispositivo slo despertar si: Se produce un RESET externo en el pin MCLR. Se desborda el perro guardin y ste estaba habilitado. Se produce una interrupcin por el pin INT, o por un cambio en el valor de los pines del puerto B o por un perifrico.
3.17.4 Proteccin de cdigo y verificacin de programa Toda la estructura de proteccin de cdigo de la familia 18 de microchip tiene diferencias significativas con el resto de familias. La memoria de programa de usuario est dividida en cinco bloques. Uno de ellos es un bloque de arranque de 512 bytes. Cada uno de estos cinco bloques tiene tres bits de proteccin de cdigo asociados, que son: Bit protector de cdigo (CPn). Bit protector de escritura (WRTn). Bit de lectura de tabla de bloque externo (EBTRn).
En modo usuario los bits CPn inhiben las lecturas y escrituras externas. Un bloque de memoria de usuario puede ser protegido de las tablas de escritura mediante la puesta a 0 del correspondiente bit WRT. Los bits EBTRn controlan las tablas de lectura permitiendo, si est a 0, una lectura proveniente de dentro. Si es externa leer todo ceros. 3.17.5 Programacin serie en placa Los PICs 18FXXX pueden ser programados mediante un protocolo en serie sin necesidad de retirarlos de la placa. Simplemente es necesario conectar cinco pines: un reloj, un canal de datos, la tierra, tensin para el funcionamiento normal y una tensin de programacin. Esto permite, por ejemplo, crear placas de propsito general que sern programadas posteriormente o tener actualizado un diseo con el ltimo firmware.