Está en la página 1de 9

TECNOLÓGICO NACIONAL DE MÉXICO

Instituto Tecnológico Superior P’urhepecha

INSTITUTO TECNOLÓGICO SUPERIOR P’URHEPECHA


ALUMNA: CLAUDIA COVARRUBIAS GARCÍA

No. Control S20030004

PLAN DE ESTUDIOS

INGENIERÍA EN SISTEMAS COMPUTACIONALES

MODALIDAD DISTANCIA

ASIGNATURA: SISTEMAS PROGRAMABLES

GRUPO: SEPTIMO SEMESTRE

TEMA 4: PROGRAMACIÓN DE MICROCONTROLADORES

ACTIVIDAD: INVESTIGACION

PROFESOR: Dr. MIGUEL ANGEL BARRERA VALDES

PERIODO: AGOSTO – DICIEMBRE 2023

14/11/2023
Se utillizará el popular PIC16F628A, un boton pulsador normalmente abierto para
generar los pulsos manualmente y un display de 7 segmentos para mostrar el conteo.
Los pasos indicados son los que se deben seguir normalmente para crear otros nuevos
proyectos:

1. Iniciar el programa mikroC PRO for PIC (utilizamos la version 4.1 que puedes
descargar más arriba en esta misma pagina) y crear un nuevo proyecto: Project
> New Project. Clic en Next
2. Seleccionar el PIC16F628A en el campo Device Name. Clic en Next
3. Establecer la frecuencia de trabajo del microcontrolador en Device Clock. Se
suele trabajar con una frecuencia de 4MHz y ese es el valor que usaremos. Clic
en Next
4. Crear una carpeta (folder) para el nuevo proyecto; para ello hacer clic en el
simbolo al final del campo Project File Name, esto abrirá la ventana New Project
Location. Crear una carpeta en una determinada ubicación de su elección
haciendo clic en New Folder, la carpeta deberá tener un nombre relacionado con
la aplicación que vamos a crear; la llamaremos Contador. Luego de crear la
carpeta Contador hacemos doble clic en ella para ubicarnos dentro de la misma
y en el campo File Name creamos un nuevo archivo de proyecto, lo llamaremos
tambien Contador (la extension propia del archivo de proyecto es .mcppi en
mikroC PRO para PIC, no hace falta escribirla porque el sistema la añade
automaticamente). Clic en Save y luego en Next.
5. En el siguiente paso solo hacemos clic en Next
6. Aunque en este ejemplo no vamos a emplear ninguna de las librerias de
funciones de mikroC PRO, dejamos seleccionada la opcion Include All (por
defecto). Clic en Next
7. Un paso absolutamente necesario e imprescindible es establecer los bits de
configuracion del microcontrolador PIC. Por lo tanto en este paso seleccionamos
el checkbox Open Edit Project Window to set Configuration Bits. Clic en Finish.
8. En la ventana Edit Project establecemos los bits de configuracion de la siguiente
manera y hacemos clic en OK:
Oscillator: INTOSC: I/O on RA6/OSC2, I/O on RA7/OSC1
Watchdog Timer: Off
Power Up Timer: Enabled
Master Clear Enable: Disabled
Brown Out Detect: Enabled
Low Voltage Program: Disabled
Data EE Read Protect: Disabled
Code Protect: Off
Uno de los puntos mas importantes a tener en cuenta es la configuracion del
oscilador que es un subsistema encargado de generar la base de tiempo (reloj)
para la ejecucion de las instrucciones; con una frecuencia de 4MHz la base de
tiempo (llamada ciclo de instruccion) es de 1us. Algunas instrucciones se
ejecutan en un ciclo de instruccion, es decir que el microcontrolador se
demora 1us en realizar la instruccion; por tanto, la ejecucion de las
instrucciones se realiza a alta velocidad. El PIC16F628A incluye un oscilador
interno de 4MHz que es utilizado al seleccionar INTOSC: I/O on RA6/OSC2, I/O
on RA7/OSC1 para el bit Oscillator; el uso del oscilador interno es recomendable
ya que facilita armar el circuito electrico y libera dos pines del microcontrolador,
de lo contrario seria necesario agregar un cristal oscilador externo con sus
elementos asociados.
El significado y funcion de los demas bits se irá aclarando a medida que
profundice en su estudio de la programacion de microcontroladores PIC.
9. Aparece la ventana del editor de texto, donde escribiremos el codigo fuente de
nuestro proyecto:

10. //Contador.c
11. //Macros (simbolos equivalentes)
12. #define BOTON RA4_bit //BOTON es equivalente a RA4_bit
13. #define PRESIONADO 0 //PRESIONADO es equivalente a 0
14.
15. //Función para convertir de Binario a 7 segmentos
16. char Bin2_7seg(char digit){
17. switch (digit){
18. case 0: return 0x3F; //0x3F es el código 7-segmentos del 0.
19. case 1: return 0x06; //0x06 es el código 7-segmentos del 1.
20. case 2: return 0x5B;
21. case 3: return 0x4F;
22. case 4: return 0x66;
23. case 5: return 0x6D;
24. case 6: return 0x7D;
25. case 7: return 0x07;
26. case 8: return 0x7F;
27. case 9: return 0x67;
28. }
29. }
30.
31. //Declaracion de variables
32. char contador=0; //La variable contador es de tipo char y tiene valor inicial de 0.
33.
34. //Función principal
35. void main(){
36. PORTB=0x00; //Estado inicial del puerto B.
37. CMCON=0x07; //Pines RA<3:0> como E/S digital.
38. TRISB=0x00; //Puerto B como salida.
39. while (1){
40. if (BOTON==PRESIONADO){ //Si se pulsa,
41. Delay_ms(10); //esperar 10ms,
42. if (BOTON==PRESIONADO){ //revisar si el boton sigue pulsado,
43. while (BOTON==PRESIONADO); //y esperar mientras siga presionado.
44. contador++; //Al soltar incrementar el contador,
45. if (contador>9) contador=0; //y reiniciarlo a 0 si supera el valor de 9.
46. }
47. }
48. PORTB=Bin2_7seg(contador); //Convertir y enviar al puerto B el valor
49. //presente en la variable contador.
50. }
51. }//Fin de la función principal
52.

Una vez terminada la escritura procedemos con la compilación (la traducción del codigo
anterior a código de máquina). Este proceso es transparente para nosotros (lo único
que observaremos serán unos mensajes durante esta fase en la parte inferior del IDE).
Para compilar debemos seleccionar el comando Build > Build. El codigo de máquina o
código ejecutable (se identifica como Contador.hex) se guarda automaticamente en un
archivo en la carpeta Contador que creamos en el paso 4.

El código anterior es un ejemplo que se puede tomar como plantilla para la escritura de
otros proyectos. El microcontrolador PIC ejecuta las instrucciones que se encuentran
dentro de la función principal void main(){//Instrucciones...}, las partes restantes sirven
como codigo complementario para la ejecución correcta de dichas instrucciones.
Los Macros tienen el proposito de facilitar el mantenimiento y comprension del codigo;
por ejemplo si se quiere emplear el pin RA7 en lugar del pin RA4 simplemente se tiene
que escribir #define BOTON RA7_bit; también es mucho más
comprensible BOTON==PRESIONADO que RA4_bit==0.

Una función es una agrupación de instrucciones que luego se tratan como una nueva
instrucción dentro de la función principal; así Bin2_7seg(contador); es considerada
como una instrucción más y ejecutada de acuerdo a su definición.

En mikroC PRO for PIC (así como en otros lenguajes de programación) es obligatorio
declarar las variables que se usan en la funcion principal, indicando su tipo y de forma
opcional su valor inicial; así char contador=0; es la declaracion de la
variable contador como una variable de tipo caracter (puede tomar valores entre 0 y
255) y tiene en este caso un valor inicial de 0.

53. El codigo de maquina Contador.hex tiene que ser grabado en la memoria de


programa del microcontrolador PIC de tal forma que al encenderlo ejecute las
instrucciones indicadas en dicho codigo, de no ser asi el microcontrolador PIC
seria un dispositivo que no serviria para nada ya que su memoria de programa
se encuentra en blanco cuando sale de fabrica. El proceso de grabado se realiza
por medio de un programador tal como el PICkit2 (todos los detalles los puede
encontrar en el articulo Pickit2 Clone: Guia de Usuario).
54. El último paso es armar el circuito electrico del contador, teniendo en cuenta que
la fuente de alimentacion debe ser de 5V (este voltaje se puede obtener
fácilmente a partir de un regulador 7805).
55. Como recomendacion importante se sugiere agregar un condensador ceramico
de 0.1uF entre los pines de alimentacion del PIC, lo cual ayudara a eliminar
posibles problemas ocasionados por las fluctuaciones rapidas de la fuente de
alimentacion. Además, notese que la conexion al display es directa (sin
resistencias de por medio), lo que es posible debido a que los
microcontroladores PIC están diseñados para suministrar una corriente máxima
de 25mA en cada uno de sus pines. Al encender el circuito se observará que el
display muestra el numero 0 ya que asi fue programado el PIC. Si se presiona (y
se libera) el pulsador el conteo se incrementará en una unidad hasta una cuenta
máxima de 9, en la siguiente pulsacion el conteo regresa a 0.

Para profundizar en el aprendizaje de la programación de microcontroladores PIC le


recomendamos leer nuestra serie de articulos a continuación, donde se explican los
conceptos basicos acompañados con ejemplos practicos y faciles de probar. También
puede adquirir el ebook que contiene el fundamento teorico mas detallado y muchos
ejemplos reales minuciosamente explicados, asi como las simulaciones en Proteus-
ISIS para que pueda verificar su funcionamiento de forma rapida y efectiva.

Ejemplos de ejercicios resueltos


1. Comunicación PIC a PIC
La comunicacion alámbrica entre microcontroladores PIC es de suma importancia pues
permite tener sistemas con multiples microcontroladores ejecutando distintas tareas en
forma coordinada. La transmision de datos se puede lograr de forma bidireccional
usando el modulo USART incorporado o funciones propias del compilador mikroC
PRO.
Se describe la comunicación entre dos microcontroladores PIC16F628A usando el
módulo USART-Software de mikroC.

Consta de dos proyectos, uno para cada PIC:

1. El proyecto PIC a PIC LCD es utilizado para recibir datos y presentarlos en un


LCD 2x16.
2. El proyecto PIC a PIC se utiliza para enviar datos.

Código en mikroC PRO (lenguaje C)

Primer código fuente

//PIC_a_PIC_LCD.c
//Microcontrolador: PIC16F628A
//Oscilador: Interno-4MHz
//Este programa se almacena en uno de los dos microcontroladores (U2) y
recibe continuamente un
//dato (la letra 'r') cada 300 ms por el pin de recepción RB6(12). El pin de
transmisión es
//RB7(13). El dato recibido se va presentando en el LCD.
//La velocidad de transmisión de 600 Baudios fue seleccionada
experimentalmente por un
//procedimiento de ensayo y error. El pin RB0(6) se enciende por 1 segundo en
el caso de
//intentar establecer una velocidad de transmisión muy alta o muy baja.

//Declaración de las 12 variables necesarias para la conexión del módulo LCD.


sbit LCD_RS at RA4_bit;
sbit LCD_EN at RA6_bit;
sbit LCD_D4 at RA0_bit;
sbit LCD_D5 at RA1_bit;
sbit LCD_D6 at RA2_bit;
sbit LCD_D7 at RA3_bit;

sbit LCD_RS_Direction at TRISA4_bit;


sbit LCD_EN_Direction at TRISA6_bit;
sbit LCD_D4_Direction at TRISA0_bit;
sbit LCD_D5_Direction at TRISA1_bit;
sbit LCD_D6_Direction at TRISA2_bit;
sbit LCD_D7_Direction at TRISA3_bit;
// Fin de declaración de variables de conexión.

char error, byte_read;


void main(){
CMCON=0x07; //Pines RA<3:0> como E/S digital.
PORTB=0x00;
TRISB0_bit=0;
Lcd_Init(); //Inicializa el LCD.
Lcd_Cmd(_LCD_CLEAR); //Borra el display.
Lcd_Cmd(_LCD_CURSOR_OFF); //Apaga el cursor.
error = Soft_UART_Init(&PORTB, 6, 7, 600, 0); //Inicializa el módulo UART-
Software a 600 Baudios.
if (error >0){
RB0_bit=1;
Delay_ms(1000);
RB0_bit=0;
while(1); //Detiene el programa en caso de error.
}
Delay_ms(100);
while(1) {
byte_read = Soft_UART_Read(&error); //Recibe un dato y lo guarda en
byte_read.
if (!error) //Si no hay error.
Lcd_Chr_CP(byte_read); //Envía el dato recibido hacia el LCD.
Delay_ms(200);
}
}
Segundo código fuente

//PIC_a_PIC.c
//Microcontrolador: PIC16F628A
//Oscilador: Interno-4MHz
//Este programa se almacena en uno de los dos microcontroladores (U1) y
transmite continuamente un
//dato (la letra 'r') cada 300 ms por el pin de transmisión RB6(12). El pin
de recepción es
//RB7(13).
//La velocidad de transmisión de 600 Baudios fue seleccionada
experimentalmente por un
//procedimiento de ensayo y error. El pin RB0(6) se enciende por 1 segundo en
el caso de
//intentar establecer una velocidad de transmisión muy alta o muy baja.

char error;
void main(){
CMCON=0x07; //Pines RA<3:0> como E/S digital.
PORTB=0x00;
TRISB0_bit=0;
error = Soft_UART_Init(&PORTB, 7, 6, 600, 0); //Inicializa el módulo UART-
Software a 600 Baudios.
if (error >0){
RB0_bit=1;
Delay_ms(1000);
RB0_bit=0;
while(1); //Detiene el programa en caso de error.
}
Delay_ms(100);
while (1){
Soft_UART_Write('r'); //Envía el carácter 'r' cada 300 ms.
Delay_ms(300);
}
}
Esquema eléctrico de la comunicación PIC a PIC
Bibliografía
Google. (14 de Noviembre de 2023). Linked in. Obtenido de Microcontroladores. ¿Qué
son? y su importancia en la industria.:
https://es.linkedin.com/pulse/microcontroladores-qu%C3%A9-son-y-su-
importancia-en-la-industria-

Google. (14 de Noviembre de 2023). TECmikro. Obtenido de Introducción a la


programación de microcontroladores PIC: https://tecmikro.com/content/8-
programacion-microcontroladores-pic

También podría gustarte