Sei sulla pagina 1di 13

wertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwert uiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwer tyuiop sdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfg jklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzx vbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnm wertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwert uiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwer tyuiop Interface utilizando C# sdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfg Control de LEDS jklzxcvbnmrtyuiopasdfghjklzxcvbnmqwertyuiopasdfghj

klzxcvb nmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqw 02/06/2011 rtyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyui Programacin Avanzada Prof. Ing. Oscar Ureo pasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasd Equipo ghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjkl Martnez Urbina Rubn 08580432 Guevara Salinas Elan 08580422 xcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvb Ortega Snchez Cesar 08580430 Nez Garza Eva nmrtyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnm qwerty Verdugo Castaeda Adrin Alonso iopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopa dfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghj lzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcv nmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmq wertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmrtyuiop sdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfg jklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzx vbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnm wertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwert uiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwer tyuiop sdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmrtyuiopasdfghjklz cvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbn mqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwe tyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuio asdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdf hjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasd fghjklz cvbnmqwertyuiopasdfghjklzxcvbnmrtyuiopasdfghjklzxcvbnmqw rtyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyui

Introduccin Durante mucho tiempo cuando se hablaba de interfaz entre computadora y objeto, se entenda que utilizaramos el ya extinto puerto paralelo o el igualmente viejo puerto serie, sin embargo han pasado los aos y cada vez queda ms en evidencia que usar los puertos antes mencionados se vuelve obsoleto. Mostrar el montaje de una interfaz utilizando el puerto USB (Mas utilizado en la actualidad) mediante el C# es el objetivo de este trabajo.

Montaje Materiales 1 PIC 18F4550(con su respectiva tablilla y previamente cargado el bootloader de Microside) 2 8 Leds 3 8 Resistencias de 330 ohms 4 1 Switch simple polo doble tiro(SPDT) 5 Cable USB

Software Visual C# 2010 PIC C compiler BootloaderMicroside

Se controlaran 8 leds mediante un programa realizado en C# utilizando el Microcontrolador y los materiales antes mencionados, estos leds mostraran nmeros binarios dependiendo el botn que se presione, se utilizara el SPDT para poder mandarle un nivel alto y bajo al RC0 el cual mandara una seal a la computadora que mostrara VCC o GND dependiendo del nivel de voltaje.

Primero se deben realizar las conexiones pertinentes

Los 8 leds van a las salidas desde el RB0 al RB7 y se tiene que procurar conseguir la tablilla de Microside pues ya viene con un bootloader previamente cargado y eso nos facilita mucho el proceso del montaje.

El siguiente paso es hacer que nuestra computadora reconozca el USB para esto descargaremos todo lo necesario del siguiente link http://www.megaupload.com/?d=KDOJC5CT Escogeremos la carpeta de ejemplos y seleccionaremos CCS_CDC_ USB

Seguiremos las instrucciones que vienen el archivo .Text -Se cargara el archivo .HEX -Despus de esto se cargara con el microside y presionaremos reset,la computadora lo reconocer como un USB desconocido -Se proceder a instalar los drivers contenidos en la carpeta dependiendo del sistema operativo

Se abrir el archivo llamado acd_dcd el cual est escrito en lenguaje c El cdigo viene abajo:

/*CONFIGURACION PIC*/ #include "18f4550.h" #deviceadc=8 #use delay(clock=48000000) //#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) //#zero_ram #build(reset=0x01000,interrupt=0x01008) #org 0x0000,0x0FFF {} //------------------------------------------------------------------------------#include "usb_cdc.h" #define LED1 #define LED2 #define LED3 #define LED4 #define LED5 #define LED6 #define LED7 #define LED8 voidmain(void) { byte dato; byte voltaje; //variable donde se guardaran los comandos enviados por la pc //variable donde se guardara el valor de voltaje analogicoleido por el PIC //Configura puerto B 1= entrada 0= salida //Configura puerto C 1= entrada 0= salida //configuracionindiuvidual de canales ADC PIN_B0 PIN_B1 PIN_B2 PIN_B3 PIN_B4 PIN_B5 PIN_B6 PIN_B7

Este encabezado de Programa es la configuracin del PIC18F4550 por lo tanto no se modifica.

Esta parte del programa determina las variables que se usaran en el mismo, como se puede observar aqu definimos 8 variables en 8 pines que sern lo que manipularemos ms adelante.

set_tris_b(0b00000000); set_tris_c(0b11111111); setup_adc_ports(AN0);

setup_adc( ADC_CLOCK_INTERNAL );

En esta seccin del programa lo nico que nos interesa es la configuracin de los puertos como entradas y salidas como se puede observar es trisa para el porta y as sucesivamente

usb_cdc_init(); usb_init();

// Configuramos al puerto virtual. // Inicializamos el stack USB. // espera a detectar una transmisin de la PC (Set_Line_Coding)

while(!usb_cdc_connected()) {} usb_task(); while (!usb_enumerated()){}

// Espera a que el dispositivo sea enumerado por el host.

//----------------------------rutina principal ---------------------------do{ dato=usb_cdc_getc(); switch(dato) { //espera a recibir un datos por el puerto cdc_usb // compara el dato para ejecutar accion //cambia de estado el puerto B0

case 'a': output_toggle(LED1); break; case 'b': output_toggle(LED2); break; case 'e': output_toggle(LED3); break; case 'f': output_toggle(LED4); break; case 'g': output_toggle(LED5); break; case 'h': output_toggle(LED6); break; case 'i': output_toggle(LED7); break; case 'j': output_toggle(LED8); break;

//cambia de estado el puerto B4

//cambia de estado el puerto B0

La rutina principal del programa como se ve esta la instruccin do que se encargara de ejecutar las ordenes anclada a la instriccionwhile que est configurada para un bucle infinito lo que significa que siempre estar en ejecucin.

//cambia de estado el puerto B4

//cambia de estado el puerto B0

//cambia de estado el puerto B4

//cambia de estado el puerto B0

//cambia de estado el puerto B4

case 'c': if(input(PIN_C0)==0) { printf(usb_cdc_putc,"GND"); } else //si esta en alto { printf(usb_cdc_putc,"VCC"); } break; }while (TRUE); // bucle infinito.

//compara el estado del puerto C2, si esta en bajo //enviacaracter 1 hacia la pc por el puerto cdc_usb

//enviacaracter 2 hacia la pc por el puerto cdc_usb

En esta ltima parte del programa muestra los casos los cuales muestran que cada que el PIC reciba una letra realizara una accin de la a hasta la j cambiara el estado lgico de los pines y el caso c checa la entrada del RC0

Este programa se compilara y se cargara el archivo HEX con el microside.

Por ltimo se tiene el programa en Visual C# 2010 el cual usa el control de SerialPort con el que estaremos comunicndonos con el microcontrolador envindole datos gracias a la instruccin Serialport1.writeline,como se vio en el programa en el CCS necesitaremos mandar una letra dependiendo de la accin a realizar .(Ejemplo escribir Serialport.1writeline(a); enviara un pulso al Rb0;)

En la imagen de arriba se puede observar nuestra interfaz la cual visualmente hablando consta de 13 botones ,1 textbox,2 labels y un combobox ; el combobox denominado puerto es el que detecta el com que abriremos, vez seleccionado presionaremos el botn Abrir

Aqu el cdigo:
usingSystem; usingSystem.Collections.Generic; usingSystem.ComponentModel;

usingSystem.Data; usingSystem.Drawing; usingSystem.Linq; usingSystem.Text; usingSystem.Windows.Forms; namespacepuertoSerie { publicpartialclassForm1 : Form { string Recibidos; public Form1() { InitializeComponent(); //ejecutar la funcionRecepcion por disparo del evento 'DataReived' serialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(Recepcion);

} privatevoid button1_Click(objectsender, EventArgs e) { serialPort1.PortName = comboBox1.SelectedItem.ToString(); if (!serialPort1.IsOpen) { try { serialPort1.Open(); } catch//(System.Exception ex) { // MessageBox.Show(ex.ToString()); MessageBox.Show("No se ha establecido la comunicacin por el puerto serie"); } } } privatevoidRecepcion(objectsender, System.IO.Ports.SerialDataReceivedEventArgs e) { //Invocar o llamar al proceso de tramas this.Invoke(newEventHandler(Actualizar)); } privatevoid Actualizar(object s, EventArgs e) { Recibidos += serialPort1.ReadExisting(); // System.Console.WriteLine(Recibidos); //Asignar el valor de la trama al textBox textBox1.Text = Recibidos; } privatevoid Form1_Load(objectsender, EventArgs e) {

String[] Ports = System.IO.Ports.SerialPort.GetPortNames(); comboBox1.Items.AddRange(Ports); } privatevoid button3_Click(objectsender, EventArgs e) { serialPort1.Close(); Close(); } privatevoid button2_Click(objectsender, EventArgs e) { serialPort1.WriteLine("c"); } privatevoid comboBox1_SelectedIndexChanged(objectsender, EventArgs e) { } privatevoid textBox1_TextChanged(objectsender, EventArgs e) { } privatevoid label2_Click(objectsender, EventArgs e) { } privatevoid button4_Click(objectsender, EventArgs e) { serialPort1.WriteLine("a"); } privatevoid button5_Click(objectsender, EventArgs e) { serialPort1.WriteLine("b"); } privatevoid button8_Click(objectsender, EventArgs e) { serialPort1.WriteLine("ab"); } privatevoid button6_Click(objectsender, EventArgs e) { serialPort1.WriteLine("e"); } privatevoid button7_Click(objectsender, EventArgs e) { serialPort1.WriteLine("ea"); } privatevoid button9_Click(objectsender, EventArgs e) {

Como se puede observar la programacion de los pushbuttons consiste en enviar datos que son compactibles con la programacion previamente realizada en el micro ,los botones mandan una a por ejemplo lo que habilitaria el caso a que previamente fue programada en el PIC.

serialPort1.WriteLine("eb"); } privatevoid button10_Click(objectsender, EventArgs e) { serialPort1.WriteLine("eba"); } privatevoid button11_Click(objectsender, EventArgs e) { serialPort1.WriteLine("f"); } privatevoid button12_Click(objectsender, EventArgs e) { serialPort1.WriteLine("fa"); } privatevoid button13_Click(objectsender, EventArgs e) { serialPort1.WriteLine(""); } } }

Conclusiones Una interfaz de este tipo resulta de gran utilidad debido a que facilita de una gran manera el control de objetos, gracias a esta interfaz entre el Microcontrolador PIC 18F4550 y el visual C# se pueden controlar un sin nmero de objetos y sistemas

Links de Referencia: http://www.megaupload.com/?d=KDOJC5CT http://www.megaupload.com/?d=47404BQS

Potrebbero piacerti anche