Вы находитесь на странице: 1из 23
Instituto Tecnológico de Durango Depto. De Ingeniería Eléctrica y Electrónica Ingeniería electrónica

Práctica 1. Encendido y apagado de leds.

Unidad 1 Práctica 1. Encendido y apagado de leds. Facilitador: Miguel Ángel Esparza Ávila Alumna: Leslie

Facilitador: Miguel Ángel Esparza Ávila

Alumna: Leslie Yareli Guerrero Lares

No. De control: 14041574

Índice

Introducción

1

Marco teórico

2

Diagrama de flujo

14

Código en MPLAB (ensamblador)

15

Código en c (mikroc)

19

Simulación en proteus

20

Implementación con pickit 2

22

Resultados

22

Conclusiones

23

Introducción.

El objetivo de esta práctica es familiarizarnos con el uso de MPLAB, la simulación en proteus y la utilización física del dspic33fj12gp202. Comenzaremos observando las generalidades de los microcontroladores, veremos los dspic, luego nos centraremos en nuestro dispositivo y veremos cómo avanzar en los diversos programas.

Marco teórico.

¿Qué es un microcontrolador?

Un microcontrolador es un computador completo (microprocesador + E/S + memoria + otros periféricos), aunque de limitadas prestaciones, que está contenido en el chip de un circuito integrado programable y se destina a gobernar una sola tarea con el programa que reside en su memoria. Sus líneas de entrada/salida soportan el conexionado de los sensores y actuadores del dispositivo a controlar.

Arquitectura básica

Aunque inicialmente todos los microcontroladores adoptaron la arquitectura clásica de von Neumann, en la actualidad se impone la arquitectura Harvard.

La arquitectura de von Neumann se caracteriza por disponer de una sola memoria principal donde se almacenan datos e instrucciones de forma indistinta. A dicha memoria se accede a través de un sistema de buses único (direcciones, datos y control).

La arquitectura Harvard dispone de dos memorias independientes una, que contiene sólo instrucciones y otra, sólo datos. Ambas disponen de sus respectivos sistemas de buses y es posible realizar operaciones de acceso (lectura o escritura) simultáneamente en ambas memorias.

A continuación la arquitectura del dispositivo elegido: dsPIC33fj12gp202.

Así como analizamos la arquitectura de los microcontroladores anteriores ahora podemos observar los componentes del dspic.

Contador de programa.

Contador de programa.

Memoria de programa.

Memoria de programa.

Unidad de control.

Unidad de control.

-Registro de instrucción.

ALU

ALU

Ya que no se muestra Stack Pointer en la arquitectura significa que debe estar en el arreglo de registros de 16 x 16 (Wregister array). Si leemos el manual nos daremos cuenta que el W15 (registro) es la pila.

Para entender mejor el modo de programación del dspic necesitamos leer:

Resumen de registros de puertos y para qué sirven.

LAT, PORT. Se relacionan con cada pin del puerto.

TRIS. Determina si es entrada o salida la línea (0=salida, 1=entrada).

AD1PCFGL. 1 digital, 0 analógico

CN. CNEN1, CNEN2. No es por puerto es por línea.

Todos los pines del dispositivo excepto VDD, VSS, MCLR y OSC1/CLK son compartidos por los periféricos y los puertos paralelos de entrada-salida. Todos los puertos de entrada de cuentan con entradas de disparo Schmidtt para mejorar la inmunidad de ruido.

Puertos paralelos de E/S (PIO).

Todos los puertos paralelos E/S que comparten un pin con un periférico son generalmente subordinados del periférico. Los datos del búfer de salida del periférico y las señales de control se proporcionan a un par de multiplexores. Los multiplexores seleccionan si el periférico o el puerto asociado tiene propiedad de los datos de salida y señales de control del pin de E / S. La lógica también evita el bucle, en el cual la salida digital de un puerto puede conducir la entrada de un periférico que comparte el mismo pin.

Cuando se habilita un periférico y el periférico está activando un pin asociado, se desactiva el uso del pin como un pin de salida de propósito general. El pin de E/S se puede leer, pero el pin de salida está deshabilitado. El pin E/S se puede leer, pero el controlador de salida para el bit de puerto paralelo está deshabilitado. Si un periférico está habilitado, pero el periférico no está activando un pin, ese pin puede ser conducido por un puerto.

Todos los puertos tienen 3 registros directamente asociados con su operación como entradas/salidas digitales. El registro de dirección de datos (TRISx) determina cuando el pin es una entrada o una salida. Si el bit de dirección de datos es un 1, entonces el pin es una entrada, si es un 0 es salida. Todos los puertos se definen como entradas después de un reset.

Escrituras en el latch, escribe en el latch. Lecturas en el puerto (PORTx) lee los pines de puerto, mientras que escribir en los pines de puerto escribe en el latch.

Cualquier bit y sus registros de control y datos asociados que no son válidos para un dispositivo en particular se desactivan. Esto significa que los registros LATx y TRISx correspondientes y los pines de puerto se leerán como ceros.

se desactivan. Esto significa que los registros LATx y TRISx correspondientes y los pines de puerto

Configuración de colector abierto.

Además de los registros PORT, LAT y TRIS para el control de datos, algunos pines se pueden configurar también como salida digital o de colector abierto. Esto es controlado por el registro de Control de Colector Abierto (OCDx), asociado con cada puerto. Al configurar cualquiera de los bits se configura el pin correspondiente para actuar como una salida de drenaje abierto. La función de colector abierto permite la generación de salidas superiores a VDD en cualquier pin que tolere 5v utilizando resistencias pull-up externas. El máximo voltaje de colector abierto permitido es el mismo que es máximo VIH especificado.

Configurando pines de puerto análogos.

Los registros AD1PCFG y TRIS controlan la operación de los pines Análogos a Digitales (A/D). Los pines deseados como entradas análogas deben tener su bit puesto en 1 (entrada). Si el TRIS está limpio (0) es salida, el nivel de salida digital (VOH o VOL) se convertirá.

El registro AD1PCFGL tiene un valor predeterminado de 0X0000; por lo tanto, todos los pines que comparten funciones ANx son análogas (no digitales) por default.

Cuando el registro PORT está leyendo, todos los pines configurados como canales de entrada analógicos se leerán con un nivel bajo. Los pines configurados como entradas digitales no se convertirán en entradas analógicas. Los niveles analógicos en cualquier pin que está definido como entrada digital (incluyendo los pines ANx) pueden causar que la entrada buffer consuma corriente que excede las especificaciones del dispositivo.

Sincronización de puertos de E/S. Un ciclo de instrucción es requerido entre el cambio de dirección del puerto u operación de escritura de puerto y una operación de lectura en el mismo puerto. Típicamente esta instrucción puede ser NOP.

Notificación de Cambio de Nivel (entrada).

La función de notificación de cambio de nivel de los puertos de E/S permite al dispositivo generar una solicitud de interrupción al procesador en respuesta a un cambio de estado en los pines de entrada seleccionados. Esta función puede detectar en cambios de estado en la entrada incluso en

el modo sleep, cuando el reloj está deshabilitado. Dependiendo del conteo de pines del dispositivo, arriba de 21 señales de salida (pin CNx) puede ser seleccionado (habilitado) para generar una solicitud de interrupción en un cambio de estado. 4 registros de control están asociados con el módulo CN. Los registros CNEN1 y CNEN2 contienen los bits de habilitación de interrupción para cada bit de entrada. Poniendo cualquiera de esos bits habilitan una interrupción CN por los pines correspondientes.

Cada CN puede tener conectada una resistencia pull-up. El arreglo pull-up actúa como una corriente de base conectada al pin y elimina la necesidad de resistencias externas cuando un botón o el teclado están conectados. Se habilitan por separado utilizando los registros CNPU1 y CNPU2, que contienen los bits de control para cada uno de los pines CN. Activando cualquiera de los bits de control habilita los arreglos pull-up para los pines correspondientes. Los Pull-up en los pines de notificación de cambio (CN) deben estar siempre deshabilitados cuando el pin está configurado como una salida digital.

Selección del pin periférico.

El mayor reto en un dispositivo de propósito general es proveer la mayor cantidad posible de funciones de periféricos mientras minimizamos el conflicto de funciones en pines de E/S. El reto es incluso mayor cuando los dispositivos tienen un número pequeño de pines. La configuración de selección del pin periférico habilita la selección de periféricos y le da amplio rango a los pines de E/S.

La configuración de selección del pin periférico funciona operando sobre un conjunto de pines de E/S digitales. Los programadores pueden mapear la entrada y/o salida de la mayoría de los periféricos digitales a cualquiera de estos pines de E/S. La selección del pin periférico se realiza en el software y generalmente no requiere que el dispositivo se reprograme.

Pines disponibles. La función de selección del pin periférico se usa en un rango de más de 16 pines. El número de pines disponibles depende del dispositivo en particular y el número de pines que tenga. Los pines que soportan la función de selección del pin periférico incluyen la designación RPn, en su diseño completo de pines donde RP designa un periférico remapeable y n es el número de pin asignado.

Control del pin periférico.

La función del pin periférico está controlada a través de dos sets de registros de función específica: uno mapea las entradas periféricas y otro las salidas.

Como están controladas separado, periféricos específicos de entrada y salida (si el periférico tiene ambos) pueden ser posicionados en cualquier pin de función seleccionable sin restricción.

La asociación de un periférico a un pin de selección de periférico es manejada de dos maneras diferentes, dependiendo de si está siendo mapeada una entrada o una salida.

Mapeo de entradas.

Las entradas de las opciones de selección de pin periférico se asignan sobre la base del periférico. Un registro de control asociado con el periférico dice en cual pin se asignarán. Los registros RPINRx son utilizados para configurar la asignación de entradas periféricas. Cada registro contiene un conjunto de celdas de 5 bits, con cada set asociado a uno de los periféricos asignados. Programar el campo de bit de un periférico dado con un valor apropiado de 5 bits asigna el pin RPn con ese valor al periférico. Para cualquier dispositivo, el rango válido de valores de cualquier campo de bits corresponde al máximo número de pines periféricos seleccionados soportados por ese dispositivo.

Para la sola asignación de entradas, la selección del pin perifério (PPS) no tiene prioridad sobre los ajustes del TRISx. Por lo tanto, cuando se configura el pin RPn para entrada, el bit correspondiente en el registro TRISx debe estar configurado como entrada también.

Asignación de salidas.

A diferencia de las entradas, las opciones de selección del pin periférico están asignadas con base en el pin. En este caso, un registro de control asociado con el pin en particular dicta la asignación de la salida periférica. Los registros RPORx son utilizados para controlar la asignación de salidas. Como los RPINRx, cada registro contiene sets de campos de 5 bits, cada set asociado a un pin RPn. El valor del campo de bits corresponde a uno de los periféricos y la salida se asigna al pin.

La lista de periféricos que pueden asignarse como salida incluye un valor nulo de “00000” por la técnica de asignación. Esto permite que cualquier pin dado permanezca desconectado de la salida o de cualquier pin periférico seleccionable.

Esto permite que cualquier pin dado permanezca desconectado de la salida o de cualquier pin periférico
Control de cambios de configuración. Como la asignación de periféricos puede cambiar durante el tiempo

Control de cambios de configuración. Como la asignación de periféricos puede cambiar durante el tiempo de ejecución, se necesitan algunas restricciones en la asignación de periféricos para prevenir cambios en la configuración. Este dispositivo tiene 3 funciones para prevenir alteraciones al asignar periféricos:

Secuencia de bloqueo del registro de control.para prevenir alteraciones al asignar periféricos: Monitoreo continuo de estado. Bloqueo de configuración de

Monitoreo continuo de estado.periféricos: Secuencia de bloqueo del registro de control. Bloqueo de configuración de bit del pin de

Bloqueo de configuración de bit del pin de selección.del registro de control. Monitoreo continuo de estado. Bloqueo del registro de control. Bajo operación normal,

Bloqueo del registro de control.

Bajo operación normal, no está permitido escribir en los registros RPINRx y RPORx. Los intentos de escritura paracen ejecutarse normalmente, pero el contenido de los registros permanece sin cambios. Para cambiar estos registros deben desbloquearse en el hardware. El bloqueo está controlado por el bit IOLOCK (OSCCON<6>). Ajustando el bit IOLOCK previene escribir en los registros de control, limpiando las escrituras permitidas del bit IOLOCK.

Para ajustar o limpiar el bit IOLOCK se requiere ejecutar un comando específico.

1. Escribe 0x46 a OSCCON <7:0>.

2. Escribe 0x57 a OSCCON <7:0>.

3. Limpia o ajusta el bit como una función aislada.

Diagrama de flujo.

INICIO

Posicionamos la pila en 0x900, w15

Diagrama de flujo . INICIO Posicionamos la pila en 0x900, w15 Configuración de entradas y salidas.

Configuración de entradas y salidas.

(Todas digitales)

RB0-RB7

TRIS Y LAT Inicialmente en cero Delay Salidas a 1 (0Xffff) Delay
TRIS Y LAT
Inicialmente en cero
Delay
Salidas a 1
(0Xffff)
Delay

MPLAB.

En base al diagrama de flujo que hicimos haremos nuestro programa.

Entramos a WindowConfiguration bits y configuramos nuestro dspic, generamos el código y lo añadimos al programa.

; DSPIC33FJ12GP202 Configuration Bit Settings

; 'C' source line config statements

; FBS

#pragma config BWRP = WRPROTECT_OFF ; Boot Segment Write Protect (Boot Segment may be written)

#pragma config BSS = NO_FLASH

; Boot Segment Program Flash Code

Protection (No Boot program Flash segment)

; FGS

#pragma config GWRP = OFF

(User program memory is not write-protected)

#pragma config GSS = OFF ; General Segment Code Protection (User program memory is not code-protected)

; General Code Segment Write Protect

; FOSCSEL

#pragma config FNOSC = FRC (FRC))

#pragma config IESO = ON ; Internal External Switch Over Mode (Start-up device with FRC, then automatically switch to user-selected oscillator source when ready)

; Oscillator Mode (Internal Fast RC

; FOSC

#pragma config POSCMD = NONE Oscillator Disabled)

; Primary Oscillator Source (Primary

#pragma config OSCIOFNC = OFF clock out function)

#pragma config IOL1WAY = ON (Allow Only One Re-configuration)

#pragma config FCKSM = CSDCMD

Clock Switching and Fail-Safe Clock Monitor are disabled)

; OSC2 Pin Function (OSC2 pin has

; Peripheral Pin Select Configuration

; Clock Switching and Monitor (Both

; FWDT

#pragma config WDTPOST = PS32768

(1:32,768)

; Watchdog Timer Postscaler

#pragma config WDTPRE = PR128 ; WDT Prescaler (1:128)

#pragma config WINDIS = OFF Timer in Non-Window mode)

#pragma config FWDTEN = OFF

timer enabled/disabled by user software)

; Watchdog Timer Window (Watchdog

; Watchdog Timer Enable (Watchdog

; FPOR

#pragma config FPWRT = PWR128

#pragma config ALTI2C = OFF SDA1/SCL1 pins)

; POR Timer Value (128ms)

; Alternate I2C pins (I2C mapped to

; FICD

#pragma config ICS = PGD1 on PGC1/EMUC1 and PGD1/EMUD1)

#pragma config JTAGEN = ON

; Comm Channel Select (Communicate

; JTAG Port Enable (JTAG is Enabled)

; #pragma config statements should precede project file includes.

; Use project enums instead of #define for ON and OFF.

#include <xc.h>

.global

.bss ;datos no inicializados

.data ; datos inicializados

.text ;seccion codigo

reset

reset:

;Primer proyecto para verificar el funcionamiento del dsPIC y MPLABX.

;06 de septiembre 2017

Mov #0x900, w15 ;pila a partir de 0x900

;AD1 Líneas que son analógica o digital 1=digital, 0=analógica.

;Registro asociado a la configuración de los puertos: en este caso

TRISB.

;1=entrada

;0=salida

MOV #0x0000, w1

;Un bit para cada línea del puerto b

;no se pueden asignar valores al registro directamente, se tiene que pasar de un registro a otro

;Todo lo que no es w, es f (mov f, wreg).

Mov w1,TRISB ; Asignamos el puerto b como salida (todo el puerto b)

Mov #0xFFFF, w1

Mov, w1, AD1PCFGL ;todas las líneas serán digitales

;PORT y LATCH: Latch se visualiza afuera.

Ciclo:

mov LATB,w1

AND.B #0X00,w1 ; se cambió a .B porque era max 10

Mov w1, LATB

call ret_1s ; rutina de retardo

mov LATB, W1

; clr LATB ; salidas = 0, RB0-RB7=0

ret_1s:

XOR #0xFF, w1 Mov w1, LATB ;RB0-RB7=1 (LEDS PRENDIDOS) Call ret_1s ;ciclar BRA Ciclo ; branch cicla (sin condición en este caso) ;Hacer tiempo con registros para delay ;Oscilador interno 7.37MHZ

;cada ciclo de instrucción se lleva dos ciclos de reloj

;Tcy=1/fcy

;tomamos 1000 y 3685 para dos registros cualquiera Mov #3685,w1 mov #1000, w2 ;decrementa

DEC_w2:

DEC w2,w3

Mov w3,w2 BRA NZ, DEC_w2 Mov #1000, w2 Dec w1, w3 Mov w3, w1 BRA NZ, DEC_w2 RETURN

MIKROC para dsPIC.

#include

void main() {

<built_in.h>

w15=0x900;

AD1PCFGL=0XFFFF;

TRISB=0;

LATB = 0;

while(1){

Lo(LATB)=0X00;

delay_ms(1000);

Lo(LATB)=0xff;

delay_ms(1000);

//si escribes en el puerto en lugar del latch se

crean problemas porque no alcanza a cambiar de valor

}

}

Proteus.

Material:

DSPIC33FJ12GP202

8 leds

8 resistencias

Desarrollo.

Implementamos el circuito tal y como se ve a continuación, no es necesario conectar las salidas correspondientes del pic a tierra o a voltaje (vss, vdd). Cargamos en el dspic el archivo .hex que se encuentra en la carpeta que generó el MPLAB carpeta distproductionarchivo .hex. También podemos simular con el archivo .hex que creamos desde mikroc.

 carpeta dist  production  archivo .hex. También podemos simular con el archivo .hex que
Simulamos (clic en play). Observamos como los leds encienden y apagan. En primera instancia se

Simulamos (clic en play). Observamos como los leds encienden y apagan. En primera instancia se tardaban 4 segundos en el proceso, sin embargo esto se modifica en la sección de delay del programa a voluntad del usuario.

4 segundos en el proceso, sin embargo esto se modifica en la sección de delay del

Pickit 2. Es el programador utilizado para bajar el programa al dspic desde el arcivo .hex.

Elegí este programador porque contaba con el software de PIckit 2 necesario para su uso.

Consideraciones:

Capacitor de tantalio de 19 vss a 20 vcap.

MASTER CLEAR se debe poner en 1 para que no se resetee, ya que se pone todo en cero si está activo.

pueden

desconectarse.

Primero verificaremos que haya conexión entre el programador y el software y en cuando lo reconozca podemos pasar el programa y observar nuestros resultados.

PGD

y

PGC

solo

se

usan

para

bajar

el

programa,

luego

Resultados.

podemos pasar el programa y observar nuestros resultados. PGD y PGC solo se usan para bajar

CONCLUSIONES.

La única variación del resultado esperado con el real fue la diferencia de 3 segundos en el tiempo de espera de encendido y apagado, fuera de eso, se resolvió como implementar el circuito y nos introducimos en el aprendizaje de lenguaje ensamblador y en una remembranza del lenguaje c, visto en cursos anteriores. Con ayuda de las herramientas de software no debemos tener dificultad para desarrollar nuestros proyectos, mientras nuestra lógica sea la adecuada.