• No se han encontrado resultados

PC a PIC texto

N/A
N/A
Protected

Academic year: 2020

Share "PC a PIC texto"

Copied!
12
0
0

Texto completo

(1)

Resumen— En el presente reporte se mostrara de una forma clara y entendible para personas con bajo conocimiento en el área de instrumentación, como realizar una práctica de comunicación de PC a PIC, con ayuda del conocimiento de la comunicación serial y programas de interfaz gráfica, asimismo nos apoyaremos con material didáctico como son imágenes, códigos de programación y videos; con la finalidad de que dicho reporte en mención sea una guía o comúnmente como una receta, de la realización de la práctica de comunicación PC a PIC #1.

I. INTRODUCCIÓN

El presente documento es una guía de cómo se puede realizar una comunicación serial de PC a PIC mandando texto, donde se aprenderá paso por paso y con explicaciones claras que materiales son los que se utilizan. La comunicación serial consiste en el envío de un bit de información de manera secuencial, esto es un bit a la vez y a un ritmo acordado entre el emisor y el receptor.

II. PLANTEAMIENTODEL PROBLEMA

Realizar una comunicación serial con la cual se pueda mandar caracteres desde una interfaz gráfica de la PC a un PIC y se imprima en una LCD.

III. MARCOTEÓRICO

Microcontrolador (PIC 16f877A)

Es un circuito integrado o chip que incluye en su interior las tres unidades funcionales de una computadora: CPU,

Memoria y Unidades de E/S, es decir, se trata de una computadora completa en un solo 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.

Figura 1. Pic PIC 16f877A

XTAL (cristal)

Dentro de la carcasa de metal es una pequeña pieza de cristal de cuarzo que se ha cortado con precisión en tamaño de modo que la pieza de cristal vibra a una frecuencia específica. El valor del cristal generalmente es de 4Mhz. o 10Mhz.

Figura 2. Cristal utilizado para la frecuencia de ejecución que utiliza el pic.

Capacitor cerámico

Los capacitores cerámicos son utilizados en circuitos resonantes, alta frecuencia y acoplamiento, dieléctricos de temperatura

Prácticas de Instrumentación

Comunicación PC a PIC #1

Miguel Ceballos; Verónica López; Luis López; Ángel Mendoza; Martín Silva INSTITUTO TECNOLÓGICO DE COLIMA

Departamento de Ingeniería Mecatrónica

(2)

compensada, estabilidad dieléctrica y otras aplicaciones.

Figura 3. Capacitor cerámico utilizado para el buen funcionamiento del pic.

JY-MCU

Modulo de comunicación serial que recibe la señal que se deséa enviar del PIC transfiriendola vía bluetooth, usador para comunicar de forma inalambrica el PIC con algún dispositivo con bluetooth.

Figura 4.Modulo bluetooth JY-MCU para PIC.

Display LCD (16 x 2)

Las pantallas LCD están construidas en base a un material cuya polarización de la luz varía en presencia de un campo eléctrico denominado cristal liquido, este display funciona gracias a un circuito interno el cual hace que cuando el display se conecte al microcontrolador de forma correcta y por una serie de instrucciones, en la pantalla muestre los caracteres que se quieren.

Figura 5. LCD (display) utilizado para la impresión de resultados.

PCWHD

Compilador C de la firma CCS (Custom Computer Services). Lenguaje de alto nivel que contiene las funciones y librerías necesarias para el diseño de cualquier aplicación basada en microcontroladores PIC: matemáticas, control de protocolos serie, I2C, etc. La versión PCWHD admite todos los dispositivos PIC de las gamas baja (12xxx), media (16xxx) y alta (18xxxx), con núcleos de 12, 14 y 16 bits respectivamente y los nuevos PIC24/dsPIC de 24 bits.

Microsoft Visual C#

Lenguaje de programación orientada a objetos, el cual permite hacer programas con interfaces gráficas, el cual permite además la comunicación atravez de un puerto serie.

ISIS Proteus

El Programa ISIS, Intelligent Schematic Input System (Sistema de Enrutado de Esquemas Inteligente) permite diseñar el plano eléctrico del circuito que se desea realizar con componentes muy variados, desde simples resistencias, hasta alguno que otro microprocesador o microcontrolador, incluyendo fuentes de alimentación, generadores de señales y muchos otros componentes con prestaciones diferentes. Los diseños realizados en Isis pueden ser simulados en tiempo real, mediante el módulo VSM, asociado directamente con ISIS.

(3)

Figura 6. Programa simulador de circuitos electronicos.

Programador MINIPROG+

Es una herramienta de programación y depuración profesional para la familia de microcontroladores PIC. Con dicho programador se le graba al pic el programa creado y compilado en el programa de la figura 7.

Figura 7. Programador

PICKIT

Es una familia de programadores de microcontroladores PIC realizados por Microchip Technology. Se utilizan para programción y depuración de microcontroladores.

Figura 8. Programa para grabar el código al Microcontrolador.

Resistencia

Mayor o menor oposición que ofrecen los cuerpos conductores al paso de la corriente eléctrica, la unidad que mide la resistencia es el Ω, en la práctica se usará cierto número de resistencias las cuales se parecen a la de la Fig. 9, estas resistencias tienen 2 pines, no tienen polaridad y pueden tener un gran número de resistencia el cual es determinado por los colores de las franjas que tiene.

Figura 9. Resistencia

Protoboard

Tablero con orificios conectados eléctricamente entre sí, habitualmente siguiendo patrones de líneas, en el cual se Pueden insertar componentes electrónicos y cables para el armado y prototipado de circuitos electrónicos y sistemas similares.

Figura 10. Protoboard

Virtual Serial Port Driver

Programa usado para crear puertos virtuales los cuales ayudan a poder probar el circuito y los programas de forma virtual.

IV. LISTA DE MATERIALES

 1 PIC 16f877A

 1 Resistencia de 10KΩ  1 Cristal de cuarzo de 4MHz  1 Display LCD 16 x 2

(4)

 Cables para conectar en protoboard

 1 MINIPROG+

 1 Cable de USB A a USB B

 1 Computadora con ISIS proteus, PICkit, PCWHD y C#

 Módulo JY-MCU

V. DESARROLLO

Para realizar la práctica primeramente se deben tener todos los materiales a la mano, tanto la computadora con los 4 software necesarios y los materiales físicos.

Primer paso. Conexión del circuito en el software ISIS Proteus, con todos los componentes de dicho circuito incluyendo la comunicación serial.

Figura 11. Circuito conectado a comunicación serial.

Segundo paso. Se identifica las variantes de la problemática, y para solucionarlas se crea un programa en el PCWHD y en C#.

Tercer paso. Se crean puertos virtuales con ayuda del programa “Virtual Serial Port Driver” y se hace la configuración de los puertos seriales tanto en C# como en ISIS para que ambos puertos estén sincronizados acomodando el de ISIS en COM2 y el de C# en COM1 y ajustando los baudios de los puertos a 9600.

Cuarto paso. Se le carga el programa al Microcontrolador del circuito conectado en ISIS Proteus, esto se lleva acabo dando doble clic y cargando el archivo .hex

creado al compilar el programa. Se continúa realizando la simulación para cerciorarse de que el programa cumple con las especificaciones necesarias para satisfacer la problemática actual.

Figura 12. Simulación del circuito de comunicación serial.

Quinto paso. Se hace la prueba del programa realizado en C# en conjunto con la simulación en ISIS para comprobar que efectivamente hace la comunicación.

Figura 13. Simulación del circuito de comunicación serial y programa de C#.

Sexto paso. Una vez que la simulación de ISIS y de C# funcionan como se desea que lo haga el circuito en físico, se le carga el programa al pic 16f8877A utilizando el programador MINIPROG+ y el software PICkit.

Septimo paso. Se procede a comenzar a conectar el circuito en la protoboard, en el caso de esta práctica ya se tiene hecha una placa en baquelita donde se puede conectar directamente el módulo JY-MCU al PIC y de igual forma el display LCD. Primeramente se conecta el pic 16f8877A, de ahí se le conectan los componentes necesarios:

- 1 resistencia de 10kΩ de la alimentación positiva al pin 1 del

(5)

pic. El número de pin del pic se puede ver en la figura 15.

- 2 capacitores de 22pF conectados desde tierra, uno al pin 13 y el otro al pin 14 del pic.

- 1 Cristal de cuarzo de 4MHz conectado entre el pin 13 y el pin 14, cabe destacar que el cristal no posee polaridad.

- El pin 11 y 32 del pic se conectan a la alimentación positiva. El pin 12 y 31 se conectan a tierra.

Figura 14. Numeración de los pines del pic 16F877A según el datasheet.

Sexto paso. Conexión de la LCD al pic y un potenciómetro de 5kΩ según como se muestra en la figura 15. La fuente de voltaje que se muestra en dicha figura en forma de triángulo, es una conexión a la alimentación positiva de una de las terminales que está en un extremo del potenciómetro.

Nota. El potenciómetro de 5kΩ solo se utiliza para regular el contraste de la LDC, si no se desea controlar no se utilizará.

Figura 15. Conexión de la LCD.

Séptimo paso. Se conecta el modulo bluetooth JY-MCU al PIC, siguiente la

configuración impresa en el módulo como se muestra en la figura 16, teniendo en cuenta que el pin Vcc se conecta a 5v, el pin GND a tierra(ambos pines al mismo voltaje y tierra que le PIC), el pin RXD del módulo se conecta al pin 25 del PIC(TX) y el pin TXD del módulo se conecta al pin 26 del PIC(RX)

Figura 16. Módulo JY-MCU visto por atrás..

Decimo paso. Se alimenta el circuito con 5V. Es importante checar que la fuente que alimenta al circuito no sobrepase los 5V porque se quemaría el PIC.

Undécimo paso. Conectar el modulo bluetooth, a la computadora vía bluetooth, esta forma de conectar varía dependiendo de la computadora usada, si para la comunicación se necesita una contraseña se debe intentar usar “1234” o “0000” (estas contraseñas están prestablecidas por el fabricante).

Doceavo paso. Probar que el programa realizado en C# funcione correctamente y que el PIC funcione de igual forma.

Conclusión. Una de las dificultades presentadas en la práctica fue la creación del programa de C#, ya que no se tenía mucho conocimiento de este lenguaje de programación, otra problemática que se encontró fue al recibir datos en el PIC ya que éste solo recibe BYTES (8bits) por lo que con el conocimiento adquirido hasta el momento solo se logró enviar 2 caracteres a la vez desde el programa de C#.

(6)

VI. ANEXO 1. SIMULACION EN EL PROGRAMA ISIS PROTEUS

Figura 18. Circuito de comunicación serial funcionando.

VII. ANEXO 2. DESARRO DEL PROGRAMA EN PCWHD

#include <16F877A.h> //Librería del PIC

#fuses XT,NOWDT,NOPROTECT,NOLVP //Librerías de fusibles como xt(para indicar que se usará cristal de cuarzo)

//NOWDT deshabilita el Watchdog timer "perro guardián"

//PUT habilita el Power Up Timer, tiempo de espera para estabilizacion de alimentacion

//NOPROTECT No se protege el codigo del PIC

#use delay(clock=4M) //Permite definir las frecuencia del oscilador del PIC

#use rs232 (baud=9600, xmit=pin_c6, rcv=pin_c7, parity=N, stop=1, bits=8) //Definición establecida de la comunicación serial

//Donde se especifican los baudios, los pines de comunicación,

//entre otras cosas establecida

#include <lcd.c> //Librerías para indicar que se usará una LCD

int recibidor; //Declaración de la variable que se recibirá de la PC

#int_rda //Declaración de interrupción por puerto serial

(7)

{

recibidor=getc(); //Recepción de la variable enviada por la PC

if (recibidor ==';') //Condición para borrar la pantalla del LCD

{

lcd_putc( "\f"); //Indicación de borrado de pantalla }

else //Indicación de que hacer en caso de que no se cumpla la condición

{

printf(lcd_putc, "%c", recibidor); //Impresión de la variable recibida de la PC

} }

void main() //Inicio del programa principal {

enable_interrupts(GLOBAL); //Habilitación de las interrupciones globales enable_interrupts(INT_RDA); //Habilitación de la interrupción serial lcd_init(); //Inicio de funcionamiento del LCD

printf(lcd_putc, "Listo para \nrecibir texto"); //Impresión de texto en LCD para indicar que el programa está trabajando

while(1) //Inicio del ciclo while para que el PIC no deje de trabajar {

delay_ms(10); //Retraso de 10milisegundos }

}

VIII. ANEXO 3. Programa de C#

//librerías necesarias para el programa using System;

using System.Collections.Generic; using System.ComponentModel; using System.Data;

using System.Drawing; using System.Linq; using System.Text;

using System.Windows.Forms;

using System.IO.Ports; //librería especial para puertos serial

//Programa general

namespace WindowsFormsApplication1 {

public partial class PCPIC : Form {

(8)

#region Variables Globales

string[] Puertos = new string[20]; //Vector de Cadenas para nombrar Puertos existentes

string datos_salida; //Variable recibida del PIC char charsalida; //Variable que envia al pic #endregion

public PCPIC() {

InitializeComponent(); //deshabilita excepciones en subprocesos

CheckForIllegalCrossThreadCalls = false;

Puerto_Serie.ReadTimeout = 500; //tiempo de espera para leer Puerto_Serie.WriteTimeout = 500; //tiempo de espera para escribir

Puertos = SerialPort.GetPortNames(); //Actualización de puertos

cmbPuertos.Items.Clear(); //Limpia los puertos que hay en el combobox

for (int i = 0; i < Puertos.Length; i++) //ciclo for para rellenar el combobox con los puertos existentes

{

cmbPuertos.Items.Add(Puertos[i]); //Impresión en el combobox del com encontrado

}

cmbPuertos.Text = cmbPuertos.Items[0].ToString(); //Conversión del nombre de los puertos para poder ser vistos por el usuario

cmbPuertos.Focus(); //Comando para centrar el programa en esta acción

lblEstado.Text = "listo"; //Impresión de palabra listo en la barra de estado

}

//Región de conexión serial(para los botones de la comunicación) #region conexión serial

//Acciones a realizar cuando el boton btnabrir(boton de bluetooth) recibe un click

private void btnabrir_Click(object sender, EventArgs e) {

lblEstado.Text = "Abriendo Puerto"; //Impresión de frase abriendo puerto

try //Comando para hacer que intente hacer la acción entre {} para evitar errores, en caso de que no se haga

//entra a las acciones del catch pero no cierra el programa

{

if (Puerto_Serie.IsOpen) //Acción a realizar si hay algún puerto abierto

{

Puerto_Serie.Close(); //Cerrar el puerto abierto }

Puerto_Serie.PortName = cmbPuertos.SelectedItem.ToString(); //Comando para hacer compatible el com selecccionado con el programa

if (!Puerto_Serie.IsOpen) //Acción a realizar si no hay puertos abiertos

{

Puerto_Serie.Open(); //Comando para abrir el puerto seleccionado del combobox

}

lblEstado.Text = "Puerto " + Puerto_Serie.PortName + " Abierto"; //Imprimir en la barra de estado que el puerto seleccionado se abrió

(9)

}

catch (Exception) //Acción a realizar si no se pudo hacer lo del TRY

{

lblEstado.Text = "No se pudo Abrir el Puerto " +

Puerto_Serie.PortName; //Impresión en la barra de estado que no se pudo abrir el com seleccionado

} }

//Acciones a realizar cuando el boton btncerrar(boton de la X) recibe un click

private void btncerrar_Click(object sender, EventArgs e) {

try //Comando para hacer que intente hacer la acción entre {} para evitar errores, en caso de que no se haga

{

Puerto_Serie.Close(); //Cerrar el puerto abierto lblEstado.Text = "Puerto " + Puerto_Serie.PortName + " Cerrado"; //Impresión en la barra de estado para indicar que se cerró el puerto

}

catch (Exception) //Acción a realizar si no se pudo hacer lo del TRY

{

MessageBox.Show("No se pudo Cerrar el Puerto!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); //Alerta para indicar que no se pudo cerrar el puerto

} }

//Acciones a realizar cuando el boton btnrefresh(boton de las flechas) recibe un click

private void btnrefresh_Click(object sender, EventArgs e) {

try //Acciones a realizar cuando el boton btnrefresh(boton de las flechas) recibe un click

{

Puertos = SerialPort.GetPortNames(); //obtención de los com utilizables

cmbPuertos.Items.Clear(); //Limpieza del combobox for (int i = 0; i < Puertos.Length; i++) //ciclo for para rellenar el combobox con los puertos existentes

{

cmbPuertos.Items.Add(Puertos[i]); //Impresión en el combobox del com encontrado

}

cmbPuertos.Text = cmbPuertos.Items[0].ToString();

//Conversión del nombre de los puertos para poder ser vistos por el usuario cmbPuertos.Focus(); //Impresión en el combobox del com encontrado

lblEstado.Text = "Puertos Actualizados"; //Impresión de frase "Puertos Actualizados" en la barra de estado

}

catch //Acción a realizar si no se pudo hacer lo del TRY

{

lblEstado.Text = "Puerto Cerrado Tienes que abrirlo..! "; //Impresión en la barra de estado que se debe abrir los puertos

} }

(10)

#endregion

//Acciones a realizar cuando el boton Mandar(boton de la carta) recibe un click

private void Mandar_Click(object sender, EventArgs e) {

try //Comando para hacer que intente hacer la acción entre {} para evitar errores, en caso de que no se haga

{

datos_salida = letras.Text; //Asignación del texto del textlabel letras en la variable datos_salida

Puerto_Serie.Write(datos_salida.ToString()); //Impresión de la variable datos_salida pero en el puerto serie

lblEstado.Text = "Dato mandado"; //Impresión de "Dato mandado" en la barra de estado

letras.Text = ""; //Borrado del texto en el Textbox letras

}

catch //Acción a realizar si no se pudo hacer lo del TRY

{

lblEstado.Text = "NO se pudo mandar el dato "; //Impresión de "NO se pudo mandar el dato" en la barra de estado

} }

private void pc_a_pic(object sender, EventArgs e) {

}

//Acciones a realizar cuando el boton de cerrar recibe un click

private void Form1_FormClosing(object sender, FormClosingEventArgs e) {

if ((MessageBox.Show("¿salir?", "Saliendo RS-232",

MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)) //Acción para especificar si se selecciona NO en la ventana

{

e.Cancel = true; //Acción a realizar para cuando se oprime no, se cancela el cerrado

}

else //Acción para cuando se presiona si en el mensaje {

Puerto_Serie.Close(); //Cerrado de puerto serie activo para evitar problemas futuros

e.Cancel = false; //Comando para indicar que el cerrado sigue como debería

} }

//Acciones para cuando se presione un enter

private void press(object sender, KeyPressEventArgs e) {

if (e.KeyChar == Convert.ToChar(Keys.Enter)) {

try //Comando para hacer que intente hacer la acción entre {} para evitar errores, en caso de que no se haga

{

datos_salida = letras.Text; //Asignación del texto del textlabel letras en la variable datos_salida

Puerto_Serie.Write(datos_salida.ToString()); //Impresión de la variable datos_salida en el puerto serial

(11)

lblEstado.Text = "Dato mandado"; //Impresión de "Dato mandado" en la barra de estado

letras.Text = ""; //Borrado del texto en el Textbox letras

}

catch //Acción a realizar si no se pudo hacer lo del TRY

{

lblEstado.Text = "NO se pudo mandar el dato "; //Impresión de "NO se pudo mandar el dato" en la barra de estado

} } }

//Acción para cuando se escriba texto en el textbox letras private void letras_TextChanged(object sender, EventArgs e) {

if (letras.TextLength >= 3) //Acción a realizar cuando las letras en el textbox sean mayor a 3

{

letras.Text = ""; //Borrado del texto en el texbox }

}

} }

(12)

IX. ANEXO 4. Form usado en el programa de C#

X. ANEXO 5. Circuito para imprimir de la baquelita usada en la práctica

Para poder usar el bluetooth en esta baquelita se deben usar dos jumpers los cuales permiten alimentar el modulo, dichos jumpers van en forma horizontal en donde está el círculo rojo.

Referencias

Documento similar

En México, la falta de “alineación entre grados, materias y dominios” en el currículo oficial para la educación básica con respecto a las competencias para el siglo XXI, aumenta

Esas adaptaciones requerirán conciliar la regulación de actividades abiertas a una competencia plena o acotada con los llamados servicios uni- versales sin alterar el modelo de

Tras establecer un programa de trabajo (en el que se fijaban pre- visiones para las reuniones que se pretendían celebrar los posteriores 10 de julio —actual papel de los

El Espíritu también liberó a los esclavos de los poderes del mal, lo que fue una prueba contundente de la superioridad del poder de Dios sobre las fuerzas del mal y reveló que

Esta carga entonces está soportada por una mez- cla de presión de aceite y los contactos entre su- perficies de tal forma que las propiedades de este régimen de lubricación son

Al otro lado de las rejas: la construcción del discurso periodístico sobre la prisión (1881-1923) El holgazán por temperamento y por hábito podrá ser un hombre honrado, pero si lo es,

- Crear Programa: los programas nuevos que se añadan al proyecto deberán ser creados para poder registrar el nuevo proyecto. La creación de un nuevo programa dirigirá al

En efecto,- se solicitaba insistenterrente la reapariciôn de algunas prohibi- clones que habian desaparecido en el siglo XV. A pesar de todo lo corriente era el