Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Caracteristicas Del Pic 16f628a

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 16

Para comenzar a programar microcontroladores PIC, el PIC que se utilizará (es decir, el que

utilizaré en este sitio) será el 16F628 (16F628a), que como ya se mencionó anteriormente
presenta algunas ventajas que lo hacen superior (desde el punto de vista de un principiante) a
otros PIC.

Antes que otra cosa es necesario ver algo de “teoría” sobre el PIC, sin embargo aquí
solamente mencionaré las características principales, para información más detallada es
recomendable consultar la hoja de datos proporcionada por Microchip.

El PIC 16F628 incorpora tres características importantes que son:

o Procesador tipo RISC (Procesador con un Conjunto Reducido de Instrucciones)


o Procesador segmentado
o Arquitectura HARVARD
El PIC 16F628 incorpora tres características importantes que son:

 Procesador tipo RISC (Procesador con un Conjunto Reducido de


Instrucciones)
 Procesador segmentado
 Arquitectura HARVARD

Con estos recursos el PIC es capaz de ejecutar instrucciones solamente


en un ciclo de instrucción. Con la estructura segmentada se pueden
realizar simultáneamente las dos fases en que se descompone cada
instrucción, ejecución de la instrucción y busqueda de la siguiente.
La separación de los dos tipos de memoria son los pilares de la
arquitectura Harvard, esto permite acceder en forma simultánea e
independiente a la memoria de datos y a la de instrucciones. El tener
memorias separadas permite que cada una tenga el ancho y tamaño más
adecuado. Así en el PIC 16F628 el ancho de los datos es de un byte,
mientras que la de las instrucciones es de 14 bits.

Características principales

 Conjunto reducido de instrucciones (RISC). Sólamente 35


instrucciones que aprender a utilizar
 Oscilador interno de 4MHz
 Las instrucciones se ejecutan en un sólo ciclo de máquina excepto
los saltos (goto y call), que requieren 2 ciclos. Aquí hay que
especificar que un ciclo de máquina se lleva 4 ciclos de reloj, si se
utiliza el reloj interno de 4MHz, los ciclos de máquina se realizarán
con una frecuencia de 1MHz, es decir que cada instrucción se
ejecutará en 1uS (microsegundo)
 pera con una frecuencia de reloj de hasta 20 MHz (ciclo de
máquina de 200 ns)
 Memoria de programa: 2048 locaciones de 14 bits
 Memoria de datos: Memoria RAM de 224 bytes (8 bits por registro)
 Memoria EEPROM: 128 bytes (8 bits por registro)
 Stack de 8 niveles
 16 Terminales de I/O que soportan corrientes de hasta 25 mA
 3 Temporizadores
 Módulos de comunicación serie, comparadores, PWM

Otra característica de los PICs es el manejo de los bancos de registros.


En línea general, los registros se clasifican como de uso general (GPR) y
de uso específico o de funciones especiales (SFR).

 Los registros de uso general pueden ser usados directamente por


el usuario, sin existir restricciones. Pueden servir para almacenar
resultados que se reciben desde el registro W (acumulador), datos
que provienen de las puertas de entradas, etc.
 Los registros de uso específicos no pueden ser usados
directamente por el usuario. Estos registros controlan
prácticamente todo el funcionamiento del microcontrolador, pues
toda la configuración necesaria para funcionamiento del
microcontrolador es hecho a través de algún tipo de SFR.

Pines de I/O (Entrada/Salida)

PORTA: RA0-RA7:

 Los pines RA0-RA4 y RA6–RA7 son bidireccionales y manejan


señales TTL
 El pin RA5 es una entrada Schmitt Trigger que sirve también para
entrar en el modo de programación cuando se aplica una tensión
igual a Vpp (13,4V mínimo)
 El terminal RA4 puede configurarse como reloj de entrada para el
contador TMR0
 Los pines RA0-
RA3 sirven de entrada para el comparador analógico

PORTB: RB0-RB7:

 Los pines RB0-RB7 son bidireccionales y manejan señales TTL


 Por software se pueden activar las resistencias de pull-up internas,
que evitan el uso de resistencias externas en caso de que los
terminales se utilicen como entrada (permite, en algunos casos,
reducir el número de componentes externos)
 El pin RB0 se puede utilizar como entrada de pulsos para provocar
una interrupción externa
 Los pines RB4-RB7 están diseñados para detectar una
interrupción por cambio de
estado. Esta interrupción puede utilizarse para controlar un teclado 
matricial, por poner un ejemplo

Otros pines

 VDD: Pin de alimentación positiva. De 2 a 5,5 Vcc


 VSS: Pin de alimentación negativa. Se conecta a tierra o a 0 Vcc
 MCLR: Master Clear (Reset). Si el nivel lógico de este terminal es
bajo (0 Vcc), el microcontrolador permanece inactivo. Este
Reset se controla mediante la palabra de configuración del PIC
 OSC1/CLKIN: Entrada de oscilador externo
 OSC2/CLKOUT: Salida del oscilador. El PIC 16F628 dependiendo
de cómo se configure puede proporcionar una salida de reloj por
medio de este pin

En la próxima entrega se dará una introducción al ambiente de desarrollo


MPLAB y se realizará el primer programa. También se verá el conjunto
de insotrucciones del PIC y las directivas del ensamblador MPASM.

Puertos
Los PIC16F628/648A cuentan con dos puertos PORTA y PORTB, algunos pines de
estos puertos de entrada/salida son multiplexados con una función alternativa de los
periféricos del dispositivo. Cuando un periférico es activado el pin no puede ser usado
para propósitos generales de e/s.

El PUERTO A es un puerto de entrada de 8 bits. Todos los pines, excepto RA5, pueden
ser configurados como entrada o salida con la respectiva configuración del registro
TRISA. El pin RA4 esta multiplexado con la entrada de reloj T0CKI y como salida se
comporta como colecto abierto, por lo tanto debemos poner una resistencia Pull-up a
Vdd. El pin RA5 es un disparador Schmitt solo de entrada y no cuenta con
controladores de salida, según la configuración puede ser usado como Mclr (Reset
externo), y además sirve también para entrar en el modo de programación cuando se
aplica una tensión igual a Vpp (13,4V mínimo). Los demás pines del puerto trabajan de
entrada como disparador de Schmitt Trigger y como salida lógica CMOS. Los pines
RA0-RA3 sirven de entrada para el comparador analógico.

Importante: Si se utiliza en puerto A como I/O Digital, se debe deshabilitar los


Comparadores Analógicos, cargando un 0x07 en CMCON.
El PORTB es un puerto bidireccional de 8 bits, del cual por software se pueden habilitar
resistencias de pull-up internas. El PORTB es multiplexado con interrupciones externas,
tales como detección de flanco por RB0, cambio de nivel por RB4 a RB7, USART, el
módulo CCP y el reloj de entrada/salida TMR1.

Otros pines
VDD: Pin de alimentación positiva. De 2 a 5,5 Vcc VSS: Pin de alimentación negativa.
Se conecta a tierra o a 0 Vcc MCLR: Master Clear (Reset). Si el nivel lógico de este
terminal es bajo (0 Vcc), el microcontrolador permanece inactivo. Este Reset se controla
mediante la palabra de configuración del PIC OSC1/CLKIN: Entrada de oscilador
externo OSC2/CLKOUT: Salida del oscilador. Dependiendo de cómo se configure
puede proporcionar una salida de reloj por medio de este pin
Organización de la memoria.
El PIC16F628 posee un contador de programa de 13 bits, capaz de direccionar un
espacio de memoria de 8Kx14. Sin embargo, únicamente los primeros 2Kx14, desde
0000h hasta 07FFh, están implementados. Los vectores de reset e interrupción están en
las direcciones 0000h y 0004h, respectivamente. La pila (stack) es de 8 niveles, lo cual
significa que puede soportar hasta 8 direcciones de retorno de subrutina.
 

osEl PIC16F628 posee un espacio de memoria RAM de datos de 512x8, dividido en 4


bancos de 128 bytes cada uno. Sin embargo, sólo están implementados 330 bytes,
correspondiendo 224 al área de los registros de propósito general (GPR) y 36 al área de
los registros de función especial (SFR). Los restantes 70 bytes implementados son
espejos de algunos SFR de uso frecuente, así como de los últimos 16 GPR del banco 0.
Por ejemplo, las posiciones 0Bh, 8Bh, 10Bh y 18Bh corresponden al registro INTCON,
de modo que una operación hecha en cualquiera de ellos, se refleja automáticamente en
los otros. Se dice, entonces, que las posiciones 8Bh, 10Bh y 18Bh están mapeadas en la
posición 0Bh. Esta característica agiliza el acceso a estos registros, puesto que no
siempre es necesario especificar el banco donde se encuentran. La selección del banco
de ubicación de un SFR o un GPR particular se hace mediante los bits 6 (RP1) y 5
(RP0) del registro STATUS.

Interrupciones:
Registros utilizados:
INTCON: Registro de lectura y escritura que contiene varios bits de señalización y
habilitación para el desbordamiento del TMR0, cambio sobre el puerto RB e
interrupción externa en la patilla RB0/INT.
0.   RBIF: Indicador de interrupción por cambio de estado RB4-RB7
1.   INTF: Indicador de interrupción externa
2.   T0IF: Indicador de interrupción por desbordamiento de Timer 0
3.   RBIE: Habilitación de interrupción por cambio de estado RB4-RB7
4.   INTE: Habilitación de interrupción externa
5.   T0IE: Habilitación de interrupción por desbordamiento de Timer 0
6.   PEIE: Habilitación de interrupción de periféricos
7.   GIE: Habilitación general de interrupciones

PIR1: El registro PIR1 contiene los bits de señalización individual de las interrupciones
de periféricos
0.   TMR1IF: Indicador de interrupción por desbordamiento de Timer 1
1.   TMR2IF: Indicador de interrupción por desbordamiento de Timer 2
2.   CCP1IF: Indicador de interrupción del módulo de Captura/Comparación.
a)   Modo Comparador: Coincidencia entre TMR1 y CCP1
b)   Modo Captura: Ha ocurrido una captura de TMR1
3.   No Implementado.
4.   TXIF: Indicador de interrupción de fin de transmisión USART
5.   RCIF: Indicador de interrupción de llegada de datos USART
6.   CMIF: Indicador de interrupción por cambio de estado de alguna de las salidas de
los comparadores.
7.   EEIF: Indicador de interrupción de fin de escritura eeprom interna.

PIE1: Registro que posee los bits de habilitación individual para las interrupciones de
periféricos. El bit PEIE del registro INTCON debe ser 1 para permitir la habilitación de
cualquier interrupción de periférico.
0.   TMR1IE: Habilitación de interrupción por desbordamiento de Timer 1
1.   TMR2IE: Habilitación de interrupción por desbordamiento de Timer 2
2.   CCP1IE: Habilitación de interrupción del módulo de Captura/Comparación/PWM.
3.   No Implementado.
4.   TXIE: Habilitación de interrupción de fin de transmisión USART
5.   RCIE: Habilitación de interrupción de llegada de datos USART
6.   CMIE: Habilitación de interrupción por cambio de estado de alguna de las salidas de
los comparadores.
7.   EEIE: Habilitación de interrupción de fin de escritura eeprom interna.

Lógica de Interrupciones:

Suky:
Palabra de Configuración

Los PIC16F628A/648A han sido construidos con características tales que se pueden
configurar para funcionar en modos de operación que no necesitan componentes
externos tales como el circuito de reloj o de reset. Esto implica que es necesario
configurar su modo de operación a través de una palabra de configuración.
La palabra de configuración se encuentra mapeada en la dirección 2007h de la memoria
de programa y solo puede ser accesada durante la programación de dispositivo.
CP1:CP0:Bits de protección de código
Los bits 13-10 encargados de proteger la memoria de programa.
CPD: Bit de protección para código de datos
1 = Protección deshabilitada de la memoria de datos.
0 = Protección habilitada en la memoria de datos.
LVP: Habilitación de la programación por voltaje bajo
1 = LVP habilitado, la terminal RB4/PGM tiene tal función.
0 = LCP: deshabilitado, RB4/PGM es una terminal I/O.
BODEN: Bit de reset por voltaje de alimentación bajo
1 = Reset por BOD habilitado
0 = Reset por BOD deshabilitado
MCLRE: Habilitacion del terminal de reset
1 = Terminal de reset en RA5.
0 = MCLR conectado internamente a Vdd, RA5 es un pin I/O.
PWRTEN : Bit de habilitación de temporizador al energizar
1 = PWRT habilitado.
0 = PWRT deshabilitado.
WDTEN: Bits de habilitación de Watch-Dog
1 = WDT habilitado
0 = WDT deshabilitado.
FOSC2:FOSC1:FOSC0: Bits de selección del tipo de oscilador
 

Suky:
El Módulo del Timer 0.
Idéntico al del PIC16F84.

El Módulo del Timer 1.


El Timer 1 a diferencia del Timer 0 es un contador / temporizador de 16 bits. El conteo
es realizado por dos registros de 8 bits: (TMR1H (0Fh) y TMR1L (0Eh) ), estos dos
registros son tanto leíbles como escribibles.
Así, el registro TMR1 se incrementa de 0000h a FFFFh y en la siguiente cuenta se
reinicia en 0000h y así sucesivamente, al reciclarse se activa (en alto) la bandera
TMR1IF (PIR1<0>), la cual puede ser utilizada para generar una interrupción, o bien,
para ser consultada por poleo, teniendo las mismas precauciones que ya se explicaron
antes para la bandera T0IF.

En la siguiente figura se muestra un diagrama de bloques de este módulo, en donde se


indican los bits que afectan su operación y la manera en que lo hacen.

Modo temporizador
En este modo el Timer se incrementa (si no se considera preescalador) en cada ciclo de
instrucción (a la frecuencia Fosc/4). Este modo se selecciona limpiando el bit TMR1CS
(T1CON<1>).
El preescalador que se puede intercalar entre el reloj Fosc/4 y el registro TMR1 puede
tener sólo uno de 4 valores: 1/1, 1/2, 1/4 y 1/8.
En este caso la temporización de calcula:
Temporización = Ciclo de instrucción. (65536-TMR1) .Divisor de Frecuencia
Vemos que la máxima temporización posible es con TMR1 = 0, y Divisor de Frecuencia
en 8, lográndose unos 524.3 ms aprox.

Modo contador
El Timer 1 también puede operar como contador, en este último caso, la entrada a
contar se toma de la patita externa RB6/T1OSO/T1CKI.

Configuraciones:
El Timer 1 posee un bit para habilitación / deshabilitación, este es el bit TMR1ON
(T1CON<0>) y habilita en alto.
Además, el Timer 1 posee una entrada interna de RESET, el cual puede ser activado por
uno cualquiera de los módulos CCP que.
A continuación se describe el principal registro relacionado con el Timer 1 y todos sus
bits, excepto los que tienen que ver con el modo contador:
Registro T1CON (10h)

bits 5:4
T1CKPS1:T1CKPS0.- Bits de selección del valor del divisor de frecuencia del
preescalador:
1 1 = divisor 1/8
1 0 = divisor 1/4
0 1 = divisor 1/2
0 0 = divisor 1/1

bit 1
TMR1CS.- Bit de selección de la fuente de reloj
1 = Modo contador (fuente de reloj: patita RC0/T1OSO/T1CKI)
0 = Modo Temporizador (fuente de reloj Fosc/4)

bit 0
TMR1ON.- Bit de habilitación / deshabilitación del Timer 1:
1 = habilita Timer 1
0 = Deshabilita Timer 1

ConfigPIC traé una herramienta adicional que nos ayuda a seleccionar el preescaler y
valor inicial del Timer para obtener una temporización deseada:

Suky:
Para ejemplificar haremos un simple ejemplo donde lo utilizamos como temporizador.
Se hará titilar un led conectado al PIN RB0 cada 300 ms. Como se puede ver es idéntico
al ejemplo realizado para Timer 0 del PIC16F84A, solo que en este caso no
necesitaremos un registro adicional para lograr la demora deseada.
Hardware:

Código
GeSHi (asm):
; **** Encabezado ****
list p=16f628A ; list directive to define processor
#include <p16f628A.inc> ; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON &
_INTOSC_OSC_NOCLKOUT & _DATA_CP_OFF & _LVP_OFF & _MCLRE_ON
 
;**** Definiciones para el ensamblador ****
#DEFINE Led PORTB,0 ; Led ubicado en Puerto B, bit 0.-
 
;//////////////////////////////////////////
;**** Inicio del Micro ****
Reset
org 0x00 ; Aquí comienza el micro.-
goto Inicio ; Salto a inicio de mi programa.-
;**** Vector de Interrupcion ****
org 0x04 ; Atiendo Interrupcion.-
goto ISR
 
; **** Programa Principal ****
;**** Configuracion de puertos ***
org 0x05 ; Origen del código de programa.-
Inicio
bsf STATUS,RP0 ; Pasamos de Banco 0 a Banco 1.-
movlw b'11111110' ; RB0 como salida.-
movwf TRISB
bcf STATUS,RP0 ; Banco 0.-
movlw b'00110001' ; Se selecciona TMR1, preescaler de 1/8, modo temporizador.-
movwf T1CON
bcf Led ; El Led comienza apagado.-
movlw 0x6D ; Cargamos 28036 en TMR1 para lograr 300ms.-
movwf TMR1H ; Byte alto de TMR1.-
movlw 0x84
movwf TMR1L ; Byte bajo de TMR1.-
bsf STATUS,RP0 ; Banco 1.-
bsf PIE1,TMR1IE ; Activar interrupción por TMR1.
bsf INTCON,GIE ; Habilitacion general de interrupciones.-
bsf INTCON,PEIE ; Habilitacion de Interrupcion por perifericos.-
bcf STATUS,RP0 ; Banco 0.-
;**** Control de Led ****
Bucle
nop ; Aqui el micro puede ejecutar cualquier otra tarea
goto Bucle ; sin necesidad de utilizar tiempo en un bucle de demora.-
 
 
;**** Rutina de servicio de Interrupcion ****
;**** Interrupcion por TMR1 ****
ISR
btfss PIR1,TMR1IF ; Consultamos si es por TMR1.-
retfie ; No, salimos de interrupcion.-
btfss Led ; Si, Controlamos Led. Si esta apagado, prendo y viseversa.-
goto Prendo_led
bcf Led ; Apago Led.-
Actualizo_TMR1 ; Actualizo TMR1 para obtener una temporizacion de 300 ms.-
movlw 0x6D ; Cargamos 28036 en TMR1.-
movwf TMR1H ; Byte alto de TMR1.-
movlw 0x84
movwf TMR1L ; Byte bajo de TMR1.-
goto Fin_ISR ; Restauro valores.-
Prendo_led
bsf Led ; Prendo Led.-
goto Actualizo_TMR1
Fin_ISR
bcf PIR1,TMR1IF ; Borro bandera de control de Interrupcion.-
retfie ; Salimos de interrupción.-
;..........................................
 
end

PIC16F628A/648A
Haré una introducción a los micros y realizare ejemplos para los módulos que no trae el
PIC16F84A.

Características principales
Conjunto reducido de instrucciones (RISC). Solamente 35 instrucciones que aprender a utilizar
Oscilador interno de 4MHz Opera con una frecuencia de reloj externa de hasta 20 MHz (ciclo
de máquina de 200 ns) Memoria de programa: 2048 locaciones de 14 bits Memoria de datos:
Memoria RAM de 224 bytes (8 bits por registro) Memoria EEPROM: 128 bytes (8 bits por
registro) Stack de 8 niveles 16 Terminales de I/O que soportan corrientes de hasta 25 mA 3
Temporizadores Módulo de comunicación serie (UsartMódulo CCP
(captura/comparación/PWM)2 Comparadores analógicos, una referencia de voltaje
programableNota: Los módulos descriptos para el PIC16F628A son idénticos a los del
PIC16F648A, lo único que varía entre ellos son las siguientes características:
Memoria de programa: PIC16F648A-4096 locaciones de 14 bits Memoria de datos:
PIC16F648A-Memoria RAM de 256 bytes (8 bits por registro) Memoria EEPROM: PIC16F648A-
256 bytes (8 bits por registro)

De aquí en adelante me refiero al PIC16F628A pero los ejemplos son aplicables al PIC16F648A
haciendo el cambio de encabezado:
Código
GeSHi (asm):
; **** Encabezado ****
list p=16f648A ; list directive to define processor
#include <p16f648A.inc> ; processor specific variable definitions

En la siguiente figura se muestra el diagrama de pines.

                                                                   
                          Diagramas de pines del PIC16F628A
Características del PIC16F628A:

CPU De alto rendimiento RISC: 


• velocidades de operación de DC - 20 MHz 
• Capacidad de interrupción 
• pila de 8 niveles
• Modos de direccionamiento directos, indirectos y relativo 
• 35 simples instrucciones de palabra: 
- Todas las instrucciones de ciclo único, excepto las de salto 

Características Especial microcontrolador: 


• opciones de oscilador externo e interno: 
- Precisión de fábrica del oscilador interno de 4 MHz calibrada
a ± 1% 
- oscilador de 48 kHz De bajo consumo interno 
• Modo de ahorro de energía en modo sueño 
• resistencias programable pul-ups del PORTB 
• Multiplexado del pin reset / Entrada-pin 
• Temporizador Watchdog con oscilador independiente para
un funcionamiento fiable

• Baja tensión de programación ™ In-Circuit Serial (a través


de dos pines) 
• Protección de código programable 
• Brown-out reset 
• Power-on Reset 
• Power-up Timer y el oscilador de puesta en marcha del
temporizador 
• Amplio rango de funcionamiento de tensión (2.0-5.5V) 
• Industrial y amplia gama de temperaturas extendidas
• Alta durabilidad de la memoria  Flash /EEPROM: 
- 100.000 ciclos de escritura Flash 
- 1.000.000  ciclos de escritura EEPROM
- 40 años de retención de datos 
De baja potencia Características: 
• Corriente en espera: 
- 100 nA@2.0V, típico 
• Corriente de funcionamiento: 
- 12μA @ 32 kHz, 2,0 V, típica 
- 120μA @ 1 MHz, 2,0 V, típica 
• Temporizador Watchdog actual: 
- 1μA@2.0V, típico 
• Timer1 oscilador actual: 
- 1.2μA @ 32 kHz, 2,0 V, típica 
• Doble velocidad del oscilador interno: 
- Tiempo de ejecución seleccionable entre 4 MHz y de  48
kHz 
- 4μs despertar de un sueño, 3.0V, típico 

En la siguiente figura se muestran los microcontroladores que


componen esta serie

TIPOS DE MEMORIA DEL PIC16F628A

Memoria flash: esta memoria es de tipo no volátil  en esta 


memoria  ira nuestro programa que realicemos.

 El pic16f628a tiene una capacidad de 2048 words seto se


podría traducir a 2048 líneas de código que podemos escribir 
en lenguaje assembler para este microcontrolador.
Memoria RAM: esta memoria sirve para guardar datos y
variables, esta memoria es de tipo volátil, es decir perderá la
información cuando desaparezca la alimentación.

La memoria ram que posee el microcontrolador pic16f628a es


de 224 bytes

Memoria eeprom: en una memoria de tipo no volátil de poca


capacidad sirve para guardar datos, aun cuando deje de
recibir alimentación la información no se perderá.

La memoria eeprom  que posee el pic16f628a es de 128


bytes.

Tipos de osciladores

El PIC16F627A/628A/648A puede ser operado en ocho


diferentes modos de oscilador. RC, Oscilador con resistencia y
condensador (2 modos)
XT, Cristal de cuarzo.
HS, Cristal de alta velocidad
LP, Cristal de baja frecuencia y bajo consumo de potencia.

 INTOSC, oscilador interno de precisión de 4mhz (2 modos)


EC, señal externa de entrada de reloj

En la siguiente figura el diagrama de bloques del oscilador


En la siguiente tabla se muestra los valores de los cristales y
sus respectivos condensadores de filtro para el oscilador
externo.

Al  momento de programar un micro se debe especificar que


tipo de oscilador se usa.
Internamente la frecuencia del oscilador es dividida por 4, así
que si temeos un oscilador de 4 MHz, la frecuencia de trabajo
es de 1 MHz, por lo que cada instrucción se ejecuta cada 1
us.

Mapa de memoria del pic16f628a

Como vemos en la siguiente figura el mapa de memoria se


encuentra dividida en 4 bancos en estos bancos se encuentra
los registros de control así como también la memoria RAM.
Diagrama de bloques del PIC16F628A

En la siguiente figura se muestra el diagrama de bloques del


pic16f628a como vemos los puertos a y b son direccionales,

sea se les puede configurara como entrada o salida digital.

También podría gustarte