Seguidores de clase Universidad Pontificia de Salamanca (Madrid) Microcontrolador PIC 16F877
Microcontroladores
Versión 1.4
29 oct. 05 pág. 1
INDICE Características generales del PIC 16F877............................................................................................................ 1 Diagrama de bloques del PIC 16F877................................................................................................................. 2 Organización de la memoria RAM...................................................................................................................... 3 Tipos de direccionamiento de la RAM................................................................................................................ 4 Formas de modificar el Contador de Programa.................................................................................................... 4 Registro de estado .............................................................................................................................................. 5 ALU .................................................................................................................................................................. 5 Set de instrucciones............................................................................................................................................ 5 Instrucciones de transferencia ......................................................................................................................... 7 Instrucciones aritméticas................................................................................................................................. 7 Instrucciones lógicas ...................................................................................................................................... 7 Incrementos/Decrementos............................................................................................................................... 7 Instrucciones de rotación ................................................................................................................................ 8 Instrucciones de manipulación de bits................................................................................................................. 8 Instrucciones de control .................................................................................................................................. 8 Instrucciones de salto incondicional ................................................................................................................ 8 Instrucciones de salto condicional................................................................................................................... 8 Proceso de ensamblado....................................................................................................................................... 9 Representación de números y cadenas .............................................................................................................. 11 Directivos del ensamblador .............................................................................................................................. 11 Programa Display.ASM (Programa absoluto).................................................................................................... 13 Módulo CONTAR.ASM (Programa reubicable)................................................................................................ 15 Módulo Display.ASM ...................................................................................................................................... 17 Interrupciones. ................................................................................................................................................. 18 Proceso para atención de interrupciones............................................................................................................ 19 Plantilla de programa absoluto con atención a interrupciones. ........................................................................... 20 Reset................................................................................................................................................................ 21 Modo Sleep...................................................................................................................................................... 22 Reloj. ............................................................................................................................................................... 22 Modo Debug. ................................................................................................................................................... 23 Bits de Configuración....................................................................................................................................... 23 Periféricos 16F877 ........................................................................................................................................... 24 Puertos programables de E/S. ........................................................................................................................... 25 Timers ............................................................................................................................................................. 26 Timer0 ......................................................................................................................................................... 26 Watch dog Timer.......................................................................................................................................... 26 Timer1 ......................................................................................................................................................... 27 Timer2 ......................................................................................................................................................... 28 CAPTURE/COMPARE/PWM ......................................................................................................................... 29 Master Synchronous Serial Port........................................................................................................................ 30 Addressable Universal Synchronous Asynchronous Receiver Transmitter (USART). ........................................ 30 Analog/Digital Converter. ................................................................................................................................ 31 Microcontrolador 16F876................................................................................................................................. 33 Microcontrolador 16F84.................................................................................................................................. 34 Componentes electrónicos ................................................................................................................................ 35 Resistencias ..................................................................................................................................................... 35 Fuente de alimentación..................................................................................................................................... 35 Transformador:............................................................................................................................................. 35 Rectificador:................................................................................................................................................. 36 Filtro:........................................................................................................................................................... 36 Regulador:.................................................................................................................................................... 37 Interruptores/pulsadores:............................................................................................................................... 37 Teclados....................................................................................................................................................... 37 Otros dispositivos de entrada: ....................................................................................................................... 38 Dispositivos de salida:...................................................................................................................................... 39 Diodos LED ................................................................................................................................................. 39 Displays 7 segmentos ................................................................................................................................... 39
Microcontroladores
Versión 1.4
29 oct. 05 pág. 2
Displays LCD............................................................................................................................................... 40 Transistores:..................................................................................................................................................... 44 BC107.......................................................................................................................................................... 45 BD 139 ........................................................................................................................................................ 45 TIP122......................................................................................................................................................... 46 2N3055 ........................................................................................................................................................ 46 TRIACS........................................................................................................................................................... 47 MOTORES ...................................................................................................................................................... 48 Motores CC.................................................................................................................................................. 48 Servocontrol................................................................................................................................................. 49 Motores paso a paso ..................................................................................................................................... 49 Control de motores paso a paso..................................................................................................................... 50 Circuitos específicos: SAA1027.................................................................................................................... 51
Microcontroladores
Versión 1.41 29 oct. 05
pág. 1
Características generales del PIC 16F877 Procesador
Memoria
Periféricos
Descripción Núcleo Interrupciones Reloj Reset Instrucciones
Características RISC, Arq. Harvard, 20 MHz. 5 MIPS 14 fuentes posibles de interrupción 0-20 MHz. Master Clear, Brown Out, Watchdog, Power On 35 instrucciones de 14 bits
M. de programa M. de datos RAM M. de datos EEPROM Pila M. de datos ext. EEPROM Puertos programables de E/S Timers/Counters Puertos de captura/comparación de datos Moduladores de ancho de pulso (PWM) Conversor Analógico/Digital de 10 bits Puerto serie síncrono USART Parallel Slave Port
8 K palabras de 14 bits 368 registros de 8 bits 256 registros de 8 bits 8 palabras de 13 bits Hasta 256 KBytes Hasta 33 bits, pueden ser usados por otros periféricos Dos de 8 bits y uno de 16 bits Dos de 8 bits Dos de 8 bits Con un MPX de 8 canales para 8 entradas diferentes Configurable en modo SPI e I2C Para conexiones RS 232 8 bits + 3 bits de control
Tabla 1 Características generales del PIC 16F877
Microcontroladores
Versión 1.41 29 oct. 05
Diagrama de bloques del PIC 16F877
Figura 1 Diagrama de bloques del PIC 16F877
pág. 2
Microcontroladores
Versión 1.41 29 oct. 05
pág. 3
Organización de la memoria RAM Registro Indirect. addr.(*) TMR0 PCL STATUS FSR PORTA PORTB PORTC PORTD PORTE PCLATH INTCON PIR1 PIR2 TMR1L TMR1H T1CON TMR2 T2CON SSPBUF SSPCON CCPR1L CCPR1H CCP1CON RCSTA TXREG RCREG CCPR2L CCPR2H CCP2CON ADRESH ADCON0
Dir. 00H 01H 02H 03H 04H 05H 06H 07H 08H 09H 0AH 0BH 0CH 0DH 0EH 0FH 10H 11H 12H 13H 14H 15H 16H 17H 18H 19H 1AH 1BH 1CH 1DH 1EH 1FH 20H
Registro Indirect. addr.(*) OPTION_REG PCL STATUS FSR TRISA TRISB TRISC TRISD TRISE PCLATH INTCON PIE1 PIE2 PCON
SSPCON2 PR2 SSPADD SSPSTAT
TXSTA SPBRG
ADRESL ADCON1
Registros de propósito general
Registros de propósito general
96 bytes
80 bytes
Dir. 80H 81H 82H 83H 84H 85H 86H 87H 88H 89H 8AH 8BH 8CH 8DH 8EH 8FH 90H 91H 92H 93H 94H 95H 96H 97H 98H 99H 9AH 9BH 9CH 9DH 9EH 9FH A0H
Registro Indirect. addr.(*) TMR0 PCL STATUS FSR PORTB
PCLATH INTCON EEDATA EEADR EEDATH EEADRH
Registros de propósito general 96 bytes
EFH F0H
Acceso a 70H-7FH 7FH
Banco 0
Registro Indirect. addr.(*) OPTION_REG PCL STATUS FSR TRISB
PCLATH INTCON EECON1 EECON2
Registros de propósito general 96 bytes
16FH 170H
Acceso a 70H-7FH FFH
Banco 1
Dir. 100H 101H 102H 103H 104H 105H 106H 107H 108H 109H 10AH 10BH 10CH 10DH 10EH 10FH 110H 111H 112H 113H 114H 115H 116H 117H 118H 119H 11AH 11BH 11CH 11DH 11EH 11FH 120H
1EFH 1F0H
Acceso a 70H-7FH 17FH
Banco 2
Dir. 180H 181H 182H 183H 184H 185H 186H 187H 188H 189H 18AH 18BH 18CH 18DH 18EH 18FH 190H 191H 192H 193H 194H 195H 196H 197H 198H 199H 19AH 19BH 19CH 19DH 19EH 19FH 1A0H
1FFH
Banco 3
(*) No es un registro físico, sino el indicador de acceso indirecto a memoria
Tabla 2 Organización de la memoria RAM
Microcontroladores
Versión 1.41 29 oct. 05
pág. 4
Tipos de direccionamiento de la RAM
Figura 2 Tipos de direccionamiento para apuntar a los registros de la RAM
Formas de modificar el Contador de Programa
Figura.3 Formas de modificar el Contador de Programa.
Microcontroladores
Versión 1.41 29 oct. 05
pág. 5
Registro de estado Registro de estado 7
0
IRP
RP1
RP0
Direccionamiento
TO
PD
Reset
Z
DC
C
Flags ALU
Tabla.3 Bits del registro de estado. DC= Flag de acarreo intermedio, indica en las sumas y restas desbordamiento entre los bits tres y cuatro. C= Flag de Carry. Si vale 1 después de una suma indica desbordamiento, Si vale 1 después de una resta indica que NO ha habido desbordamiento.
ALU
Figura.4 ALU y elementos directamente conectados a ella.
Set de instrucciones. Formato de una instrucción: [etiqueta] mnemónico [operando1[, operando2]] [; comentario] Tipos de operandos en una instrucción: f: Indica un nº de registro dentro de un banco de la RAM. Es un valor de 7 bits. d: Operando destino. Es un bit que si vale 0 indica que el resultado debe almacenarse en W y si vale 1 en el registro usado como primer operando. b: Es usado en las instrucciones que afectan a un único bit, y apunta al bit destino de la instrucción. k: Constante. Las instrucciones van a manejar dos tipos de constantes, si la instrucción es CALL o GOTO la constante es de 11 bits (k11) y hace referencia a la dirección a la que se va a saltar. En cualquier otro caso se trata de un valor de 8 bits (k8) que se usará como valor inmediato en una operación que siempre involucra a la ALU y al acumulador.
Microcontroladores
Versión 1.41 29 oct. 05
Instrucción ADDLW ADDWF ANDLW ANDWF BCF BSF BTFSC BTFSS CALL CLRF CLRW CLRWDT COMF DECF DECFSZ GOTO INCF INCFSZ IORLW IORWF MOVF MOVLW MOVWF NOP RETFIE RETLW RETURN RLF RRF SLEEP SUBLW SUBWF SWAPF XORLW XORWF
Descripción W+k8 ® W Si d=0, W+f® W. si d=1 W+f®f WÙk8 ® W Si d=0, WÙf® W. si d=1 WÙf®f 0 ® bit(b) de f 1 ® bit(b) de f Comprobar bit b en f, saltar si es 0 Comprobar bit b en f, saltar si es 1 PC ® pila, bits 4,3 de PCLATH + k11 ® PC 0®f 0®W Poner a 0 el Watch Dog Timer. f,d Si d=0, Ca1(f)® W. si d=1 Ca1(f)®f f, d Si d=0, f-- ® W. si d=1 f-- ®f f, d Si d=0, f-- ® W, si d=1 f-- ®f, saltar si cero k11 bits 4,3 de PCLATH + k11 ® PC f, d Si d=0, f++ ® W. si d=1 f ++®f f, d Si d=0, f++ ® W, si d=1 f++ ®f, saltar si cero k8 WÚk8 ® W f, d Si d=0, WÚf® W. si d=1 WÚf®f f, d Si d=0, f ® W. si d=1 f®f k8 k8 ® W f W® f No operar pila ® PC, 1 ® GIE k8 pila ® PC; k8 ® W pila ® PC Rotación a la izquierda a través de carry de f, f, d dejando el resultado en W o f según d Rotación a la derecha a través de carry de f, f, d dejando el resultado en W o f según d Pasar a modo standby k8 k8 -W ® W f, d Si d=0, f-W® W. si d=1 f-W®f Intercambia los dos nibbles (4 bits) de f, f, d dejando el resultado en W o f según d k8 WÅk8 ® W f, d Si d=0, WÅf® W. si d=1 WÅf®f k8 f, d k8 f, d f, b f, b f, b f, b k11 f
pág. 6
Flags modif.. C, DC, Z C, DC, Z Z Z Ninguno Ninguno Ninguno Ninguno Ninguno Z Z TO , PD Z Z Ninguno Ninguno Z Ninguno Z Z Z Ninguno Ninguno Ninguno GIE Ninguno Ninguno C C TO , PD C, DC, Z C, DC, Z Ninguno Z Z
Tabla 4 Set de instrucciones del PIC 16F877 ordenadas alfabéticamente.
Microcontroladores
Versión 1.41 29 oct. 05
pág. 7
Instrucciones de transferencia CLRF CLRW MOVLW MOVWF MOVF
f k8 f f, d
SWAPF
f, d
0®f 0®W k8 ® W W® f Si d=0, f ® W. si d=1 f®f Intercambia los dos nibbles (4 bits) de f, dejando el resultado en W o f según d
Flags modif.. Z Z Ninguno Ninguno Z Ninguno
Instrucciones aritméticas ADDLW ADDWF SUBLW SUBWF
k8 f, d k8 f, d
W+k8 ® W Si d=0, W+f® W. si d=1 W+f®f k8-W ® W Si d=0, f-W® W. si d=1 f-W®f
Flags modif.. C, DC, Z C, DC, Z C, DC, Z C, DC, Z
Instrucciones lógicas ANDLW ANDWF COMF IORLW IORWF XORLW XORWF
k8 f, d f,d k8 f, d k8 f, d
WÙk8 ® W Si d=0, WÙf® W. si d=1 WÙf®f Si d=0, Ca1(f)® W. si d=1 Ca1(f)®f WÚk8 ® W Si d=0, WÚf® W. si d=1 WÚf®f WÅk8 ® W Si d=0, WÅf® W. si d=1 WÅf®f
Flags modif.. Z Z Z Z Z Z Z
Incrementos/Decrementos DECF INCF
f, d f, d
Si d=0, f-- ® W. si d=1 f-- ®f Si d=0, f++ ® W. si d=1 f ++®f
Flags modif.. Z Z
Microcontroladores
Versión 1.41 29 oct. 05
pág. 8
Instrucciones de rotación Flags modif.. RLF
f, d
RRF
f, d
Rotación a la izquierda a través de carry de f, dejando el resultado en W o f según d Rotación a la derecha a través de carry de f, dejando el resultado en W o f según d
C C
Instrucciones de manipulación de bits BCF BSF
f, b f, b
0 ® bit(b) de f 1 ® bit(b) de f
Flags modif.. Ninguno Ninguno
Instrucciones de control Flags modif.. CLRWDT
Poner a 0 el Watch Dog Timer.
TO , PD
SLEEP
Pasar a modo standby
TO , PD
Instrucciones de salto incondicional CALL GOTO RETFIE RETLW RETURN
k11 PC ® pila, bits 4,3 de PCLATH + k11 ® PC k11 bits 4,3 de PCLATH + k11 ® PC pila ® PC, 1 ® GIE k8 pila ® PC; k8 ® W pila ® PC
Flags modif.. Ninguno Ninguno GIE Ninguno Ninguno
Instrucciones de salto condicional BTFSC BTFSS DECFSZ INCFSZ
f, b f, b f, d f, d
Flags modif.. Comprobar bit b en f, saltar si es 0 Ninguno Comprobar bit b en f, saltar si es 1 Ninguno Ninguno Si d=0, f-- ® W, si d=1 f-- ®f, saltar si cero Ninguno Si d=0, f++ ® W, si d=1 f++ ®f, saltar si cero
Microcontroladores
Versión 1.41 29 oct. 05
pág. 9
Proceso de ensamblado
Figura 5 Proceso de ensamblado de un programa ‘absoluto’.
Figura ¡Error! No hay texto con el estilo especificado en el documento..6 Proceso de ensamblado de un programa con ‘código reubicable’.
Microcontroladores
Versión 1.41 29 oct. 05
pág. 10
Figura 7 Entradas y salidas para las herramientas de desarrollo MPLAB
Microcontroladores
Versión 1.41 29 oct. 05
pág. 11
Representación de números y cadenas Base Binario Octal Decimal Hexadecimal Carácter
Sintaxis B'dígitos binarios' O'ígitos octales' D'dígitos decimales' H'dígitos hexadecimales' 0xdígitos hexadecimales Los caracteres se almacenan en código ASCII de 7 bits
String
Los caracteres se almacenan en código ASCII de 7 bits
Ejemplo B'101' O'123' D'123' H'12AB' 0x12AB A'a' 'a' "cadena de caracteres"
Directivos del ensamblador Veremos algunos de los directivos del ensamblador.
Directivos de declaración de secciones Tipo CODE IDATA. UDATA UDATA_ACS. UDATA_OVR. UDATA_SHR.
Nombre por defecto .code .idata .udata .udata_acs .udata_ovr .udata_shr
Descripción Esta sección contendrá código. El resto de secciones sólo datos. Esta sección contendrá variables inicializadas. Esta sección contendrá variables no inicializadas. Esta sección contendrá variables accesibles de forma más rápida. Esta sección contendrá variables temporales sobreescribibles. Esta sección contendrá variables accesibles en varios bancos.
Tabla 5 Directivos de declaración de secciones. CBLOCK CBLOCK [
] [:][,[:][, ...]] ENDC Var1 Var2 Var3
EQU 0x20 EQU 0x21 EQU 0x22 CBLOCK 0x20 Var1, Var2, Var3 ENDC CBLOCK 0x30 DobleByte:0, DobleByteAlto, DobleByteBajo Nombre: TAM_NOMBRE Word1:2, Word2: 2 Var1, Var2, Var3 ENDC
RES [] RES . UDATA ValorActual RES 1 Aux1 RES 1 Aux2 RES 2 Aux3 RES 1
Microcontroladores
Versión 1.41 29 oct. 05
pág. 12
INCLUDE INCLUDE
LIST LIST [, ... , ] Opción n=nnn p= r= .....
Valor por defecto 60 Ninguno hex
Descripción Líneas por página de listado Selecciona procesador Selecciona radix (hex, dec, oct)
LIST p=16F877, r=dec
ORG [Etiqueta] ORG ORG 0x20
EQU EQU 0x20
#DEFINE #define [] #define TAM_NOMBRE 0x20 #define BitControl 0x19,7 ..... bsf BitControl ; Equivale a bsf 0x19, 7 EXTERN [, ... ] EXTERN Var1 ....... MOVF Var1, W
GLOBAL GLOBAL [, ... ] Var1 Var2
UDATA RES 1 RES 2 GLOBAL Var1, Var2
END Debe colocarse siempre al final del programa o del módulo Operador $ Se sustituye por la dirección de la línea en la que se encuentra goto $
; Bucle infinito
btfsc FILE, BIT goto $-1 ;No se sale de este bucle hasta que BIT=0
Microcontroladores
Versión 1.41 29 oct. 05
pág. 13
Programa Display.ASM (Programa absoluto) ;
Programa: Disp1.ASM list p=16f877 ; Indicamos cual va a ser el procesador destino #include p16f877.inc ; Define gran cantidad de constantes relacionadas ; con este procesador CBLOCK 0X20 ValorActual, Aux1, Aux2, Aux3 ENDC ORG goto ORG
0 Inicio 0x10
Inicio ; En primer lugar inicializaremos el puerto C para que configure todas sus líneas ; como salidas. Se supone que a este puerto se han conectado los siete segmentos ;de un display ; Inicializamos las variables clrf ValorActual ; Configuramos los bits del BANKSEL TRISC clrf TRISC clrf STATUS Bucle movf ValorActual, call hex27seg ; movwf PORTC incf ValorActual, btfsc ValorActual, clrf ValorActual
Espera
movlw 8 movwf Aux1
puertoC como salidas ; Configurar pines de PORTC como salidas ; Apuntamos a la página 0 ; Comienzo del bucle principal W ; Muevo ValorActual a W Llamamos a rutina de conversión ; ponemos resultado en PORTC (el display) F ; Incrementamos el valor para la siguiente 4 ; iteración, y si se activa el bit 4, hemos ; llegado a 10H, y reseteamos la variable. ; Inicializamos Aux1 a 8 para conseguir ; una espera algo mayor que 1 segundo.
call Espera1 ; Rutina con un retardo de 0,13 seg. Aprox. decfsz Aux1, F goto Espera goto Bucle ; Retornar al bucle principal ;******************************* Espera1 ;******************************* ; Realiza 256 llamadas a la rutina Espera2
Bucle1
movlw 0xff movwf Aux2
call Espera2 decfsz Aux2, F goto Bucle1 return ;******************************* Espera2 ;******************************* ; Recorre 256 veces el bucle Bucle2. movlw 0xff movwf Aux3 Bucle2 decfsz Aux3, F goto Bucle2 return
Microcontroladores
Versión 1.41 29 oct. 05
pág. 14
;**************************************** hex27seg ;**************************************** ; Subrutina hex27seg, que recibe un valor hexadecimal de un dígito en W, ; y devuelve en el mismo registro el valor correspondiente al de un ; display de 7 segmentos. ; A continuación se muestra el nombre de cada segmento en un Display ; ----; | a | ; f| |b ; | | ; ----; | g | ; e| |c ; | | ; ----; d ; Se asignará el bit 7 al segmento 'a', el 6 al 'b', ... , el 1 al 'g' ; El bit 0 queda sin asignar. Se puede usar para el punto digital del display ; Los segmentos a iluminar para cada dígito son: ; Bits 7,6,5,4,3,2,1,0 Valor binario ; ==== =============== ============= ; 0 = a,b,c,d,e,f B'11111100' ; 1 = b,c B'01100000' ; 2 = a,b, d,e, g B'11011010' ; 3 = a,b,c,d, g B'11110010' ; 4 = b,c, f,g B'01100110' ; 5 = a, c,d, f,g B'10110110' ; 6 = a, c,d,e,f,g B'10111110' ; 7 = a,b,c B'11100000' ; 8 = a,b,c,d,e,f,g B'11111110' ; 9 = a,b,c, f,g B'11100110' ; A = a,b,c, e,f,g B'11101110' ; B = c,d,e,f,g B'00111110' ; C = a, d,e,f B'10011100' ; D = b,c,d,e, g B'01111010' ; E = a, d,e,f,g B'10011110' ; F = a, e,f,g B'10001110' ANDLW B'00001111' ADDWF PCL, F retlw B'11111100' retlw B'01100000' retlw B'11011010' retlw B'11110010' retlw B'01100110' retlw B'10110110' retlw B'10111110' retlw B'11100000' retlw B'11111110' retlw B'11100110' retlw B'11101110' retlw B'00111110' retlw B'10011100' retlw B'01111010' retlw B'10011110' retlw B'10001110' end
Microcontroladores
Versión 1.41 29 oct. 05
pág. 15
Módulo CONTAR.ASM (Programa reubicable) ; ;
Programa: CONTAR.ASM
list p=16f877 ; Indicamos cual va a ser el procesador destino #include p16f877.inc ; Define gran cantidad de constantes relacionadas ; con este procesador UDATA ValorActual RES 1 Aux1 RES 1 Aux2 RES 1 Aux3 RES 1 STARTUP PROG1
CODE ; Selecciona la dirección de reset desde el script 16F877.lkr goto Inicio CODE ; Selecc la dir inic del programa desde el script 16F877.lkr extern hex27seg
Inicio ; En primer lugar inicializaremos el puerto C para que configure todas sus líneas ; como salidas. Se supone que a este puerto se han conectado los siete segmentos ; de un display ; Inicializamos las variables clrf ValorActual ; Configuramos los bits del puertoC como salidas BANKSEL TRISC clrf TRISC ; Configurar pines de PORTC como salidas Bucle
Espera
BANKSEL ValorActual movf ValorActual, W ; Muevo ValorActual a W call hex27seg ; Llamamos a rutina de conversión BANKSEL PORTC movwf PORTC ; ponemos resultado en PORTC (el display) BANKSEL ValorActual incf ValorActual, F ; Incrementamos el valor para la siguiente btfsc ValorActual, 4 ; iteración, y si se activa el bit 4, hemos clrf ValorActual ; llegado a 10H, y reseteamos la variable. movlw 8 ; Inicializamos Aux1 a 8 para conseguir movwf Aux1 ; una espera algo mayor que 1 segundo. call Espera1 decfsz goto Espera goto Bucle
; Rutina con un retardo de 0,13 seg. Aprox. Aux1, F ; Retornar al bucle principal
Microcontroladores
Versión 1.41 29 oct. 05
;******************************* Espera1 ;******************************* ; Realiza 256 llamadas a la rutina Espera2
Bucle1
movlw 0xFF movwf Aux2
call Espera2 decfsz Aux2, F goto Bucle1 return ;******************************* Espera2 ;******************************* ; Recorre 256 veces el bucle Bucle2. movlw 0xFF movwf Aux3 Bucle2 decfsz Aux3, F goto Bucle2 return end
pág. 16
Microcontroladores
Versión 1.41 29 oct. 05
pág. 17
Módulo Display.ASM ; Módulo Display.asm. Presenta la subrutina hex27seg, que recibe ; un valor hexadecimal de un dígito, y devuelve el valor correspondiente ; al de un display de 7 segmentos. ; A continuación se muestra el nombre de cada segmento en un Display ; ----; | a | ; f| |b ; | | ; ----; | g | ; e| |c ; | | ; ----; d ; Se asignará el bit 7 al segmento 'a', el 6 al 'b', ... , el 1 al 'g' ; El bit 0 queda sin asignar. Se puede usar para el punto digital del display ; Los segmentos a iluminar para cada dígito son: ; Bits 7,6,5,4,3,2,1,0 Valor binario ; ==== =============== ============= ; 0 = a,b,c,d,e,f B'11111100' ; 1 = b,c B'01100000' ; 2 = a,b, d,e, g B'11011010' ; 3 = a,b,c,d, g B'11110010' ; 4 = b,c, f,g B'01100110' ; 5 = a, c,d, f,g B'10110110' ; 6 = a, c,d,e,f,g B'10111110' ; 7 = a,b,c B'11100000' ; 8 = a,b,c,d,e,f,g B'11111110' ; 9 = a,b,c, f,g B'11100110' ; A = a,b,c, e,f,g B'11101110' ; B = c,d,e,f,g B'00111110' ; C = a, d,e,f B'10011100' ; D = b,c,d,e, g B'01111010' ; E = a, d,e,f,g B'10011110' ; F = a, e,f,g B'10001110' W equ 0 F EQU 1 PCL EQU 2 CODE hex27seg global hex27seg ANDLW B'00001111' ADDWF PCL, F retlw B'11111100' retlw B'01100000' retlw B'11011010' retlw B'11110010' retlw B'01100110' retlw B'10110110' retlw B'10111110' retlw B'11100000' retlw B'11111110' retlw B'11100110' retlw B'11101110' retlw B'00111110' retlw B'10011100' retlw B'01111010' retlw B'10011110' retlw B'10001110' end
Microcontroladores
Interrupciones.
Versión 1.41 29 oct. 05
pág. 18
Microcontroladores
Versión 1.41 29 oct. 05
GIE 0 1
PEIE X 0
T0IE X X
1
1
X
1 1 1 1 1 1
X X X X X X
0 1 X X X X
pág. 19
INTE RBIE xxxIE Significado X X X Todas las interrupciones deshabilitadas X X X Deshabilitadas las interrupciones de los periféricos internos salvo Timer 0 X X X Permitidas las interrupciones de los periféricos internos. Hay un bit adicional para cada periférico. X X X Deshabilitada Int. Timer 0 X X X Habilitada Int. Timer 0 0 X X Deshabilitada Int. externa 1 X X Habilitada Int. externa X 0 X Deshabilitada Int. cambio líneas RB4,..,RB7 X 1 X Habilitada Int. cambio líneas RB4,..,RB7
Tabla 6 Bits de habilitación de interrupciones en INTCOM Bit TMR1IE TMR2IE CCP1IE SSPIE TXIE RCIE ADIE PSPIE CCP2IE BCLIE EEIE
Reg. bit Activar interrupción si PIE1 0 Overflow en el Timer 1 PIE1 1 Overflow en el Timer 2 PIE1 2 Captura o Comparación en CCP1 PIE1 3 Byte recibido o transmitido por el puerto serie síncrono PIE1 4 Byte transmitido por la USART PIE1 5 Byte recibido por la USART PIE1 6 Finalizada conversión por el conversor A/D PIE1 7 Byte recibido o transmitido por el puerto paralelo esclavo PIE2 0 Captura o Comparación en CCP2 PIE2 3 Colisión en el bus I2C PIE2 4 Fin de operación de escritura en la EEPROM
Flag TMR1IF TMR2IF CCP1IF SSPIF TXIF RCIF ADIF PSPIF CCP2IF BCLIF EEIF
Reg. bit PIR1 0 PIR1 1 PIR1 2 PIR1 3 PIR1 4 PIR1 5 PIR1 6 PIR1 7 PIR2 0 PIR2 3 PIR2 4
Tabla 7 Bits de habilitación de interrupciones para periféricos y flags activados.
Proceso para atención de interrupciones 1º Cuando se produce un evento susceptible de generar una interrupción, se activa el xxIF correspondiente. Si dicho bit estaba a 0 y se produce la transición a 1 se comprueba si su bit xxIE vale 1. Si es así y el bit GIE=1 (y el PEIE para los periféricos también) se lanza la petición de interrupción a la Unidad de Control que termina de ejecutar la instrucción en curso y realiza estas tres transferencias: § 0 -->GIE § Dir. retorno --> Pila § 4--> Program Counter La rutina debe: 1º Salvar en algún registro reservado al efecto el contenido del registro de Status y el acumulador. 2º Haciendo polling se detecta cual ha sido la fuente de la interrupción. 3º Ejecutar la rutina de atención a la interrupción. 4º Desactivar el flag correspondiente a esa interrupción 5º Ejecutar la instrucción RETFIE de retorno de interrupción y que reactiva GIE.
Microcontroladores
Versión 1.41 29 oct. 05
pág. 20
Plantilla de programa absoluto con atención a interrupciones. list p=16f877 ; list directive to define processor #include ; processor specific variable definitions __CONFIG _CP_OFF & _WDT_ON & _BODEN_ON & _PWRTE_ON & _RC_OSC & _WRT_ENABLE_ON & _LVP_ON & _DEBUG_OFF & _CPD_OFF
;***** VARIABLE DEFINITIONS w_temp EQU 0x70 ; variable used for context saving status_temp EQU 0x71 ; variable used for context saving ;********************************************************************* ORG 0x000 ; processor reset vector clrf PCLATH ; ensure page bits are cleared goto main ; go to beginning of program ORG movwf movf movwf CLRF BTFSC GOTO BTFSC GOTO : : BTFSC GOTO INT_ERROR_LP1 GOTO
0x004 ; interrupt vector location w_temp ; save off current W register contents STATUS,w ; move status register into W register status_temp ; save off contents of STATUS register STATUS PIR1, TMR1IF T1_INT PIR1, ADIF AD_INT INTCON, RBIF PORTB_INT INT_ERROR_LP1
; ; ; ; ; ; ; ; ;
Bank0 Timer1 overflow interrupt? YES NO, A/D interrupt? YES, do A/D thing NO, Change on PORTB interrupt? YES, Do PortB Change thing
; NO, do error recovery ; This is the trap if you enter the ISR ; but there were no expected ; interrupts
END_ISR
movf status_temp,w ; retrieve copy of STATUS register movwf STATUS ; restore pre-isr STATUS register contents swapf w_temp,f swapf w_temp,w ; restore pre-isr W register contents retfie ; return from interrupt T1_INT ; Routine when the Timer1 overflows : ; BCF PIR1, TMR1IF ; Clear the Timer1 overflow interrupt flag GOTO END_ISR ; Ready to leave ISR (for this request) AD_INT ; Routine when the A/D completes : ; BCF PIR1, ADIF ; Clear the A/D interrupt flag GOTO END_ISR ; Ready to leave ISR (for this request) : ; PORTB_INT ; Routine when PortB has a change : ; GOTO END_ISR ; Ready to leave ISR (for this request) main ; remaining code goes here END
; directive 'end of program'
Microcontroladores
Versión 1.41 29 oct. 05
Reset. Coloca a la CPU en un estado conocido. Causas: · Power On Reset POR. · Brown-out Reset. · ·
MCLR en estado normal. WDT en estado normal.
· ·
MCLR en estado SLEEP. WDT en estado SLEEP.
Power On Reset
Power-up Timer (PWRT) Oscillator Start-up Timer (OST)
pág. 21
Microcontroladores
Versión 1.41 29 oct. 05
PCON
STATUS
POR
BOR
TO
PD
0 0 0 1 1 1 1
X X X 0 1 1 1
1 0 X 1 0 0 u
1 X 0 1 1 0 u
1
1
1
0
pág. 22
Significado Power-on Reset Estado incorrecto Estado incorrecto Brown-out Reset WDT reset during normal operation WDT Wake-up. No reinicia el PC MCLR reset during normal operation MCLR reset during SLEEP
Tabla 8 Bits indicativos de la última reinicialización Necesidad de la puesta a '1' de todos los bits al arrancar. Brown-out reset: Se produce al bajar la tensión de alimentación por debajo de un umbral (~4V.) WDT: · · · ·
Timer que genera un reset al desbordarse. Usa una fuente de reloj interna. Puede definirse un valor para un postscaler, que permite definir diferentes tiempos. Instrucciones CLRWDT y SLEEP.
Existen tablas indicando como se inicializan los registros de la RAM con un reset, pero se distinguen básicamente tres situaciones: Reset generado por POR / BOR : Se inicializan prácticamente todos los registros. Reset generado por MCLR /WDT: Se inicializan los registros de algunos periféricos y algunos básicos como el contador de programa y parte del registro de flags. Reset generado por MCLR /WDT mientras se estaba en modo SLEEP: Prácticamente ningún registro cambia su contenido.
Modo Sleep Detiene a la CPU. Principal ventaja: el consumo de la CPU se reduce a niveles muy bajos. Se despierta mediante: · · ·
Activación de MCLR Activación de INT, RB4..RB7 y algunas interrupciones asociadas a periféricos internos. Desbordamiento del WDT
Reloj. Los circuitos para generar la señal de reloj se encuentran dentro de la CPU. Estos circuitos necesitan algún componente externo para fijar su frecuencia y modo de trabajo. El oscilador interno se tiene que configurar para controlar adecuadamente los componentes externos, existiendo 4 posibilidades: LP: Low Power Crystal (32KHz. - 400 KHz.) XT: Crystal/Resonator (400 KHz. - 4 MHz.) HS: High Speed Crystal Resonator (2 MHz. - 20 MHz.) RC: Resistor/Capacitor (hasta 4 MHz.)
Microcontroladores
Versión 1.41 29 oct. 05
pág. 23
Modo Debug. Algunos circuitos permiten la depuración del programa sobre el propio chip (ICD In Circuit Debugging). Cuando esta capacidad está desactivada el microcontrolador funciona de forma autónoma como cualquier MCU estándar. Cuando esta capacidad está activada el microcontrolador debe estar conectado a un dispositivo (con las líneas RB6 y RB7) que controla e inspecciona la evolución del programa. En este caso podemos ejecutar el programa paso a paso, insertar un breakpoint, inspeccionar o modificar el contenido de la memoria, ... También se reservan algunos recursos. Para el 16F877 se reserva: - Las líneas RB6 y RB7 a través de las cuales se comunica con el host. - 1 nivel de la pila. - Dirección 0 del programa debería contener la instrciión NOP. - Últimas 100H direcciones de la memoria de programa. - Direcciones 0x70 y 0x1EB a 0x1EF de la memoria de datos.
Bits de Configuración. A partir de la dirección 0x1FFF de la memoria de programa, se dispone de 8 palabras extras. Estas direcciones no son accesibles desde el programa o la aplicación, pero si pueden ser accedidas en el proceso de grabación. Las 4 primeras words (0x2000 a 0x2003) se denominan ID Location, sirve para almacenar un nº de serie, o un nº de versión de software instalada, etc. La dirección 0x2006 es de sólo lectura y tiene un identificador del modelo de microcontrolador. La siguiente word (0x2007) , es la palabra de configuración, sus bits tiene los siguiente significados: Bits 13-12 y 5-4: Están relacionados con varios niveles de protección de nuestro SW. Bit 11: DEBUG. Si vale 0 se desactiva el modo ICD, y RB6 y RB/ quedan como líneas I/O estándar. Bit 9: WRT. Permite o no, escribir en la memoria Flash de programa. Bit 8. CPD Protección de los datos de la EEPROM. Bit 7: LVP. Permite la grabación a bajo voltaje. Bit 6: BODEN. Habilita el control del Brown-out. Bit 3. PWRT . Permite activar o desactivar el Power-up Timer. Bit 2: WDTE. Permite activar o desactivar el Watch Dog. Bit 1- 0. Selección de tipo de generador de reloj: Uso de directivos de configuración: __CONFIG _CP_OFF & _WDT_ON & _BODEN_ON & _PWRTE_ON & _RC_OSC & _WRT_ENABLE_ON & _LVP_ON & _DEBUG_OFF & _CPD_OFF __IDLOCS H'1234', H'3456' Constantes predefinidas en el fichero 16F877.INC _CP_ALL _CP_HALF _CP_UPPER_256 _CP_OFF _DEBUG_ON _DEBUG_OFF _WRT_ENABLE_ON _WRT_ENABLE_OFF _CPD_ON _CPD_OFF _LVP_ON _LVP_OFF
EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU
H'0FCF' H'1FDF' H'2FEF' H'3FFF' H'37FF' H'3FFF' H'3FFF' H'3DFF' H'3EFF' H'3FFF' H'3FFF' H'3F7F'
_BODEN_ON _BODEN_OFF _PWRTE_OFF _PWRTE_ON _WDT_ON _WDT_OFF _LP_OSC _XT_OSC _HS_OSC _RC_OSC
EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU
H'3FFF' H'3FBF' H'3FFF' H'3FF7' H'3FFF' H'3FFB' H'3FFC' H'3FFD' H'3FFE' H'3FFF'
Microcontroladores
Versión 1.41 29 oct. 05
pág. 24
Periféricos 16F877 · · · · · · · ·
Puertos programables de E/S Timers/Counters Puertos de captura/comparación de datos Moduladores de ancho de pulso (PWM) Conversor Analógico/Digital de 10 bits Puerto serie síncrono USART Parallel Slave Port
Circuito de 40 pines en formato. Salvo 7 pines, todos los demás están asociados al menos con los puertos de E/S. Los 7 pines son: · 4 pines para alimentación, están duplicados. · ·
1 pin para MCLR y Vpp que es una tensión de 12 a 14 V. usada cuando está en modo programación. 2 pines relacionados con entradas o salidas de reloj, en función del tipo de reloj utilizado.
Microcontroladores
Versión 1.41 29 oct. 05
pág. 25
Puertos programables de E/S. Disponemos de hasta 33 pines. A medida que se usan otros periféricos internos se detraen pines de E/S Las principales características son: · · · ·
Programables como entradas o salidas individualmente. Capaces de trabajar con corrientes de 25 mA. en cada línea. No obstante la corriente total en los puertos A, B y E no puede superar los 200 mA. y en los puertos C y D otros 200 mA. Entradas tipo TTL o ST (Schmitt Trigger). Resistencias Pull-up (habilitables por programa) en el puerto B
Las líneas de E/S están agrupadas en 5 puertos: A (6 bits), B (8 bits), C (8 bits), D (8 bits) y E (3 bits). Cada puerto de E/S tiene asociados dos registros TRISX y PORTX. El primer registro dispone de un bit por cada línea del puerto, y controlará si funciona como entrada (Input, 1) o como salida (Output, 0). El segundo registro nos permite acceder al puerto. Con una escritura se modifican los bits configurados como salida, y con una lectura accedemos tanto a los de entrada como a los de salida. Si se realiza una escritura y de forma inmediata una lectura, puede que la salida no haya alcanzado el nivel adecuado generando incoherencias. El puerto A tiene todas sus salidas Totem pole, excepto la RA4 que es del tipo Open collector (open drain de forma más exacta) lo que obliga a poner una resistencia de Pull Up para poder obtener '1'. Además después de un reset las líneas del puerto A están configuradas como entradas analógicas (como digitales devuelven '0'). Escribiendo el valor 6 en el registro ADCON1 se pueden convertir en entradas digitales. El puerto B dispone de resistencias Pull-up que pueden activarse por software cuando funcionan como entradas. La activación se realiza con el bit RBPU (bit 7) del registro OPTION_REG (direcciones 81h y 181h). Además la línea RB0 puede funcionar como entrada de petición de interrupción. Para ello se debe activar el bit INTE (bit 4) del registro INTCON (direcciones 0Bh, 8Bh, 10Bh y 18Bh). Con el bit INTDEG (bit 6) de OPTION_REG (direcciones 81h y 181h) se selecciona si se activa la interrupción con flanco de subida (1) o de bajada (0). Los puertos A y B cuando se configuran como entradas, trabaja con niveles TTL (salvo la línea RA4) y los puertos C, D y E como Schmitt Trigger (también RA4). TTL: VIL = 0,8 V., VIH = 2 V. ST: VIL = 1 V., VIH = 4 V. Permite cambios de tensión lentos en su entrada.
Microcontroladores
Versión 1.41 29 oct. 05
pág. 26
Timers Disponemos de 3 timers numerados del 0 al 2 y del Watch Dog Timer.
Timer0 Timer de 8 bits Puede ser leído y escrito a través del registro TMR0 (direcciones 1 y 101h) La entrada de reloj del temporizador puede seleccionarse que sea interna o externa. Interna: Frecuencia de reloj CPU dividida por 4. Externa: Entrada RA4/T0CKI Bit T0CS (bit 5) del OPTION_REG (direcciones 81h y 181h). 0 = reloj interno, 1 = reloj externo. Si se usa un reloj externo, su frecuencia como máximo será la mitad de la frecuencia de la entrada de reloj de la CPU. Si se selecciona el reloj externo, se puede utilizar como contador de pulsos en dicha entrada. En este caso se puede seleccionar si se activa la entrada por flanco de subida o de bajada: T0SE (bit 5) del OPTION_REG (direcciones 81h y 181h). 0 = flanco de subida, 1 = flanco de bajada. A este timer se le puede asociar un circuito divisor de la frecuencia de la entrada de reloj. Se le denomina Prescaler. Este circuito puede ser utilizado también por el Watch dog. En cualquier caso debe ser asignado a uno u otro. esto es seleccionado por el bit PSA (bit 3) del OPTION_REG (direcciones 81h y 181h). 0 = Timer 0, 1 = Watch dog. También es posible seleccionar el factor de división. Se dispone de tres bits: PS2, PS1 y PS0, (bits 2, 1 y 0) del OPTION_REG (direcciones 81h y 181h) que introducen los factores de división que se muestran en la siguiente tabla: Bits PS 000 001 010 011 100 101 110 111
Timer0 1:2 1:4 1:8 1:16 1:32 1:64 1:128 1:256
Watch dog 1:1 1:2 1:4 1:8 1:16 1:32 1:64 1:128
Finalmente existen los dos bits mencionados en las interrupciones que permiten generar una interrupción cada vez que se desborda el Timer0 cuando pasa de FFH a 0. Son los bits T0IE y T0IF del registro INTCON.
Watch dog Timer Este módulo permite inicializar la CPU cuando se rebasa el contador. Se activa por medio de los bits de configuración del microcontrolador (en tiempo de programación del chip) y permite recupera el sistema cuando se pierde el control del programa. El período con un valor de prescaler 1:1 oscila entre 7 y 33 mS. con un valor típico de 18 mS. Esta tolerancia es debida a la imprecisión del oscilador interno que depende de la temperatura y la tensión de alimentación básicamente. Este período se puede ampliar con el prescaler hasta un factor de 1:128.
Microcontroladores
Versión 1.41 29 oct. 05
pág. 27
Timer1 Timer de 16 bits Puede ser leído y escrito a través de los registros TMR1H y TMR1L. La entrada de reloj del temporizador puede seleccionarse que sea interna o externa. Interna: Frecuencia de reloj CPU dividida por 4. Externa: Entradas RC1/T1OSICCP2 y RC0/T1OSO/T1CKI Bit TMR1CS (T1CON<1>). 0 = reloj interno, 1 = reloj externo. Si se usa un reloj externo, su frecuencia como máximo será la mitad de la frecuencia de la entrada de reloj de la CPU. También con reloj externo existen dos alternativas, colocar un cristal como fuente de reloj (hasta 200 KHz) o utilizar una señal digital. En el segundo caso solo se utiliza la línea de entrada RC0/T1OSO/T1CKI. Para seleccionar una alternativa u otra, se dispone del bit T1OSCEN (T1CON<3>). Si vale 1 se usará el cristal activando el oscilador interno, si vale 0 se usan pulsos generados externamente. En este caso puede funcionar como contador de pulsos. Además se dispone de un bit que permite activar y desactivar el Timer: TMR1ON (T1CON<0>) El timer dispone de un prescaler controlado por los bits T1CKPS1 y T1CKPS0 (T1CON<5:4>) cuyos factores de división que se muestran en la siguiente tabla: Bits T1CKPS 00 01 10 11
Timer1 1:1 1:2 1:4 1:8
Finalmente existen los dos bits mencionados en las interrupciones que permiten generar una interrupción cada vez que se desborda el Timer1 cuando pasa de FFFFH a 0. Son los bits TMR1IE y TMR1IF necesitando además que estén activados los bits que habilitan las interrupciones de los periféricos (PEIE) y el general (GIE).
Microcontroladores
Versión 1.41 29 oct. 05
pág. 28
Timer2 Timer de 8 bits Puede ser leído y escrito a través del registro TMR2. La entrada de reloj del temporizador es interna, concretamente la frecuencia de reloj CPU dividida por 4. Se dispone de un bit que permite activar y desactivar el Timer: TMR2ON (T2CON<2>) El timer dispone de un prescaler controlado por los bits T2CKPS1 y T2CKPS0 (T2CON<1:0>) cuyos factores de división que se muestran en la siguiente tabla: Bits T2CKPS 00 01 1x
Timer2 1:1 1:4 1:16
La salida del contador puede ser conectada a un postscaler, que dispone de 4 bits de control T2OUTPS3:T2OUTPS0 cuya salida pasa a controlar el flag de interrupción asociado a este Timer. Los factores de división se muestran en la siguiente tabla: Bits T2OUTPS 0000 0001 0010 . . . 1101 1110 1111
Salida de interrupción 1:1 1:2 1:3 . . . 1:14 1:15 1:16
Finalmente existen los dos bits mencionados en las interrupciones que permiten generar una interrupción cada vez que se desborda el Timer2 cuando pasa de FFH a 0. Son los bits TMR2IE y TMR2IF necesitando además que estén activados los bits que habilitan las interrupciones de los periféricos (PEIE) y el general (GIE).
Microcontroladores
Versión 1.41 29 oct. 05
pág. 29
CAPTURE/COMPARE/PWM Módulos de captura, comparación y modulación por ancho de pulso. Existen dos módulos de este tipo: CCP1 y CCP2 cuyo funcionamiento es prácticamente idéntico diferenciándose en que el CCP2 podrá comenzar una conversión en el módulo A/D. Ambos módulos son de 16 bits, y están estrechamente relacionados con el Timer1. Modo captura. En este modo, el módulo CCPx captura el contenido del Timer1 cuando se produce un evento. Los eventos posibles, se refieren a los cambios en las entradas RC1/T1OSI/CCP2 ó RC2/CCP1 y se distinguen las siguientes situaciones: · · · ·
Un flanco de bajada. Un flanco de subida. Cada 4 flancos de subida. Cada 16 flancos de subida.
En este modo se pueden calcular intervalos de tiempo entre dos sucesos de forma muy exacta. Si se han activado las interrupciones, se generará una por cada captura realizada. Modo comparación. En este modo, el módulo CCPx comparará el contenido de los registros de 16 bits del módulo con el Timer1, de tal manera que cuando se produzca una coincidencia, se producirá la interrupción correspondiente cuando las interrupciones estén activadas y podrá hacerse que las líneas asociadas RC1/T1OSI/CCP2 ó RC2/CCP1 se pongan a nivel alto, bajo o no cambien. Finalmente resetearán el Timer1 y en el caso del CCP2 además se lanzará una conversión A/D si el conversor está activado (permite hacer muestreos periódicos) Modo PWM. En este caso se produce una salida PWM en el puerto CCPx, con una resolución de 10 bits. Una señal PWM señal con onda rectangular de frecuencia fija, en la que se puede variar el tiempo en el que la misma permanece a 0 o a 1. Sustituye en la mayoría de los casos a un conversor D/A. La frecuencia de la señal se establece por medio del Timer2 y el tiempo que permanece a 1 (Duty cycle) se controla por medio de los registros del CCP que se esté utilizando.
Microcontroladores
Versión 1.41 29 oct. 05
pág. 30
Master Synchronous Serial Port Este módulo implementa un interfaz de comunicaciones en serie. Existen multitud de dispositivos que permiten este tipo de comunicación, tales como memorias EEPROM, conversores A/D, sensores de diferentes tipos (temperatura, posición, distancia, ...), displays, otros microcontroladores, ... El módulo puede operar en dos modos: SPI e I2C. SPI: Serial Peripheral Interface. Este interface suele ser utilizado para comunicar dos dispositivos entre si, uno se configura como master y el otro como esclavo. En este interface se definen las líneas: · Serial Data Out (SDO) · Serial Date In (SDI) · Serial Clock (SCK) Adicionalmente se puede usar un cuarto pin en modo esclavo. ·
Slave Select ( SS )
Permite velocidades de hasta 8 Mbps con reloj a 20 MHz. El master inicia las transferencias activando la línea SCK, el esclavo recibe y transmite información cuando detecta que la línea SCK se activa. Cada vez que recibe un byte, en modo esclavo, se puede activar la interrupción correspondiente. I2C: Inter-Integrated Circuit. Permite la interconexión de múltiples dispositivos formando un bus. A cada dispositivo se le asigna una dirección y las tramas que se envían por el bus llevan direccionamiento para identificar los actores de la misma. En general se configura un dispositivo como master y el resto como esclavos, no obstante, se permiten buses multi-master, en este caso se dispone de mecanismos de detección de colisiones y gestión (arbitration) del Bus. se pueden alcanzar velocidades de 1 Mbps, y conectar hasta 128 o 1.024 dispositivos en función del tipo de direccionamiento utilizado..
Addressable Universal Synchronous Asynchronous Receiver Transmitter (USART). Este módulo implementa el popular interface de comunicaciones serie que tienen incluido gran cantidad de ordenadores. Permite comunicación serie entre dos dispositivos, y en algunos modos de funcionamiento, permite la conexión de más de dos dispositivos incluyendo 9 bits de direccionamiento (512 dispositivos).
Microcontroladores
Versión 1.41 29 oct. 05
pág. 31
Analog/Digital Converter. Este módulo permite la conexión de entradas analógicas para convertirlas en valores discretos obteniendo su valor. El valor mínimo de una entrada es 0 y aparece si la tensión de esa entrada es menor o igual a VREF-. El valor máximo es 1.023 (3FFH) si la tensión es mayor o igual que VREF+. Cualquier voltaje intermedio producirá un valor proporcional al mism0 en el rango de 1 a 1.022. Aunque se dispone de un único conversor, el microcontrolador tiene un multiplexor analógico que permite la conexión de hasta ocho entradas.
Para su uso se dispone de 4 registros de 8 bits: ADRESH, ADRESL, ADCON0 y ADCON1. Los dos primeros son: ADRESH y ADRESL (parte alta y parte baja del resultado de la conversión AD) contendrán el resultado de la última conversión. Se usan dos registros porque el conversor tiene una resolución de 10 bits. Si ocho bits fueran suficientes para una aplicación determinada, se puede indicar al conversor que entregue el resultado justificado a la izquierda y nos quedamos con el contenido de ADRESH. Registros ADCON0 y ADCON1 (Registros de control del conversor). ADCON1 suele usarse en la parte de inicialización del programa para asignar la función que debe corresponder a cada una de las posibles entradas analógicas. ADCON0 debe ser accedido antes de cada conversión. El bit de mayor peso de ADCON1 (ADFM) permite decidir si el resultado queda alineado a la izquierda (0) o a la derecha (1). 0
0
ADRESH 0 0 0 0
b9
b8
b7
b6
ADRESL b5 b4 b3 b2
b1
b0
Registros ADRESH y ADRESL con el resultado justificado a la derecha b9
b8
ADRESH b7 b6 b5 b4
b3
b2
b1
b0
ADRESL 0 0 0 0
0
0
Registros ADRESH y ADRESL con el resultado justificado a la izquierda
Microcontroladores
Versión 1.41 29 oct. 05
pág. 32
Los cuatro de menor peso (PCFG3 al PCFG0) se usan según la siguiente tabla: PCFG3: PCFG0 0000 0001 0010 0011 0100 0101 011x 1000 1001 1010 1011 1100 1101 1110 1111
AN7 RE2
AN6 RE1
AN5 RE0
AN4 RA5
AN3 RA3
AN2 RA2
AN1 RA1
AN0 RA0
VREF+
VREF-
CHAN/ Refs
A A D D D D D A D D D D D D D
A A D D D D D A D D D D D D D
A A D D D D D A A A A D D D D
A A A A D D D A A A A A D D D
A VREF+ A VREF+ A VREF+ D VREF+ A VREF+ VREF+ VREF+ VREF+ D VREF+
A A A A D D D
A A A A A A D A A A A A A D D
A A A A A A D A A A A A A A A
VDD RA3 VDD RA3 VDD RA3 VDD RA3 VDD RA3 RA3 RA3 RA3 VDD RA3
VSS VSS VSS VSS VSS VSS VSS RA2 VSS VSS RA2 RA2 RA2 VSS RA2
8/0 7/1 5/0 4/1 3/0 2/1 0/0 6/2 6/0 5/1 4/2 3/2 2/2 1/0 1/2
VREFA A VREFVREFVREFD VREF-
Esto permite que todas las entradas sean analógicas o digitales o algunas combinaciones de analógicas y digitales. También permite definir que valores se usarán como VREF+ y VREF-. Los dos bits de mayor peso de ADCON0 (ADCS1 y ADCS0) permiten seleccionar la fuente de reloj a utilizar. En general este parámetro no es crítico. Seleccionar los valores 01 ó 10 permiten realizar conversiones rápidas y precisas. Los bits 3 .. 5 se corresponde con CHS0 .. CHS2. Con esas tres líneas se gobierna el MPX analógico, y por tanto la entrada sobre la que se quiere hacer la conversión. El bit de menos peso (ADON) permite conectar o desconectar el conversor. Tenerlo desconectado permite reducir el consumo del microcontrolador. Finalmente el bit 2 GO/ DONE permite lanzar el proceso de conversión poniendo esta línea a 1, y comprobar si la conversión ha finalizado. Existen básicamente dos maneras de detectar cuando ha finalizado. Por interrupciones o por sondeo (polling). Si se activan los bits de interrupción correspondientes (ADIE, PIE y GIE y se pone a 0 ADIF), se producirá una interrupción cuando acabe la conversión en marcha, activando el ADIF. Por sondeo el método es el siguiente: Activar el bit GO/ DONE y entrar en un bucle en el que se comprueba este mismo bit. Mientras valga 1 la conversión está en curso. Cuando pasa a 0 la conversión finalizó y el resultado se encuentra en los registros ADRESH y L.
Microcontroladores
Versión 1.41 29 oct. 05
pág. 33
Microcontrolador 16F876 El 16F876 contiene el mismo núcleo que el 16F877, pero dispone de 28 pines, lo cual supone eliminar algunos de los periféricos de los presentes en su hermano mayor.
Tal y como se muestra en la figura, se puede observar que carece de los puertos D (8 bits) y E (3 bits), y en cuanto a periféricos, no existe el SPP (Slave Parallel Port) y el conversor A/D dispone de 5 entradas (frente a 8 del 16F877). También se dispone de una entrada menos de alimentación (un único pin para VDD).
Microcontroladores
Versión 1.41 29 oct. 05
pág. 34
Microcontrolador 16F84 El 16F84 es un microcontrolador de la gama media al igual que el 16F877 pero que carece de varios de los periféricos de éste a cambio de ser un circuito más económico y más pequeño. Carece de conversor A/D, y dispone de sólo 11 líneas de entrada salida.
Pines en el 16F84
Microcontroladores
Versión 1.41 29 oct. 05
pág. 35
Electrónica Componentes electrónicos
Pasivos Componentes electrónicos
Resistencias Condensadores Inductancias. Diodos Transistores Triacs ........
Activos
Analógicos
Reguladores de tensión Amplificadores operacionales ..........
Digitales
Puertas Multiplexores Memoria Microcontroladores ........
Circuitos integrados
Resistencias Resistencia eléctrica es la medida de la oposición que un material presenta al paso de la corriente eléctrica se mide en ohmios. . Una resistencia (también resistor) es un componente electrónico pasivo diseñado para introducir una resistencia eléctrica determinada entre dos puntos de un circuito. Los principales parámetros de un resistor son su resistencia y la potencia máxima que pueden disipar.
Fuente de alimentación
Esquema básico:
Transformador:
Microcontroladores
Versión 1.41 29 oct. 05
pág. 36
Rectificador: Media onda:
Onda completa con toma intermedia en transformador:
Onda completa sin toma intermedia en transformador:
Filtro: Se construye con un condensador de alta capacidad entre la salida del rectificador y masa. Se recomiendan capacidades de entre 2.000 y 5.000 mF por amperio que pueda proporcionar la F.A.
Microcontroladores
Versión 1.41 29 oct. 05
pág. 37
A la salida del regulador se suelo poner otro condensador de filtro pero de una capacidad inferior (entre 100 nF. y 10 mF.)
Regulador: La forma más simple utilizar reguladores integrados tales como la familia 78xx y 79xx. Cortocircuitables. Con protección térmica y contra sobrecargas. Corrientes de hasta 1 A.
Dispositivos E/S Interruptores/pulsadores: Suelen utilizarse resistencias de Pull-up o Pull-down. Se debe disponer de un sistema de supresión de rebotes que puede ser HW. (biestable, red RC, ...) o SW.
Teclados También necesitan resistencias pull-up o Pull-down. Pueden conectarse de dos formas:
También es necesario resolver el problema de los rebotes.
Microcontroladores
Versión 1.41 29 oct. 05
pág. 38
Otros dispositivos de entrada: Existen múltiples dispositivos que permiten obtener información del 'exterior'. Sensores de temperatura, luz, presión, y un largo etc. Es necesario acudir a los manuales de los fabricantes para conocer sus características, modo de conexión, etc. Un ejemplo de dispositivo es el CNY70, que contiene un emisor y un receptor de luz. Permite detectar por reflexión de la luz, si está en la proximidad de un objeto de color claro.
Microcontroladores
Versión 1.41 29 oct. 05
Dispositivos de salida: Diodos LED Funcionan a 1,8 V. 10-20 mA. Tienen polaridad
Displays 7 segmentos Varios diodos LED agrupados con el ánodo o el cátodo común.
pág. 39
Microcontroladores
Displays LCD
Versión 1.41 29 oct. 05
pág. 40
Microcontroladores
Versión 1.41 29 oct. 05
pág. 41
Microcontroladores
Versión 1.41 29 oct. 05
pág. 42
Microcontroladores
Versión 1.41 29 oct. 05
pág. 43
Microcontroladores
Versión 1.41 29 oct. 05
pág. 44
Transistores: Existen enormes tratados sobre las diferentes maneras de conectar los transistores, y las diferentes formas en las que pueden trabajar. Nosotros nos vamos a centrar en una forma de conectarlos (Emisor común) y dos zonas de trabajo (corte y saturación). Trabajando en estas condiciones, son muy pocas las cosas que debemos tener en cuenta para decidir que transistores utilizar y que componentes conectar asociados a los mismos. Seleccionar un transistor: Los elementos a tener en cuenta son Ic, hFE y VCEO. Ic: Define la máxima corriente que se puede controlar a partir de ese transistor. Será algo mayor que la corriente máxima del circuito que vamos a conectar. hFE: Define la ganancia. hFE = IC/IB. A partir de la ganancia, obtendremos la corriente que circulará por la Base, que es la que suministraremos para activar el transistor. VCEO Define la máxima diferencia de potencial entre colector y emisor, es decir la máxima tensión de trabajo. Esquema básico:
IB es la corriente que suministrará nuestro circuito de control. Por ejemplo la salida máxima de un pin de I/O de un PIC es de 25 mA: aunque no es conveniente llegar a las corrientes máximas. La carga es el dispositivo que queremos controlar con el transistor: Un relé, un motor, una lámpara, ... Es importante conocer la corriente máxima que circulará por el dispositivo, para seleccionar un transistor adecuado. Transistores comerciales: Existen miles de referencias diferentes. Mostraremos aquí solamente 4 referencias de transistores muy conocidos.
Microcontroladores
Versión 1.41 29 oct. 05
pág. 45
BC107 Es un transistor de baja potencia. Su IC es de 100 mA, su hFE es 110 y VCEO es de 45 V. El transistor complementario (mismas características salvo que es PNP, es el BC177).
Es muy adecuado para pequeñas cargas, tales como: el terminal común de un display de 7 segmentos, un relé, ... Por ejemplo supongamos que se debe activar un relé de 12 V. 80 mA. desde un PIC. El circuito sería: En el circuito vemos que la tensión aplicada al relé es de 12 V. mientras que la que llega a RB es de 5 V. Esto no supone ningún problema mientras no se sobrepasen los valores máximos del transistor (VCEO). La IC será la del relé, es decir 80 mA. La ganacia del transistor es 110, por lo que bastaría con una corriente de base IB = 80/110= 0,72 mA. No obstante para asegurar que se entra en saturación vemos a hacer que IB= 1 mA. R=V/I, V=5V. - 0,7 V. (0,7 V. de la unión Base Emisor del transistor). RB= 4,3/0,001=4300 W. El valor comercial más próximo por debajo es 3.900 W El diodo que aparece en el esquema, elimina los picos de tensión que produce la bobina del relé al conectarla y desconectarla.
BD 139 Es un transistor de media potencia. Su IC es de 2 A, su hFE varía entre 25 y 60 en función de IC y VCEO es de 80 V. El transistor complementario (mismas características salvo que es PNP, es el BD140).
Microcontroladores
Versión 1.41 29 oct. 05
pág. 46
TIP122 Es un transistor de potencia darlington (dos transistores conevtados en cascada para aumentar la ganancia). Su IC es de 5 A, su hFE es de 1.000 y VCEO es de 100 V. El transistor complementario (mismas características salvo que es PNP, es el TIP 127). Su elevada ganancia permite conectar la base al microcontrolador, y el colector a circuitos de elevada potencia, sin ninguna etapa previa.
2N3055 Es un transistor de potencia. Su IC es de 15 A, su hFE varía entre 2 y 100 en función de IC y VCEO es de 60 V. El transistor complementario (mismas características salvo que es PNP, es el MJ2955).
Microcontroladores
Versión 1.41 29 oct. 05
pág. 47
TRIACS Circuitos que pueden ser clasificados como relés para corriente alterna de estado sólido. Permiten conducir o bloquear el paso de la corriente alterna.
Microcontroladores
Versión 1.41 29 oct. 05
pág. 48
MOTORES Motores CC
S1
S3 VCC
MOTOR GND
S2
S4
ON OFF ON OFF OFF
OFF ON ON OFF OFF
OFF ON OFF ON OFF
ON OFF OFF ON OFF
IZQUIERDA DERECHA PARADO PARADO PARADO
Circuito L293
EN1 IN1 OUT1
1
16
Vcc TTL IN4 OUT4
GND GND
GND GND
OUT2 IN2 v+ motor
OUT3 IN3 EN2
8
9
1
O N/OFF 1 CO NT RO L 1
L293B EN1 IN1 OUT 1
M OT O R 1
GND GND OUT 2
CO NT RO L2
VCC IN4 O UT 4
VCC T T L
CON T ROL4 MO T OR 2
G ND G ND O UT 3
IN2
IN 3
v+ motor
EN2
CON T ROL3 ON /O FF 2
V+ MO T OR
CONTROL 1 ON ON OFF OFF X
CONTROL 2 ON OFF ON OFF X
ON / OFF 1 ON ON ON ON OFF
ESTADO MOTOR1 PARADO DERECHA IZQUIERDA PARADO PARADO
Microcontroladores
Versión 1.41 29 oct. 05
L293B
1
ON/OFF 1
EN1 IN1
DIR1 MOTOR 1
OUT1 GND GND OUT2
pág. 49 VCC TTL
VCC IN4 OUT4
DIR2 MOTOR 2
GND GND OUT3
IN2
IN3
v+ motor
EN2
ON/OFF 2
V+ MOTOR
DIRECCIÓN 1 OFF ON X
Servocontrol Discos/codificadores
Motores paso a paso
Motores Unipolares
ON / OFF 1 ON ON OFF
ESTADO MOTOR 1 IZQUIERDA DERECHA PARADO
Microcontroladores
Versión 1.41 29 oct. 05
pág. 50
Motor Bipolar
Control de motores paso a paso Motor Unipolar
1 2 3 4
A -
B -
C -
D
-
-
S1 ON OFF OFF ON
S2 OFF ON ON OFF
S3 ON ON OFF OFF
S4 CA OFF 1 OFF 0 ON 0 ON 1
D + + -
S1 OFF ON ON OFF
S2 ON OFF OFF ON
S3 ON OFF OFF ON
CB 0 1 1 0
CC 1 1 0 0
CD 0 0 1 1
S5 OFF OFF ON ON
S6 ON ON OFF OFF
S7 ON ON OFF OFF
Motor bipolar
1 2 3 4
A + + -
B + +
C + +
S4 OFF ON ON OFF
S8 CA OFF 1 OFF 0 ON 0 ON 1
CB 0 1 1 0
CC 1 1 0 0
CD 0 0 1 1
Microcontroladores
Versión 1.41 29 oct. 05
pág. 51
Circuitos específicos: SAA1027 +12 v Reloj
Reset Sentido GND
N.C
1
16
N.C
Reset
2
15
Clock
Sentido
3
14
VCC 1
RX
4
13
VCC 2
GND 1
5
12
GND 2
A
6
11
D
7
10
8
9
N.C C
N.C B
B
D
A
C