Practices
Temas:
1. Uso de MPLAB IDE
2. Uso de Mikro C
3. Uso de ISIS Proteus
Prcticas:
Ensamblador MPLAB
A estas alturas se deben conocer las partes de una ventana, de manera que
crearemos un nuevo proyecto desde el men Project Project Wizard, cabe
mencionar que no es la nica forma de crear un nuevo proyecto, tambin tenemos
la opcin Project New, pero el primer comando nos ofrece un asistente con los
siguientes pasos:
1. Selecciona un Dispositivo (Figura 2)
Se genera un documento en blanco sin ttulo ni formato que debemos guardar con
la extensin *.asm para poder compilar; para ello accedemos al men y ejecutamos
el comando Guardar como: File Save As
En la ventana Save As asignar el nombre del archivo y prestar mucha atencin
en asignar la extensin .asm al final; por ltimo activar la casilla de
verificacin Add File toProject (Agregar archivo al proyecto) y dar clic en
guardar (Figura 9)
Una vez creado el archivo con extensin *.asm podemos introducir las lneas de
cdigo y estas se resaltaran de acuerdo a la sintaxis
(Directivas, Instrucciones, Direcciones, Variables, Comentarios), debemos
comenzar declarando la palabra de configuracin y posteriormente el programa.
Como buena prctica de programacin, podemos comenzar comentando el
programa con informacin bsica del mismo, para ello usamos punto y coma y lo
que est despus de ste smbolo sern comentarios, ejemplo:
;Esto es un comentario
;Informacin del Proyecto para su documentacin
;***********************************************
Posteriormente escribimos:
List P = 18F4550 ; Pic utilizado
Inclue <P18F4550.inc> ; Archivo con las directivas del
Pic
Los archivos *.inc se encuentran en la carpeta de instalacin de MPLAB y
contienen la mayora de familias de microcontroladores de esta empresa.
; Correcto ******************************************
Bandera
MOVLW 0x0F ; Mover 0x0F -> W
MOVWF PORTB ; Mover W -> PORTB
;Incorrecto ****************************************
Bandera
MOVLW 0x0F ;Mover 0x0F -> W
MOVWF PORTB ;Mover W->PORTB
Ventana Source
Es la ventana donde se edita el cdigo en ensamblador y al depurar aparece una
flecha verde que apunta a la siguiente instruccin a ejecutar:
Ventana Stopwatch
Ventana Stimulus
Todas ellas son ventanas tiles sin embargo podemos omitir algunas de ellas del
espacio de trabajo, por ejemplo la ventana Special Function Registers la podemos
quitar y dejar a la ventana Watch; en caso de que nuestro programa no tenga
entradas ni trabaje con tiempos tambin podemos quitar la ventana Stimulus y
Stopwatch respectivamente.
4. Del lado izquierdo hay un cuadro de texto con la etiqueta Keywords en el cual
se pueden los buscar componentes por su nombre, lo que facilita su bsqueda;
aunque tambin es posible buscar componentes por categoras pero resulta ms
tardado. (Figura 4):
Figura 4. Bsqueda por palabras clave
9. El botn anterior abre una ventana para buscar el archivo, seleccionarlo y poder
importarlo; para ello podemos importar archivos con extensin *.hex o *.cof. Una
vez se ha encontrado el archivo se da Abrir
10. Por ltimo se comienza la simulacin dando clic en el botn Play que se
encuentra en la parte inferior del lado izquierdo (Figura 10).
Figura 10. Iniciar simulacin
Objetivo
Identificar y conocer las caractersticas de los microcontroladores de la familia
PIC18, en particular el PIC18F4550.
Ubicar los pines del PIC18F4550 e identificar sus funciones (Puertos, Oscilador,
AD, PWM, Tx, Rx).
Identificar los pines Vdd, Vss, ~MCLR, PGD y PGC para programar el
microcontrolador.
Conocer y manejar el software MPLAB para el desarrollo de proyectos, simular
y programar un microcontrolador.
Realizar un programa en ASM para encender y apagar un LED, conectado a
RB0, mediante un botn pulsador conectado a RB4.
Realizar la simulacin del circuito en ISIS Proteus, cargando el *.hex al
PIC18F4550.
Programar el microcontrolador mediante Pickit2
Marco Terico
En el siguiente grfico (Figura 1) se muestran los puertos disponibles en el
PIC18F4550, sus ubicaciones y las posibles funciones de cada pin.
La mayora de los dispositivos de lgica secuencial, entre ellos los CPU, son de
naturaleza sncrona. Es decir, estn diseados y operan en funcin de una seal de
sincronizacin. Esta seal, conocida como seal de reloj, usualmente toma la forma
de una onda cuadrada peridica. Calculando el tiempo mximo en que las seales
elctricas pueden moverse en las varias bifurcaciones de los muchos circuitos de un
CPU, los diseadores pueden seleccionar un perodo apropiado para la seal de
reloj.
Para el correcto funcionamiento del microcontrolador debemos definir la
frecuencia del oscilador pues determinar los ciclos de instruccin; podemos
utilizar un oscilador interno o externo, sin embargo es recomendable utilizar un
oscilador de cristal externo para evitar un mal funcionamiento frente a las
variaciones de temparatura dentro del microcontrolador.
Podemos ver que por default tiene cargado el valor: 0100 X000 que de acuerdo con
los valores de la tabla anterior corresponderan a la siguiente configuracin:
Ciclo de reloj:
Ciclo de instruccin:
Para limitar la corriente que circula por el LED se propone una resistencia de
330:
Y para limitar la corriente del pin de Reset y el botn pulsador a 0.5mA, utilizar
una resistencia de 10k.
Simulacin
Para simular el siguiente cdigo por favor revisar la publicacin de Cmo utilizar y
simular en MPLAB? y Cmo utilizar y simular en ISIS Proteus?, si sabes hacerlo
puedes seguir leyendo.
Creamos un proyecto nuevo y lo llamamos LedOn, como buena prctica de
programacin y para una mejor organizacin conviene que el archivo fuente del
cdigo lleve el mismo nombre del proyecto, es decir LedOn.asm este archivo con
extensin *.asm es de ensamblador.
; ********************************************************
1
; Desarrollo de Microcontroladores y DSPS
2
; Encender un LED
3 ; Prctica 1
4 ;
; Fecha: 03/06/2012
5
; Notas: Encender un LED en RB4 al presionar un botn en RB0
6
;
7
; Autor: ek
8
; ************************************************************
9
LIST P = 18F4550
10
INCLUDE <P18F4550.INC>
11
;************************************************************
13 CONFIG PWRT = ON
CONFIG MCLRE = ON
16
22
23
25
29
INICIO
30
btfss PORTB, 0 ;Salta si RB0 = 1 presionado
31
goto LedOff ;RB0 = 0, continua apagado
32
bsf Led ;Encender Led
33
bra INICIO
34
35
LedOff
36
bcf Led ;Apagar Led
37
bra INICIO
38
40
41
42
Una vez terminado contruimos el cdigo y si todo sale bien, nos deber aparecer en
la ventana output algo similar a esto:
Introduccin
La disposicin de los puertos digitales nos permite hacer operaciones con un byte,
nibble o bit, por ejemplo intercambiar el nibble alto por el bajo o desplazar el valor
de un bit hacia la izquierda o derecha, algunas de estas operaciones estn
disponibles en las funciones de algunos PICs como el caso del 18F4550, gracias a
estas funciones es posible crear efectos de luces con LEDs al colocar ciertas
configuraciones de 0 y 1 a la salida de dichos puertos.
Objetivos
Identificar las caractersticas del PIC18F4550.
Utilizar el software MPLAB para crear un proyecto y simular el cdigo.
Realizar un programa en lenguaje ensamblador para controlar el encendido de
8 LEDs conectados a PORT B.
Mediante un pulsador en PD0 cambiar el sentido de encendido de derecha a
izquierda o viceversa al momento de presionar el botn.
El tiempo de transicin entre los LEDs ser de 300ms.
Realizar simulacin en MPLAB.
Realizar simulacin en ISIS Proteus.
Programar el microcontrolador utilizando Pickit 2
Marco Terico
En el siguiente grfico (Figura 1) se muestran los puertos disponibles en el
PIC18F4550, sus ubicaciones y las posibles funciones de cada pin.
Figura1. Diagrama de los Pines del PIC18F4550
La mayora de los dispositivos de lgica secuencial, entre ellos los CPU, son de
naturaleza sncrona. Es decir, estn diseados y operan en funcin de una seal de
sincronizacin. Esta seal, conocida como seal de reloj, usualmente toma la forma
de una onda cuadrada peridica. Calculando el tiempo mximo en que las seales
elctricas pueden moverse en las varias bifurcaciones de los muchos circuitos de un
CPU, los diseadores pueden seleccionar un perodo apropiado para la seal de
reloj.
Para el correcto funcionamiento del microcontrolador debemos definir la
frecuencia del oscilador pues determinar los ciclos de instruccin; podemos
utilizar un oscilador interno o externo, sin embargo es recomendable utilizar un
oscilador de cristal externo para evitar un mal funcionamiento frente a las
variaciones de temparatura dentro del microcontrolador.
Podemos ver que por default tiene cargado el valor: 0100 X000 que de acuerdo con
los valores de la tabla anterior corresponderan a la siguiente configuracin:
Ciclo de reloj:
Ciclo de instruccin:
Para limitar la corriente que circular por los LEDs conectados al Puerto B, se
proponen resistencias de 330:
Y para limitar la corriente del pin de Reset y el botn pulsador a 0.5mA, utilizar
una resistencia de 10k.
Conta1 = 200
Conta2 = 100
Conta3 = 5
Simulacin
Antes de comenzar la simulacin es necesario leer lo siguiente: Cmo simular en
MPLAB? y Cmo simular en ISIS Proteus? en caso de saber cmo hacerlo se
pueden omitir los enlaces anteriores.
Desarrollar una simulacin en MPLAB con la finalidad de medir los tiempos de
ejecucin para los retardos y observar la ejecucin de cada instruccin.
1 ; ********************************************************
4 ; Prctica 2
;
5
; Fecha: 08/06/2012
6
; Notas: Hacer el barrido de un LED
7
;
8
; Autor: ek
9
; ************************************************************
10
LIST P = 18F4550
11
INCLUDE <P18F4550.INC>
12
;************************************************************
13 CONFIG FOSC = HS
14 CONFIG PWRT = ON
CONFIG MCLRE = ON
17
18 CONFIG PBADEN = OFF
23
#define Conta 0x12
24
cblock
25
Conta1
26
Conta2
27
Conta3
28 Sweep
29 endc
30
34
36
45
MoveLeft
46
call Retardo ;Esperar un tiempo
47
rlncf Sweep, F ;Rotar hacia la izquierda y Guardar en Sweep
48
movff Sweep, PORTB ;Mover el valor de Sweep a PORTB
49
btfss PORTD, 0 ;Salta si RD0 = 1, Cambio ==> PRESIONAR Y SOLTAR
50
;btfsc PORTD, 0 ;Salta si RD0 = 0, Cambio ==> SLO AL PRESIONAR
51
bra MoveLeft ;Repetir Ciclo <=<=< bra MoveRight ;Direccin
52
53
bra INICIO
54
56 Retardo
57 movlw Time1
58 movwf Conta1
59 movlw Time2
movwf Conta2
60
movlw Time3
61
movwf Conta3
62
Repeat
63
decfsz Conta1, F ;Salta cuando Conta1 llega a 0
64
bra Repeat ;Salta a Repeat para Decrementar Conta1
65
66
movlw Time1 ;Mover el valor de Conta1 -> W
67
movwf Conta1 ;W -> Conta1, reconfigurar el valor
68
decfsz Conta2, F ;Salta cuando Conta2 llega a 0
69
bra Repeat ;Salta a Repeat
70
71 decfsz Conta3
72 bra Repeat
73 Return
74
76
77
78
79
Figura 5. Circuito
3. Control de un Motor a Pasos Bipolar, PIC18F4550 ASM
Posted on August 15, 2012by need4bits
Introduccin
En varios sistemas electrnicos nos encontramos con una parte mecnica que
transmite algn movimiento por palancas, levas, poleas, ejes de rotacin, entre
otras, todas ellas obtienen, en primera instancia, el movimiento de algn motor.
Existen diferentes tipos de motores, sin embargo para sistemas como: DVDs,
Grabadoras, Quemadores de discos, Impresoras, etc; se necesita un mejor control
de las vueltas que realiza el motor, de esta manera los motores a pasos resultan ser
los ms convenientes.
Objetivo
Manipular un motor a pasos bipolar en dos direcciones mediante dos botones.
Objetivos especficos
La mayora de los dispositivos de lgica secuencial, entre ellos los CPU, son de
naturaleza sncrona. Es decir, estn diseados y operan en funcin de una seal de
sincronizacin. Esta seal, conocida como seal de reloj, usualmente toma la forma
de una onda cuadrada peridica. Calculando el tiempo mximo en que las seales
elctricas pueden moverse en las varias bifurcaciones de los muchos circuitos de un
CPU, los diseadores pueden seleccionar un perodo apropiado para la seal de
reloj.
Para el correcto funcionamiento del microcontrolador debemos definir la
frecuencia del oscilador pues determinar los ciclos de instruccin; podemos
utilizar un oscilador interno o externo, sin embargo es recomendable utilizar un
oscilador de cristal externo para evitar un mal funcionamiento frente a las
variaciones de temparatura dentro del microcontrolador.
Podemos ver que por default tiene cargado el valor: 0100 X000 que de acuerdo con
los valores de la tabla anterior corresponderan a la siguiente configuracin:
Estos motores poseen la ventaja de poder quedar enclavados en una sla posicin o
bien totalmente libres; si una o ms de sus bobinas esta energizada el motor
permanecer en la posicin correspondiente, o bien, si no hay flujo de corriente en
las bobinas el eje del motor estar libre.
Estos motores estn constituidos normalmente por un rotor sobre el que van
aplicados distintos imanes permanentes y por un cierto nmero de bobinas
excitadoras en su estator.
1. Unipolares
2. Bipolares
Ambos soncontrolados mediante una secuencia de activacin especfica, pero se
diferencian en el modo en que estn conectadas sus bobinas. Debido a que se usar
un motor a pasos bipolar se caracterizar a continuacin.
Motor Bipolar
En este tipo de motores las bobinas del estator se conectar en serie formando
solamente dos grupos, que se montan sobre dos estatores. De acuerdo a la (Figura
5) se observa que de este motor salen cuatro hilos que se conectan al circuito de
control que realiza la funcin de cuatro interruptores electrnicos dobles, que nos
permiten variar la polaridad de alimentacn de las bobinas.
Motor Unipolar
Estos motores suelen tener 6 o 7 cables de salida, dependiendo de sus conexiones
internas. Este tipo se caracteriza por ser ms simple de controlar. En la (Figura 7)
podemos apreciar un ejemplo de conexionado para controlar un motor a pasos
unipolar mediante el uso de un ULN2803, el cual es un array de 8 transistores tipo
darlington capaz de manejar cargas de hasta 500mA. Las entradas de activacin (A,
B, C y D) pueden ser activadas por un microcontrolador.
Figura 7. Motor a Pasos Unipolar
Existen tres secuencias posibles para este tipo de motores, todas las secuencias
comienzan nuevamente por el paso 1 una vez alcanzao el paso final (4 u 8).
Clculos
Dado que se configur el oscilador interno del microcontrolador a 4MHz, se tiene:
Ciclo de reloj:
Ciclo de instruccin:
Para limitar la corriente del pin de Reset y el
botn pulsador a 0.5mA, utilizar una resistencia de 10k.
Simulacin
Antes de comenzar la simulacin es necesario leer lo siguiente: Cmo simular en
MPLAB? y Cmo simular en ISIS Proteus? en caso de saber cmo hacerlo se
pueden omitir los enlaces anteriores.
Simulacin en MPLAB
Para el desarrollo de esta prctica haremos uso de una librera que contendr las
funciones para los retardos, de manera que necesitaremos un archivo con extensin
*.inc y un *.asm, ste ltimo ser el archivo principal.
#define Conta
1
cblock
2
Conta1
3
Conta2
4
Conta3
5
endc
6
7
Retardo200ms
8
clrf Conta1
9
clrf Conta2
10 Repeat
11 decfsz Conta1, F ;Salta cuando Conta1 llega a 0
13
16
Return
17
18
; ********************************************************
1
8
;
9
; Autor: ek
10 ; ************************************************************
11 LIST P = 18F4550
12 INCLUDE <P18F4550.INC>
;************************************************************
13
19
CONFIG LVP = OFF
20
CONFIG DEBUG = OFF
21
CONFIG XINST = OFF
22 ; CODE ******************************************************
23 cblock
25 endc
26
28
31
34
39
INICIO
40
movf SecuenC, W
41
call MotorPosition
42
movwf PORTB
43
call Retardo200ms
44
45
ButtonRight ;Verificar Botn Derecho
55
MoveRight ;Aumentar indice para la tabla
56
movf SecuenC, W
57
xorlw 0x06 ;Verificar el indice Max
58
btfss STATUS, Z ;Salta si Z == 1, SecuenC = Indice Max
59
bra Continue1
60
clrf SecuenC
61
bra INICIO
62
Continue1
63 incf SecuenC, F
64 incf SecuenC, F
65 bra INICIO
66
67 MoveLeft
68 movf SecuenC, W ;SecuenC -> W
bra INICIO
74
Continue2
75
decf SecuenC, F
76
decf SecuenC, F
77
bra INICIO
78
79
MotorPosition
80
addwf PCL, F
81
retlw 0x0A ;0000 1010
82
retlw 0x09 ;0000 1001
83
retlw 0x05 ;0000 0101
84
retlw 0x06 ;0000 0110
85
86
include "Retardo.inc" ;Agregar librera Retardo.inc
87
89
90
91
92
93
Desarrollo Experimental
Material y Equipo requerido
1 PIC18F4550
1 CI L293D (Puente H con diodos)
3 Resistencias de 10k
8 Diodos 1N4007
1 Motor a pasos Bipolar
1 Tablilla de experimentacin (Protoboard)
1 Fuente de 5V
1 Multmetro
1 Programador de Microcontroladores
1 Computadora
Software MPLAB y software de programador
Software ISIS Proteus
4. Control de un LCD, PIC18F4550 ASM
Posted on August 18, 2012by need4bits
Introduccin
En algunas ocasiones es necesario desplegar informacin textual y al mismo tiempo
valores numricos que no es suficiente utilizar LEDs como indicadores o display de
7 segmentos, por ello existen mdulos LCD (Display de Cristal Lquido) que
permiten conectar al microcontrolador una pantalla donde se pueda enviar y
mostrar informacin de inters.
Objetivo
Mostrar texto desde un PIC18F4550 a travs de un LCD
Objetivos especficos
La mayora de los dispositivos de lgica secuencial, entre ellos los CPU, son de
naturaleza sncrona. Es decir, estn diseados y operan en funcin de una seal de
sincronizacin. Esta seal, conocida como seal de reloj, usualmente toma la forma
de una onda cuadrada peridica. Calculando el tiempo mximo en que las seales
elctricas pueden moverse en las varias bifurcaciones de los muchos circuitos de un
CPU, los diseadores pueden seleccionar un perodo apropiado para la seal de
reloj.
Para el correcto funcionamiento del microcontrolador debemos definir la
frecuencia del oscilador pues determinar los ciclos de instruccin; podemos
utilizar un oscilador interno o externo, sin embargo es recomendable utilizar un
oscilador de cristal externo para evitar un mal funcionamiento frente a las
variaciones de temparatura dentro del microcontrolador.
Podemos ver que por default tiene cargado el valor: 0100 X000 que de acuerdo con
los valores de la tabla anterior corresponderan a la siguiente configuracin:
Ciclo de reloj:
Ciclo de instruccin:
Simulacin
Antes de comenzar la simulacin es necesario leer lo siguiente: Cmo simular en
MPLAB? y Cmo simular en ISIS Proteus? en caso de saber cmo hacerlo se
pueden omitir los enlaces anteriores.
Simulacin en MPLAB
Librera de Retardos
1 CBLOCK
2 Conta1
3 Conta2
Conta3
4
ENDC
5
;Retardo_20ms *********************
6
Retardo_20ms
7
movlw .247
8
movwf Conta1
9
movlw .26
10
movwf Conta2
11
Re_20ms
12
decfsz Conta1, F ;Salta cuando Conta1 llega a 0
16 Return
17
;Retardo_5ms *********************
18
Retardo_5ms
19
movlw .146
20
movwf Conta1
21 movlw .7
22 movwf Conta2
Re_5ms
23
29
;Retardo_200us *********************
30
Retardo_200us
31
movlw .65
32
movwf Conta1
33 Re_200us
36 Return
37
;Retardo_2ms *********************
38
Retardo_2ms
39
movlw .151
40 movwf Conta1
41 movlw .3
movwf Conta2
42
Re_2ms
43
decfsz Conta1, F ;Salta cuando Conta1 llega a 0
44
bra Re_2ms ;Salta a Repeat para Decrementar Conta1
45
decfsz Conta2, F ;Salta cuando Conta2 llega a 0
46
bra Re_2ms ;Salta a Repeat
47
Return
48
49
;Retardo_50us *********************
50
Retardo_50us
51
movlw .15
52 movwf Conta1
53 Re_50us
Return
56
57
Delay
58
clrf Conta1
59 clrf Conta2
60 movlw .3
movwf Conta3
61
Re_Delay
62
decfsz Conta1, F ;Salta cuando Conta1 llega a 0
63
bra Re_Delay ;Salta a Repeat para Decrementar Conta1
64
65
decfsz Conta2, F ;Salta cuando Conta2 llega a 0
66
bra Re_Delay ;Salta a Repeat
67
68
decfsz Conta3, F
69
bra Re_Delay
70
71
Return
72
73
74
75
76
77
78
1 ; ********************************************************
3 ; Manejo de un LCD
4 ; Prctica 4
;
5
; Fecha: 18/06/2012
6
; Notas: Controlar un LCD LM016
7
;
8
; ek
9
; ************************************************************
10
LIST P = 18F4550
11
INCLUDE <P18F4550.INC>
12
;************************************************************
13 CONFIG FOSC = HS
14 CONFIG PWRT = ON
17 CONFIG MCLRE = ON
18 CONFIG PBADEN = OFF
25
#define LCD_RS PORTD,0
26
#define LCD_RW PORTD,1
27
#define LCD_E PORTD,2
28
29
ORG 0x00
30
31
clrf PORTB
32 clrf PORTD
33
34 clrf TRISB
35 clrf TRISD
36
37 call LCD_Inicializa
38 bcf LCD_E
39
Inicio
40
47
movlw 'a'
48
call LCD_Caracter
50 call LCD_Caracter
51 movlw 'M'
52 call LCD_Caracter
movlw 'u'
53
call LCD_Caracter
54
movlw 'n'
55
call LCD_Caracter
56 movlw 'd'
57 call LCD_Caracter
movlw 'o'
58
call LCD_Caracter
59
movlw '!'
60
call LCD_Caracter
61
call Delay
62
call Delay
63
64
call LCD_Borrar
65
goto Inicio
66
67
LCD_Inicializa
68
call Retardo_20ms ;Esperar 20 ms
71
movwf PORTB
74
75
movlw b'00110000'
78
movwf PORTB
79
80
movlw 0x0F
81
movwf PORTB
82
83
bsf LCD_E
84
bcf LCD_E
85
return
86
87
LCD_Caracter
88
bsf LCD_RS ;Modo Caracter RS = 1
89
movwf PORTB ;Lo que se carg previamente en W -> PORTB
95
96 LCD_Borrar
99
LCD_Comando
100
bcf LCD_RS ;Modo Comando RS = 0
101
movwf PORTB ;Envia W -> PORTB
102
bsf LCD_E ;Activa Enable
103
call Retardo_50us ;Espera que se envie la informacin
104
bcf LCD_E ;Transicin del Enable
105
return
106
107
INCLUDE <LCD_Retardo.inc>
108
110
111
112
113
114
115
116
Desarrollo Experimental
Material y Equipo requerido
1 PIC18F4550
1 Pulsador (Push Button)
3 Resistencias de 10k
1 LCD JHD162A
1 Tablilla de experimentacin (Protoboard)
1 Fuente de 5V
1 Multmetro
1 Programador de Microcontroladores
1 Computadora
Software MPLAB y software de programador
Software ISIS Proteus
Programa combinacional de Leds
Ejercicio:
RA1 RA0 RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0
0 0 || 1 0 1 0 1 0 1 0
0 1 || 0 1 0 1 0 1 0 1
1 0 || 0 0 0 0 1 1 1 1
1 1 || 1 1 1 1 0 0 0 0
Nos pondremos manos a la obra, abriendo el entorno de Isis, para poder realizar la
simulacin en Proteus del programa que posteriormente crearemos.El Pic que vamos a
emplear es el 16F877.
Creado el entorno de simulacin, nos podremos a realizar el cdigo, tenemos dos
opciones utilizar el compilador Pcw de CCS o utilizar MPlab, como me encontraba un
poco oxidado con MPlab, me decant para realizar el cdigo en primer lugar con Pcw.
Si RA1=0 y RA0 =0
Si RA1 =0 y RA0=1
Si RA1=1 y RA0=0
Si RA1=1 y RA0=1
Ejercicio:
En primer lugar analizaremos el ejercicio y para ello lo mejor es que observemos las
entradas y salidas con las que cuenta esta mquina de torno.
Entradas
I-->RA0--> Marcha
a-->RA1--> Final de carrera "a"
b-->RA2--> Sensor "b"
c-->RA3--> Sensor "c"
Salidas
V-->RB0--> Cilindro V
M-->RB1--> Motor M
A-->RB2--> Seal Acstica
En el enunciado se puede observar que esta mquina acta de una forma secuencial, por
tanto lo mejor para realizar la programacin de una forma ms sencilla, es realizar un
diagrama de flujos, estados o un grafcet.
Reposo (0)
|
RA0
|
Activa cilindro V /S.Acu off(1)
|
RA2
|
Activa motor M(2)
|
RA3
|
Retroceso cilindro V(3)
|
RA2
|
Paro motor M(4)
|
RA1
|
Seal acstica on(5)
|
Una vez entendido el ejercicio vamos a realizar el Isis para hacer la simulacin en
Proteus, igual que en el ejercicio anterior, tambin vamos a emplear el PIC16F877.
Vamos a iniciar la simulacin en Isis para ver su funcionamiento.
Al encender la mquina esta se encuentra parada o en estado de reposo, y en el
momento que pulsamos la marcha o Start(RA0), se activa el cilindro V(RB0).
El cilindro V en movimiento, conecta el sensor "b"(RA2), el cual activa el relee del motor
M(RB1).
Al accionarse el Sensor "c"(RA3), el cilindro V(RB0) se desactiva, iniciando la vuelta a su
posicin inicial.
Microcontrolador con mdulo USB 2.0. Soporta Low speed 1.5Mb/s y full speed
12Mb/s.
1kB de memoria de doble acceso va USB
35 pines I/O disponibles
Memoria de programa flash de 32 kB
RAM de 2048 Bytes
EEPROM de datos de 256 Bytes
Velocidad de la CPU 12 MIPS
Oscilador externo de dos modos hasta 48 MHz
Oscilador interno selecionable entre 8 frecuencias desde 31kHz hasta 8MHz
Oscilador secundario con Timer 1 de hasta 32kHz
Opciones de oscilador dual permiten que la velocidad de la CPU y del mdulo USB
sean diferentes
ADC de 10 bits y 13 canales
Tecnologa nanoWatt que brinda caractersticas y funciones de bajo consumo y
ahorro de energa
Voltaje de operacin 4.2V a 5.5V
4 Timer(desde Timer0 a Timer3). Uno de 8 bits y 3 de 16 bits
2 mdulos de captura/comparacin/PWM
EUSART, SPP, SPI, IC.
20 fuentes de interrupciones (3 externas)
Resistencias de pull-ups en el puerto B programables
Funcin del pin MCLR opcional
Brown-out Reset de valor programable
Power-on Reset
Power-up Timer y Oscillator Start-up Timer
Soporta 100,000 ciclos de borrado/escritura en memoria flash
Soporta 1,000,000 ciclos de borrado/escritura en memoria EEPROM
Retencin de datos mayor a 40 aos
Proteccin de cdigo y datos programable
Encapsulado DIP de 40 pines
Detallado de Pines
Como se puede apreciar en la imagen tiene cierta similitud a la disposicin de pines del
Pic 16F877.
Arquitectura del Pic
Como expliqu en la entrada del Pic 16F877 existen dos tipos de arquitecturas la de Von
Newman y la tipo Hardvard.
El Pic 18F4550 posee una arquitectura tipo Hardvard, ya que dispone de diferentes buses
para acceder a la memoria de programa o a la memoria de datos. Esto nos da la opcin
de acceder a la memoria de datos para ejecutar una instruccin, mientras se lee de la
memoria de programa la siguiente instruccin. Es decir, podemos acceder de forma
simultnea a ambas memorias.
El Bus de memoria de programa: Est formado por 21 lneas de direccin,16 lineas para
instrucciones y 8 lineas para datos.
Dentro del datasheet del dispositivo podemos encontrar un diagrama de bloques que nos
explica la arquitectura interna que tiene el Pic 18F4550.
Como podemos ver en la imagen este modelo de Pic es bastante completo, cuenta con
una serie de elementos como: la memoria de programa, memoria de datos,contadores,
puertos I/O, latch de direccin, datos...
Organizacin de la memoria
La memoria del Pic se divide en: Memoria RAM de datos, memoria de programa, memoria
EEprom de datos, la pila y memoria de configuracin
Memoria de datos
Cuenta con una memoria de RAM de datos de 2048 bytes, (8 de los bancos de 256
bytes).
Tambin cuenta con 160 bytes dedicados a los SFR's(Registros de funcin especial) los
cuales se encuentran en la parte alta del banco 15.
Como se puede ver en la imagen la memoria RAM de datos se compone por GPR's o
registros de propsito general y SFR's o registros de funcin especial.
Es la encargada de almacenar datos de forma temporal durante la ejecucin del
programa.
Para acceder a un Byte de la memoria de datos en primer lugar seleccionaremos el banco
mediante el BSR(Bank Selector Register) y a continuacin se disecciona el byte dentro
del banco.
Memoria de programa
El Pic 18F4550 cuenta con una memoria de programa de 32K (32768 bytes). Es una
memoria tipo Flash.
Esta memoria es la que se encarga de almacenar las instrucciones, constantes y datos.
La podemos escribir o leer con un programador externo o en ejecucin.
La pila o Stack
Es un bloque de memoria RAM independiente de 31 palabras de 21 bits en la cual se
almacena de una forma temporal el valor del Contador de Programa(Program Counter)
cuando se produce una llamada a subrutina o interrupcin.
Memoria de configuracin
Es un bloque de memoria situado a partir de la posicin 30000H en la memoria de
programa donde se almacenan:
Bits de configuracin. Contenidos en 12 bytes de memoria flash donde se
almacenan varias opciones de configuracin: opciones del oscilador, reset, watchdog,
circuiteria de depuracin y programacin... Estos bits pueden ser modificados.
Registros de identificacin. Contienen informacin del modelo y revisin del
dispositivo. Son registros de lectura
Al igual que explique en el Pic 16F877, en el Pic 18F4550 la mayora de las instrucciones
tambin se ejecutan en un solo ciclo mquina.
El ciclo de instruccin
Un ciclo de instruccin comprende cuatro ciclos Q(desde Q1 hasta Q4), tal y como se
puede apreciar en la imagen.
En la captura tambin se puede observar el esquemtico del proceso Pipeline el cual es
un sistema que nos permite ejecutar una instruccin(acceso a la memoria de datos),
mientras se lee de la memoria de programa la siguiente instruccin.
Lectura Analgico-Digital
En la siguiente entrada, mediante el Pic 18F4550 vamos a hacer una lectura de tensin
analgica y visualizarla en el PC con Hyperterminal va RS232.
Primero realizaremos una simulacin en Proteus, y una vez comprobado lo cargaremos
en una Pic control.
Para comenzar analizaremos el Pic que vamos a utilizar, para conocer cuales son las
entradas analgicas de que dispone. Segn el datasheet, los pines que podemos
configurar como analgicos son RA0, RA1,RA2,RA3.
Acto seguido pasaremos a realizar el esquemtico en Proteus para que una vez que
tengamos el cdigo generado, podamos simularlo antes de programarlo fsicamente.
Este es el esquemtico diseado en Proteus.
Como se puede observar la lectura analgica la hacemos por el puerto RA0. Hemos
conectado el Lcd en el puerto D tanto los pines de control como los de datos y mediante el
Pin RC6 transferimos los datos a Virtual terminal. Para la simulacin en Proteus, no es
necesario el Max232 para adaptar niveles de TTL a RS232, pero fsicamente lo
necesitamos sin ninguna duda.
Ahora que ya hemos creado el diseo en Proteus, el segundo punto ser la programacin
del cdigo mediante MPLab.
Abajo adjunto el resultado del cdigo para su descarga, pero primero lo explicar
detalladamente.
Cabecera:
Variables utilizadas:
Main:
void main()
{
setup_adc(ADC_CLOCK_INTERNAL); //configuramos el conversor A/D con el reloj
interno
setup_adc_ports(AN0||VSS_VDD); //configuramos el pin RA0 como analgico
lcd_init(); //funcion que activa el lcd
do{
set_adc_channel(0); //canal a especificar por la funcion read_adc
delay_us(60);
val=read_adc(); //almacenamos en la variable val con funcion
read_adc
voltaje=(4.98*val/1023.0); /*realizamos la conversin del valor
obtenido, multiplicndolo por el voltaje de referencia que es 4.98 voltios y lo dividimos
entre 1024.*/
printf("\nVoltaje:%1.2f",voltaje); //mostramos la lectura de voltaje en el lcd
lcd_gotoxy(1,1);
printf(lcd_putc,"Voltaje: %f",voltaje); //enviamos la lectura por puerto serie
delay_ms(2000);
}
while(1);
}
Virtual Terminal es una herramienta que tiene Proteus que simula un hyperterminal para
la recepcin o transmisin de datos por puerto serie.
LCD Grfico
En la siguiente entrada vamos a realizar la programacin de un Pic y mostrar datos
a travs de un LCD grfico. El Pic que vamos a emplear en esta prctica es el 18F4550 y
el LCD grfico ser el modelo HDM64GS12, el cual cuenta con una resolucin de 128 x
64 lneas.
Para realizar la programacin hemos utilizado en este caso MPlab.
La segunda librera que voy a explicar es la librera GRAPHICS.C, esta es un archivo que
contiene funciones para dibujar lneas, rectngulos, crculos y texto en el display. Nos
ser de gran utilidad para poder dibujar en el display. En este caso no es necesario,
realizar ningn tipo de modificacin de la misma.
Por ltimo la tercera librera empleada es MATH.h, la cual contiene funciones para
realizar operaciones matemticas, nosotros la vamos a emplear para utilizar la
funcin sprintf, que es una funcin que nos permite convertir variables a una cadena de
caracteres. Como el display no muestra variables tipo float, convertiremos una variable
tipo float a cadena tipo char para poder ver el dato.
Analizadas las libreras, nos ponemos manos a la obra y en primer lugar crearemos el
archivo Isis para probar el programa en el entorno de Proteus. Este es el resultado:
A la hora de ponerme con el cdigo, las funciones principales que he utilizado son.
De la librera HDM64GS12.c:
glcd_init(mode): Esta funcin es necesaria para activar o desactivar el Lcd.
glcd_pixel(x,y,color): dibuja un pixel en la coordenada "x,y" indicada.
En la libreria GRAPHICS.C:
glcd_line(x1, y1, x2, y2, color): dibuja una lnea en las cordenadas x1,x2,y1,y2
glcd_rect(x1, y1, x2, y2, fill, color): dibuja un rectngulo
glcd_text57(x, y, textptr, size, color): muestra un texto o variable Char en las coordenadas
x,y.
Lcd 16x2
En esta entrada vamos a explicar el funcionamiento y conexionado de un LCD con una
resolucin de 16x2.
Que es un LCD?
Como es su conexionado?
Vss: Gnd
Vdd: +5 voltios
Vee: corresponde al pin de contraste, lo regularemos con un potencimetro de 10K
conectado a Vdd.
Pines de control:
La memoria CGROM es una memoria interna donde se almacena una tabla con los
caracteres que podemos visualizar en el lcd. En la imagen podemos ver un ejemplo de la
tabla con un contenido de 192 caracteres.
En el resto de la librera se puede encontrar todas las estructuras necesarias as como las
funciones que nos permiten utilizar nuestro LCD.
Podemos encontrar funciones como :
Aqu se puede ver un ejemplo de una sencilla programacin en una Pic control, y muestra
de datos en el LCD, son datos inespecficos que no muestran ninguna informacin.
Ejemplo rutinas I2C Transmisin/Recepcin de un byte
PIC18F4550
Cdigo de ejemplo:
1 ;***************************************************************************
2 ; Filename: I2C_PIC18F_EXAMPLE
3 ; Date: 13/11/2015
; Version: 01
4
10
; Este ejemplo se puede adaptar a otros dispositivos de la familia PIC18F
11
; modificando apropiadamente algunas lineas de cdigo.
12
LIST P=18F4550 ;directiva que define el procesador
13
#include <P18F4550.INC> ;definicin de variables especificas
14 ;***************************************************************************
15 ;Bits de configuracin
25
;Definicion de variables y constantes
26
;***************************************************************************
27
led_verde equ 0x02 ;Led verde en RB2, para indicar comunicacin i2c exito
28
led_rojo equ 0x03 ;Led rojo en RB3, para indicar error en comunicacin i
29
;***************************************************************************
30 ;Programa
31 ;***************************************************************************
42 movwf SSPCON1,A ;
47 clrf LATB,A
48 clrf LATC,A
49
51 leer_byte
54 rcall i2c_tx_byte ;
55 btfsc SSPCON2,ACKSTAT,A ;Recibi reconocimiento positivo del esclavo? AC
61 bra $
62
64 escribir_byte
67 rcall i2c_tx_byte ;
71 rcall i2c_tx_byte ;
76 bra $
77
78 cond_error
82 ;***************************************************************************
;***************************************************************************
84
i2c_tx_start ;Enviar condicin de inicio.
85
bcf PIR1,SSPIF,A ;Borrar la bandera del MSSP.
86
bsf SSPCON2,SEN,A ;Iniciar condicin de inicio.
87
btfss PIR1,SSPIF,A ;Termin la condicin de inicio?
88
bra $-2 ;no, esperar
89
return ;si, retorna
90
91
i2c_tx_restart ;Enviar condicin repetida de inicio.
92
bcf PIR1,SSPIF,A ;Borrar la bandera del MSSP.
93 bsf SSPCON2,RSEN,A ;Iniciar condicin repetida de inicio.
97
104
108 btfss PIR1,SSPIF,A ;Termin transmisin del byte y recepcin del ACK? (9
111
112 i2c_rx_byte_ack ;Recibir byte, generar reconocimiento positivo (a
124
137
139
140
141