Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PLAN DE ESTUDIOS
MODALIDAD DISTANCIA
ACTIVIDAD: INVESTIGACION
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.
//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.
//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-