Comunicacion Serial Pic 18f4550

download Comunicacion Serial Pic 18f4550

of 70

Transcript of Comunicacion Serial Pic 18f4550

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    1/70

    Reportes de Temas Avanzados

    Practicas serial - USB

    06/12/2010

    INDICEINTRODUCCION AL LABVIEW Y MIKROC ....................................................... 2

    Practica 1 Prueba de Eco Comunicación serial .................................................. 3

    Práctica 2 Convertidor analógico digital de 1 canal a 10 bits mediante puertoserie. .................................................................................................................. 7

    Práctica 3 Convertidor analógico digital de 3 canales 8 bits con comunicaciónpor puerto serie. ............................................................................................... 10

    Práctica 4 Prueba de eco USB. ........................................................................ 14

    Práctica 5 Prueba de eco USB por medio de LabView. ................................... 29

    Práctica 6 Convertidor analógico digital 1 canal, 8 bits por USB. ..................... 34

    Práctica 7 Convertidor analógico digital 1 canal, 10 bits por USB. ................... 40

    Práctica 8. Convertidor analógico digital de 3 canales a 8 bits. ........................ 46

    Práctica 9. Convertidor analógico digital 1 canal, 10 bits con filtro. .................. 53

    Práctica 10. Convertidor analógico digital 3 canales con guardado de datos. . 56

    Práctica 11. Control de motor reversible. ......................................................... 59

    Práctica 12. Medición de un potenciómetro y de un generador de funciones pormedio de la tarjeta USB-6008. ......................................................................... 65

    Práctica 13. Frecuencímetro. ........................................................................... 67

    Práctica 14. Control de un sensor de temperatura con indicador de correoelectrónico. ....................................................................................................... 69

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    2/70

    2

    INTRODUCCION AL LABVIEW Y MIKROCEl LabView es un lenguaje de programación de alto nivel, de tipo gráfico, yenfocado al uso en instrumentación. Pero como lenguaje de programación,debido a que cuenta con todas las estructuras, puede ser usado para elaborar

    cualquier algoritmo que se desee, en cualquier aplicación, como en análisis,telemática, juegos, manejo de textos, etc. Cada programa realizado enLabView será llamado Instrumento Virtual (VI), el cual como cualesquier otroocupa espacio en la memoria del computador.

    MikroC PRO para PIC es un compilador de C para microcontroladores PIC demicrochip. Esta diseñado para el desarrollo, construcción y depuración deaplicaciones integradas basadas en el PIC.

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    3/70

    3

    Practica 1 Prueba de Eco Comunicación serialObjetivo:

    Construir nuestro primer circuito con el PIC18F4550 para lograr la

    comunicación serial por medio de labview y mikroC.

    Introduccion

    La comunicación serial consiste en el envío de un bit de información de manerasecuencial, ésto es, un bit a la vez y a un ritmo acordado entre el emisior y elreceptor.

    La comunicación serial en computadores ha seguido los estándares definidosen 1969 por el RS-232 (Recommended Standard 232) que establece niveles devoltaje, velocidad de transmisión de los datos, etc. Por ejemplo, este protocoloestablece un nivel de -12v como un uno lógico y un nivel de voltaje de +12vcomo un cero lógico (por su parte, los microcontroladores emplean por logeneral 5v como un uno lógico y 0v como un cero lógico).

    Existen en la actualidad diferentes ejemplos de puertos que comunicaninformación de manera serial (un bit a la vez). El conocido como “puerto serial ” ha sido gradualmente reemplazado por el puerto USB (Universal Serial Bus)que permite mayor versatilidad en la conexión de múltiples dispositivos.

    Aunque en naturaleza serial, no suele referenciarse de esta manera ya que

    sigue sus propios estándares y no los establecidos por el RS-232.La mayoría de los microcontroladores, entre ellos los de Microchip, poseen unpuerto de comunicación serial. Para comunicarse con los computadorespersonales actuales que poseen únicamente puerto USB requieren de undispositivo “traductor”.

    Material:

    Protoboard. 1

    Capacitores de 22 microfaradios 4Capacitores de 22 picofaradios 2

    Max232 1

    Conector DB9 1

    PIC18F4550 1

    Leds 8

    Resistencias de 330 ohms 8

    http://en.wikipedia.org/wiki/Serial_communicationhttp://en.wikipedia.org/wiki/Serial_communicationhttp://en.wikipedia.org/wiki/Serial_communicationhttp://en.wikipedia.org/wiki/Bithttp://en.wikipedia.org/wiki/Bithttp://en.wikipedia.org/wiki/RS-232http://en.wikipedia.org/wiki/RS-232http://en.wikipedia.org/wiki/RS-232http://c2.com/cgi/wiki?SerialPortshttp://c2.com/cgi/wiki?SerialPortshttp://c2.com/cgi/wiki?SerialPortshttp://en.wikipedia.org/wiki/Serial_porthttp://en.wikipedia.org/wiki/Serial_porthttp://en.wikipedia.org/wiki/Serial_porthttp://en.wikipedia.org/wiki/Universal_Serial_Bushttp://en.wikipedia.org/wiki/Universal_Serial_Bushttp://en.wikipedia.org/wiki/Universal_Serial_Bushttp://en.wikipedia.org/wiki/Universal_Serial_Bushttp://en.wikipedia.org/wiki/Serial_porthttp://c2.com/cgi/wiki?SerialPortshttp://en.wikipedia.org/wiki/RS-232http://en.wikipedia.org/wiki/Bithttp://en.wikipedia.org/wiki/Serial_communication

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    4/70

    4

    Push button 1

    Resistencia 10 kilo ohms 1

    Cristal 8Mhz 1

    Cable para protoboard.

    Diagrama:

    Código de programación:

    char uart_rd;

    void main () {

    UART1_Init(9600); //inicializamos UART a 9600 bps

    Delay_ms(100); //espera por UART para estabilizar

    TRISB = 0; //PORTB como salidas

    PORTB = 0; //apagamos todo el puerto

    while (1) { //fin del ciclo

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    5/70

    5

    if (UART1_Data_Ready()) { //checamos si el dato es recibido

    uart_rd = UART1_Read(); //leemos el dato recibido

    PORTB = uart_rd;

    UART1_Write(uart_rd); //se envia dato por el UART

    }

    }

    }

    Programacion en Labview:

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    6/70

    6

    Conclusion:

    En esta práctica comenzamos a usar un nuevo PIC programando en unlenguaje avanzado como el C, usando como interfaz Labview logrando lacomunicación serial entre el pic y la computadora. Viendo el resultado en elcontrol de encendido en el puertoB.

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    7/70

    7

    Práctica 2 Convertidor analógico digital de 1 canal a 10bits mediante puerto serie.Objetivo.

    Utilizando los conocimientos de la práctica anterior realizar la conversiónanalógica digital de 10 bits trasmitiendo los datos por comunicación serialusando programación en C y Labview.

    Introducción:

    Un conversor (o convertidor) analógico-digital (CAD), (o también ADC del inglés"Analog-to-Digital Converter") es un dispositivo electrónico capaz de convertiruna entrada analógica de voltaje en un valor binario , Se utiliza en equiposelectrónicos como ordenadores , grabadores de sonido y de vídeo, y equipos de

    telecomunicaciones. La señal analógica, que varía de forma continua en eltiempo, se conecta a la entrada del dispositivo y se somete a un muestreo auna velocidad fija, obteniéndose así una señal digital a la salida del mismo.

    Material:

    En esta práctica seguiremos utilizando el circuito anterior agregando lossiguientes dispositivos Potenciómetro 10 K y 2 Leds.

    Diagrama:

    Código en C

    char uart_rd1, uart_rd2;

    unsigned int temp_res;

    unsigned int uart_wr1, uart_wr2;

    http://es.wikipedia.org/wiki/Electr%C3%B3nicahttp://es.wikipedia.org/wiki/Electr%C3%B3nicahttp://es.wikipedia.org/wiki/Electr%C3%B3nicahttp://es.wikipedia.org/wiki/Voltajehttp://es.wikipedia.org/wiki/Voltajehttp://es.wikipedia.org/wiki/Voltajehttp://es.wikipedia.org/wiki/Binariohttp://es.wikipedia.org/wiki/Binariohttp://es.wikipedia.org/wiki/Binariohttp://es.wikipedia.org/wiki/Ordenadoreshttp://es.wikipedia.org/wiki/Ordenadoreshttp://es.wikipedia.org/wiki/Ordenadoreshttp://es.wikipedia.org/wiki/Dispositivohttp://es.wikipedia.org/wiki/Dispositivohttp://es.wikipedia.org/wiki/Dispositivohttp://es.wikipedia.org/wiki/Dispositivohttp://es.wikipedia.org/wiki/Ordenadoreshttp://es.wikipedia.org/wiki/Binariohttp://es.wikipedia.org/wiki/Voltajehttp://es.wikipedia.org/wiki/Electr%C3%B3nica

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    8/70

    8

    void main() {

    TRISA = 0XFF;

    TRISB = 0;

    TRISD = 0;

    UART1_Init(9600);

    Delay_ms(100);

    while (1) {

    if (UART1_Data_Ready()) {

    temp_res = ADC_read(2);

    uart_rd1 = UART1_Read();

    uart_wr1 = temp_res;

    UART1_Write(uart_wr1);PORTB = uart_wr1;

    Delay_ms(7);

    uart_rd2 = UART1_Read();

    uart_wr2 = temp_res >> 8;

    UART1_Write(uart_wr2);

    PORTD = uart_wr2;

    Delay_ms(7);

    }

    }

    }

    Programacion en Labview:

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    9/70

    9

    Conclusion:

    Entre más nos metemos al entorno de programación, nos damos cuenta lopoderosa que es esta herramienta, también nos ayuda a conocer más ellenguaje de programación en C como ser capaces de diseñar una tarjetaadquiridora de datos para Labview.

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    10/70

    10

    Práctica 3 Convertidor analógico digital de 3 canales 8bits con comunicación por puerto serie.Objetivo.

    Ahora que ya sabemos hacer la conversión y mandar los datos por puertoserie, ahora se deberá de elaborar 3 convertidores a 8 bit, para ver eldesempeño del PIC.

    Introducción.

    Un CAD muestrea una señal analógica y la convierte en un valor digital de 'n'bits. Usualmente será necesario acondicionar la señal de entrada del

    convertidor A-D, bien sea atenuando bien sea amplificándola.Este muestreo está definido por la función de transferencia. En la siguientefigura se muestra una función de transferencia ideal de un convertidor de 8 bitsde precisión.

    Materiales:

    Potenciómetros de 10 kilo con el circuito anterior

    Diagrama:

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    11/70

    11

    Código en C.

    char uart_rd, uart_rd1, uart_rd2;

    unsigned int temp_res, temp_res1, temp_res2;

    unsigned int uart_wr, uart_wr1, uart_wr2;

    void main() {

    TRISA = 0XFF;

    TRISB = 0;

    UART1_Init(9600);

    Delay_ms(100);

    while (1) {

    if (UART1_Data_Ready()) {

    temp_res = ADC_read(1);

    uart_rd = UART1_Read();

    if (uart_rd==64){

    uart_wr = temp_res>> 2;UART1_Write(uart_wr);

    }

    Delay_ms(7);

    temp_res1 = ADC_read(2);

    uart_rd1 = UART1_Read();

    if (uart_rd1==65){

    uart_wr1 = temp_res1>> 2;

    UART1_Write(uart_wr1);

    }

    Delay_ms(7);

    temp_res2 = ADC_read(3);

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    12/70

    12

    uart_rd2 = UART1_Read();

    if (uart_rd2==69){

    uart_wr2 = temp_res2>> 2;

    PORTB=uart_wr2;

    UART1_Write(uart_wr2);

    }

    Delay_ms(7);

    }

    }

    }

    Programacion en Labview:

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    13/70

    13

    Conclusión:

    Como podemos ver cada convertidor tiene su propia respuesta, y esto lologramos con la programación en C, esto se puede ver en las llaves en cadalectura. Labview nos ayuda mucho en la construcción de estas prácticas.

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    14/70

    14

    Práctica 4 Prueba de eco USB.Objetivo.

    Ahora pasaremos a otro protocolo de comunicación, que en la actualidad esuno de los mas usados, en esta practica comenzaremos a profundizar laprogramación para lograr la comunicación USB mediante el PIC y lacomputadora.

    Introducción.

    El USB o Universal Serial Bus es una interfaz para la transmisión serie dedatos y distribución de energía desarrollado por empresas líderes del sector delas telecomunicaciones y de los ordenadores y que ha sido introducida en elmercado de los PC´s y periféricos para mejorar las lentas interfaces serie (RS-232 ) y paralelo. Provee una mayor velocidad de transferencia (de hasta 100veces más rápido) comparado con el puerto Paralelo de 25-pin y el Serial DB-9,DB-25, RS-232 que son los puertos que se encuentran en la mayoría de loscomputadores. Tenía en un principio como objetivo el conectar periféricosrelativamente lentos (ratones, impresoras, cámaras digitales, unidades ZIP , etc.) de una forma realmente sencilla, rápida y basada en comunicacionesserie, aunque por sus características también podía conectarse hasta discosduros.

    Materiales:

    Protoboard.

    PIC18F4550

    Push Button

    Resistencia 10 Kilo Ohms

    Leds 8

    Capacitores de 22 pF 2

    Capacitores de 10nF

    Cristal oscilador 8MHz

    Conector USB (tipo A o tipo B)

    Diagrama:

    Colocar indicadores (Led) al puerto D

    http://usuarios.multimania.es/kurganz/glosario.html#RS232http://usuarios.multimania.es/kurganz/glosario.html#RS232http://usuarios.multimania.es/kurganz/glosario.html#RS232http://usuarios.multimania.es/kurganz/glosario.html#RS232http://usuarios.multimania.es/kurganz/glosario.html#RS232http://usuarios.multimania.es/kurganz/glosario.html#RS232http://usuarios.multimania.es/kurganz/glosario.html#RS232http://usuarios.multimania.es/kurganz/glosario.html#ZIPhttp://usuarios.multimania.es/kurganz/glosario.html#ZIPhttp://usuarios.multimania.es/kurganz/glosario.html#ZIPhttp://usuarios.multimania.es/kurganz/glosario.html#ZIPhttp://usuarios.multimania.es/kurganz/glosario.html#RS232http://usuarios.multimania.es/kurganz/glosario.html#RS232http://usuarios.multimania.es/kurganz/glosario.html#RS232

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    15/70

    15

    Código en C

    Programa Principal.

    /*

    * Project name:

    HIDtest2 (USB HID Read & Write Test)

    * Copyright:

    (c) MikroElektronika, 2005-2008

    * Revision History:

    20050502:

    - initial release;

    * Description:

    This example establishes connection with the HID terminal that is active

    on the PC. Upon connection establishment, the HID Device Name willappear

    in the respective window. The character that user sends to PIC from the HID

    terminal will be re-sent back to user.

    * Test configuration:

    MCU: PIC18F4550

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    16/70

    16

    http://ww1.microchip.com/downloads/en/DeviceDoc/39632D.pdf

    Dev.Board: EasyPIC6

    http://www.mikroe.com/en/tools/easypic6/

    Oscillator: HS 8.000 MHz (USB osc. is raised with PLL to 48.000MHz)

    Ext. Modules: on-board USB-HID

    http://www.mikroe.com/pdf/easypic6/easypic6_manual_v100.pdf#page14

    SW: mikroC PRO for PIC

    http://www.mikroe.com/en/compilers/mikroc/pro/pic/

    * NOTES:

    (*) Be VERY careful about the configuration flags for the 18F4550 - there's

    so much place for mistake!

    - Place jumpers J12 in the right position

    */

    unsigned char k;

    unsigned char userWR_buffer[64], userRD_buffer[64];

    const char *text = "MIKROElektronika Compilers ER \r\n";

    //**************************************************************************************************

    // Main Interrupt Routine

    //*****************************************************************************************

    *********void interrupt()

    {

    HID_InterruptProc();

    }

    //**************************************************************************************************

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    17/70

    17

    //**************************************************************************************************

    // Initialization Routine

    //**************************************************************************************************

    void Init_Main()

    {

    //--------------------------------------

    // Disable all interrupts

    //--------------------------------------INTCON = 0; // Disable GIE, PEIE, TMR0IE,INT0IE,RBIE

    INTCON2 = 0xF5;

    INTCON3 = 0xC0;

    RCON.IPEN = 0; // Disable Priority Levels on interrupts

    PIE1 = 0;

    PIE2 = 0;

    PIR1 = 0;

    PIR2 = 0;

    ADCON1 |= 0x0F; // Configure all ports with analog functionas digital

    CMCON |= 7; // Disable comparators

    //--------------------------------------// Ports Configuration

    //--------------------------------------

    TRISA = 0xFF;

    TRISB = 0xFF;

    TRISC = 0xFF;

    TRISD = 0;

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    18/70

    18

    TRISE = 0x07;

    LATA = 0;

    LATB = 0;

    LATC = 0;

    LATD = 0;

    LATE = 0;

    //--------------------------------------

    // Clear user RAM

    // Banks [00 .. 07] ( 8 x 256 = 2048 Bytes )

    //--------------------------------------

    }

    //*****************************************************************************************

    //*****************************************************************************************

    // Main Program Routine

    //*****************************************************************************************void main() {

    unsigned char i, ch;

    Init_Main();

    HID_Enable(&userRD_buffer, &userWR_buffer);

    Delay_ms(1000); Delay_ms(1000);

    while (1) {

    k = HID_Read();

    i = 0;

    while (i < k) {

    ch = userRD_buffer[i];

    PORTD = ch;

    userWR_buffer[0] = ch;

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    19/70

    19

    while (!HID_Write(&userWR_buffer, 1)) ;

    i++;

    }

    }

    HID_Disable();

    }

    //*****************************************************************************************

    Programas fuente.

    //******************************************************************************

    //

    // File Version 1.01

    //

    //******************************************************************************

    #include "Definit.h"

    #include "VARs.h"// The number of bytes in each report,

    // calculated from Report Size and Report Count in the report descriptor

    unsigned char const HID_INPUT_REPORT_BYTES = 1;

    unsigned char const HID_OUTPUT_REPORT_BYTES = 1;

    unsigned char const HID_FEATURE_REPORT_BYTES = 2;

    // Byte constants

    unsigned char const NUM_ENDPOINTS = 2;

    unsigned char const ConfigDescr_wTotalLength =USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN +USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS *USB_ENDP_DESCRIPTOR_LEN);

    unsigned char const HID_ReportDesc_len = 47;

    unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len;

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    20/70

    20

    unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len >>8;

    unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE;

    unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE >>8;

    // Descriptor Tables

    unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN*2] ={

    // Device Descriptor

    USB_DEVICE_DESCRIPTOR_LEN, 0, // bLength - Length of

    Device descriptor (always 0x12)

    USB_DEVICE_DESCRIPTOR_TYPE, 0, // bDescriptorType - 1 =DEVICE descriptor

    0x00, 0, // bcdUSB - USB revision 2.00 (lowbyte)

    0x02, 0, // (high byte)

    0x00, 0, // bDeviceClass - Zero means each

    interface operates independently (class code in the interface descriptor)

    0x00, 0, // bDeviceSubClass

    0x00, 0, // bDeviceProtocol

    EP0_PACKET_SIZE, 0, // bMaxPacketSize0 - maximum sizeof a data packet for a control transfer over EP0

    0x78, 0, // idVendor - Vendor ID (low byte)

    0x56, 0, // (high byte)

    0x01, 0, // idProduct - Product ID (low byte)

    0x00, 0, // (high byte)

    0x01, 0, // bcdDevice - ( low byte)

    0x00, 0, // (high byte)

    0x01, 0, // iManufacturer - String1

    0x02, 0, // iProduct - String2

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    21/70

    21

    0x00, 0, // iSerialNumber - ( None )

    0x01, 0, // bNumConfigurations - 1

    // Configuration Descriptor

    USB_CONFIG_DESCRIPTOR_LEN, 0, // bLength - Length ofConfiguration descriptor (always 0x09)

    USB_CONFIG_DESCRIPTOR_TYPE, 0, // bDescriptorType - 2 =CONFIGURATION descriptor

    ConfigDescr_wTotalLength, 0, // wTotalLength - Total length ofthis config. descriptor plus the interface and endpoint descriptors that are part ofthe configuration.

    0x00, 0, // ( high byte)

    0x01, 0, // bNumInterfaces - Number of interfaces

    0x01, 0, // bConfigurationValue - Configuration Value

    0x00, 0, // iConfiguration - String Index for thisconfiguration ( None )

    0xA0, 0, // bmAttributes - attributes - "Bus powered"and "Remote wakeup"

    50, 0, // MaxPower - bus-powered draws 50*2mA from the bus.

    // Interface Descriptor

    USB_INTERF_DESCRIPTOR_LEN, 0, // bLength - Length ofInterface descriptor (always 0x09)

    USB_INTERFACE_DESCRIPTOR_TYPE, 0, // bDescriptorType - 4 =INTERFACE descriptor

    0x00, 0, // bInterfaceNumber - Number of interface, 0based array

    0x00, 0, // bAlternateSetting - Alternate setting

    NUM_ENDPOINTS, 0, // bNumEndPoints - Number ofendpoints used in this interface

    0x03, 0, // bInterfaceClass - assigned by the USB

    0x00, 0, // bInterfaceSubClass - Not A boot device

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    22/70

    22

    0x00, 0, // bInterfaceProtocol - none

    0x00, 0, // iInterface - Index to string descriptor thatdescribes this interface ( None )

    // HID DescriptorUSB_HID_DESCRIPTOR_LEN, 0, // bLength - Length of

    HID descriptor (always 0x09)

    USB_HID_DESCRIPTOR_TYPE, 0, // bDescriptorType - 0x21 =HID descriptor

    0x01, 0, // HID class release number (1.01)

    0x01, 0,

    0x00, 0, // Localized country code (none)

    0x01, 0, // # of HID class descriptor to follow (1)

    0x22, 0, // Report descriptor type (HID)

    Low_HID_ReportDesc_len, 0,

    High_HID_ReportDesc_len, 0,

    // EP1_RX Descriptor

    USB_ENDP_DESCRIPTOR_LEN, 0, // bLength - length ofdescriptor (always 0x07)

    USB_ENDPOINT_DESCRIPTOR_TYPE, 0, // bDescriptorType - 5 =ENDPOINT descriptor

    0x81, 0, // bEndpointAddress - In, EP1

    USB_ENDPOINT_TYPE_INTERRUPT, 0, // bmAttributes -Endpoint Type - Interrupt

    Low_HID_PACKET_SIZE, 0, // wMaxPacketSize - max packetsize - low order byte

    High_HID_PACKET_SIZE, 0, // - max packet size -high order byte

    1, 0, // bInterval - polling interval (1 ms)

    // EP1_TX Descriptor

    USB_ENDP_DESCRIPTOR_LEN, 0, // bLength - length ofdescriptor (always 0x07)

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    23/70

    23

    USB_ENDPOINT_DESCRIPTOR_TYPE, 0, // bDescriptorType - 5 =ENDPOINT descriptor

    0x01, 0, // bEndpointAddress - Out, EP1

    USB_ENDPOINT_TYPE_INTERRUPT, 0, // bmAttributes -Endpoint Type - Interrupt

    Low_HID_PACKET_SIZE, 0, // wMaxPacketSize - max packetsize - low order byte

    High_HID_PACKET_SIZE, 0, // - max packet size -high order byte

    1, 0, // bInterval - polling interval (1 ms)

    // HID_Report Descriptor

    0x06, 0, // USAGE_PAGE (Vendor Defined)

    0xA0, 0,

    0xFF, 0,

    0x09, 0, // USAGE ID (Vendor Usage 1)

    0x01, 0,

    0xA1, 0, // COLLECTION (Application)

    0x01, 0,

    // The Input report

    0x09, 0, // USAGE ID - Vendor defined

    0x03, 0,

    0x15, 0, // LOGICAL_MINIMUM (0)

    0x00, 0,

    0x26, 0, // LOGICAL_MAXIMUM (255)

    0x00, 0,

    0xFF, 0,

    0x75, 0, // REPORT_SIZE (8)

    0x08, 0,

    0x95, 0, // REPORT_COUNT (2)

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    24/70

    24

    HID_INPUT_REPORT_BYTES, 0,

    0x81, 0, // INPUT (Data,Var,Abs)

    0x02, 0,

    // The Output report

    0x09, 0, // USAGE ID - Vendor defined

    0x04, 0,

    0x15, 0, // LOGICAL_MINIMUM (0)

    0x00, 0,

    0x26, 0, // LOGICAL_MAXIMUM (255)

    0x00, 0,

    0xFF, 0,

    0x75, 0, // REPORT_SIZE (8)

    0x08, 0,

    0x95, 0, // REPORT_COUNT (2)

    HID_OUTPUT_REPORT_BYTES, 0,0x91, 0, // OUTPUT (Data,Var,Abs)

    0x02, 0,

    // The Feature report

    0x09, 0, // USAGE ID - Vendor defined

    0x05, 0,

    0x15, 0, // LOGICAL_MINIMUM (0)

    0x00, 0,

    0x26, 0, // LOGICAL_MAXIMUM (255)

    0x00, 0,

    0xFF, 0,

    0x75, 0, // REPORT_SIZE (8)

    0x08, 0,

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    25/70

    25

    0x95, 0, // REPORT_COUNT (2)

    HID_FEATURE_REPORT_BYTES, 0,

    0xB1, 0, // FEATURE (Data,Var,Abs)

    0x02, 0,

    // End Collection

    0xC0, 0 // END_COLLECTION

    };

    //******************************************************************************

    unsigned char const LangIDDescr[8] = {

    0x04, 0,

    USB_STRING_DESCRIPTOR_TYPE, 0,

    0x09, 0, // LangID (0x0409) - Low

    0x04, 0 // - High

    };

    //******************************************************************************unsigned char const ManufacturerDescr[68] = {

    34, 0,

    USB_STRING_DESCRIPTOR_TYPE, 0,

    't', 0, 0, 0,

    'e', 0, 0, 0,

    'm', 0, 0, 0,

    'a', 0, 0, 0,

    's', 0, 0, 0,

    ' ', 0, 0, 0,

    'a', 0, 0, 0,

    'v', 0, 0, 0,

    'a', 0, 0, 0,

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    26/70

    26

    'n', 0, 0, 0,

    'z', 0, 0, 0,

    'a', 0, 0, 0,

    'd', 0, 0, 0,

    'o', 0, 0, 0,

    's', 0, 0, 0,

    ' ', 0, 0, 0

    };

    //******************************************************************************

    unsigned char const ProductDescr[96] = {

    48, 0,

    USB_STRING_DESCRIPTOR_TYPE, 0,

    'm', 0, 0, 0,

    'i', 0, 0, 0,

    'k', 0, 0, 0,'r', 0, 0, 0,

    'o', 0, 0, 0,

    'C', 0, 0, 0,

    ' ', 0, 0, 0,

    'P', 0, 0, 0,

    'I', 0, 0, 0,

    'C', 0, 0, 0,

    ' ', 0, 0, 0,

    '1', 0, 0, 0,

    '8', 0, 0, 0,

    'F', 0, 0, 0,

    '4', 0, 0, 0,

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    27/70

    27

    '5', 0, 0, 0,

    '5', 0, 0, 0,

    '0', 0, 0, 0,

    ' ', 0, 0, 0,

    't', 0, 0, 0,

    'e', 0, 0, 0,

    's', 0, 0, 0,

    't', 0, 0, 0

    };

    //******************************************************************************

    unsigned char const StrUnknownDescr[4] = {

    2, 0,

    USB_STRING_DESCRIPTOR_TYPE, 0

    };

    // Initialization Functionvoid InitUSBdsc()

    {

    Byte_tmp_0[0] = NUM_ENDPOINTS;

    Byte_tmp_0[0] = ConfigDescr_wTotalLength;

    Byte_tmp_0[0] = HID_ReportDesc_len;

    Byte_tmp_0[0] = Low_HID_ReportDesc_len;

    Byte_tmp_0[0] = High_HID_ReportDesc_len;

    Byte_tmp_0[0] = Low_HID_PACKET_SIZE;

    Byte_tmp_0[0] = High_HID_PACKET_SIZE;

    DescTables;

    LangIDDescr;

    ManufacturerDescr;

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    28/70

    28

    ProductDescr;

    StrUnknownDescr;

    }

    Procedimiento:

    Conectar el dispositivo a la computadora.

    En MIKROC acceder a la ventana de pruebas HID.

    HID es Human Interface Device.

    Desde MikroC verificar si el dispositivo tiene comunicación con la computadora.

    Conclusión:

    Al desarrollar la práctica nos damos cuenta la aplicación que se le puede dar aesta comunicación, como también nos muestra la necesidad de crear driverpara probar nuestro primer diseño lo cual veremos en la siguiente practica.

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    29/70

    29

    Práctica 5 Prueba de eco USB por medio de LabView.Objetivo:

    Después de los conocimientos adquiridos hasta ahora, ahora utilizaremosLabview para realizar mayores aplicaciones utilizando el protocolo USB.

    Introducción:

    Ahora será necesario crear nuestro propio driver para poder usar a nuestro PICcomo interfaz, usando labview para realizar adquisiciones de datos u otraaplicación que se le quiera dar, esto es debido, a que se trabaja con unprotocolo de comunicación avanzada.

    Hardware:

    La misma configuración a la practica anterior

    Código en C:

    El archivo de código principal sigue siendo el mismo.

    El archivo fuente si cambia.

    Hay que modificar:

    ID vendor

    ID product

    Mensaje de dispositivo

    Los cuales nos ayudaran a la creación del driver.

    Creación del controlador.

    Acceder al Driver Wizard que es un complemento de LabView. Se encuentra enel folder VISA y posteriormente Driver Wizard.

    De entre las opciones que inmediatamente aparecen, elegir USB.

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    30/70

    30

    Cambiar el ID vendor y el ID product; POR LOS MISMOS QUE HEMOSCAMBIADO EN NUESTRO ARCHIVO FUENTE Y QUE HEMOS YAQUEMADO EN EL PIC.

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    31/70

    31

    Si se quiere, cambiar el fabricante y el modelo del dispositivo, para crear undriver más personalizado.

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    32/70

    32

    Crearlo e instalarlo, una vez hecho esto, conectamos el dispositivo y en dondela computadora lo reconozca, actualizamos el controlador por el nuevo queacabamos de crear.

    Verificar: Cuando el dispositivo deje de ser HID y pase a Dispositivo deNational Instrumenst, significa que hemos hecho el proceso de maneracorrecta.

    Programación en Labview:

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    33/70

    33

    Conclusion:

    Ahora hemos creado el driver que nos ayudara a la elaboración de lassiguientes practicas, con esto y el programa de ECO hemos dado un paso a laprogramación con USB.

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    34/70

    34

    Práctica 6 Convertidor analógico digital 1 canal, 8 bitspor USB.Objetivo.

    Una vez teniendo los conocimientos de programación como en C y en labview,nuestra próxima escena será repetir las practicas de protocolo serie ahora conel protocolo usb.

    Introducción.

    Hay que recordar que la configuración del convertidor en MIKROC es bastantesencilla, ahora teniendo esa topología en mente y uniéndola con la prueba de

    eco USB obtendremos una adquisición de datos analógicos bastante fiel yrápida. Finalmente cabe mencionar que el tamaño del convertidor es de 10bits, y necesitamos solo la parte mas alta ya que si no, obtendremos una señalque re circulará en los mismos valores 4 veces.

    Materiales:

    Circuito de la practica 4

    Potenciómetro de 10Kohms

    Diagrama:

    Realizar el circuito de la practica 4 conectando los dispositivos de adquisicióncomo en la práctica del convertidor.

    Código C

    Programa principal.

    /** Project name:

    HIDtest2 (USB HID Read & Write Test)

    * Copyright:

    (c) MikroElektronika, 2005-2008

    * Revision History:

    20050502:

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    35/70

    35

    - initial release;

    * Description:

    This example establishes connection with the HID terminal that is active

    on the PC. Upon connection establishment, the HID Device Name willappear

    in the respective window. The character that user sends to PIC from the HID

    terminal will be re-sent back to user.

    * Test configuration:

    MCU: PIC18F4550

    http://ww1.microchip.com/downloads/en/DeviceDoc/39632D.pdf

    Dev.Board: EasyPIC6

    http://www.mikroe.com/en/tools/easypic6/

    Oscillator: HS 8.000 MHz (USB osc. is raised with PLL to 48.000MHz)

    Ext. Modules: on-board USB-HID

    http://www.mikroe.com/pdf/easypic6/easypic6_manual_v100.pdf#page14

    SW: mikroC PRO for PIC

    http://www.mikroe.com/en/compilers/mikroc/pro/pic/

    * NOTES:

    (*) Be VERY careful about the configuration flags for the 18F4550 - there's

    so much place for mistake!

    - Place jumpers J12 in the right position

    */

    unsigned char k;

    unsigned char userWR_buffer[64], userRD_buffer[64];

    unsigned int temp_res;

    const char *text = "MIKROElektronika Compilers ER \r\n";

    //*****************************************************************************************

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    36/70

    36

    // Main Interrupt Routine

    //*****************************************************************************************

    void interrupt()

    {

    HID_InterruptProc();

    }

    //****************************************************************************

    //*****************************************************************************************

    // Initialization Routine

    //****************************************************************************

    void Init_Main()

    {

    //--------------------------------------

    // Disable all interrupts

    //--------------------------------------INTCON = 0; // Disable GIE, PEIE, TMR0IE,INT0IE,RBIE

    INTCON2 = 0xF5;

    INTCON3 = 0xC0;

    RCON.IPEN = 0; // Disable Priority Levels on interrupts

    PIE1 = 0;

    PIE2 = 0;

    PIR1 = 0;

    PIR2 = 0;

    ADCON1 |= 0x00; // Configure all ports with analog functionas digital (0X0F - Valor previo)

    CMCON |= 7; // Disable comparators

    //--------------------------------------

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    37/70

    37

    // Ports Configuration

    //--------------------------------------

    TRISA = 0xFF;

    TRISB = 0xFF;

    TRISC = 0xFF;

    TRISD = 0;

    TRISE = 0x07;

    LATA = 0;

    LATB = 0;

    LATC = 0;

    LATD = 0;

    LATE = 0;

    //--------------------------------------

    // Clear user RAM

    // Banks [00 .. 07] ( 8 x 256 = 2048 Bytes )//--------------------------------------

    }

    //****************************************************************************

    // Main Program Routine

    //****************************************************************************

    void main() {

    unsigned char i, ch;

    Init_Main();

    HID_Enable(&userRD_buffer, &userWR_buffer);

    Delay_ms(1000); Delay_ms(1000);

    while (1) {

    k = HID_Read();

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    38/70

    38

    i = 0;

    while (i < k) {

    ch = userRD_buffer[i];

    temp_res = ADC_read(2);

    PORTD = temp_res>> 2;

    userWR_buffer[0] = temp_res>> 2;

    while (!HID_Write(&userWR_buffer, 1)) ;

    i++;

    }

    }

    HID_Disable();

    }

    //****************************************************************************

    Programacion en Labview:

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    39/70

    39

    Conclusión:

    Ahora vemos un mejor resultado con el muestreo de nuestros datos adquiridosdel potenciómetro, eso se debe al protocolo de comunicación, con estopodemos ver la practicidad del USB.

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    40/70

    40

    Práctica 7 Convertidor analógico digital 1 canal, 10 bitspor USB.Objetivo:

    Realizaremos la misma práctica de conversión a 10 bits realizando lacomunicación USB en vez de la serial.

    Introducción:

    Vimos la facilidad de pasar de un protocolo a otro, gracias a la ayuda dellenguaje C y por la herramienta Labview, ahora seguimos nuestro pasorealizando la práctica de convertidor analógico digital a 10 bits.

    Material:

    El mismo circuito de la practica 6 agregando dos leds mas para ver laconversión a 10 bits.

    Diagrama.

    La misma conexión de la practica anterior solo agregando dos leds mas comoen la practica del conversor comunicación serial.

    Código en C.

    /*

    * Project name:

    HIDtest2 (USB HID Read & Write Test)

    * Copyright:

    (c) MikroElektronika, 2005-2008

    * Revision History:

    20050502:

    - initial release;

    * Description:

    This example establishes connection with the HID terminal that is active

    on the PC. Upon connection establishment, the HID Device Name will

    appearin the respective window. The character that user sends to PIC from the HID

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    41/70

    41

    terminal will be re-sent back to user.

    * Test configuration:

    MCU: PIC18F4550

    http://ww1.microchip.com/downloads/en/DeviceDoc/39632D.pdf

    Dev.Board: EasyPIC6

    http://www.mikroe.com/en/tools/easypic6/

    Oscillator: HS 8.000 MHz (USB osc. is raised with PLL to 48.000MHz)

    Ext. Modules: on-board USB-HID

    http://www.mikroe.com/pdf/easypic6/easypic6_manual_v100.pdf#page14

    SW: mikroC PRO for PIC

    http://www.mikroe.com/en/compilers/mikroc/pro/pic/

    * NOTES:

    (*) Be VERY careful about the configuration flags for the 18F4550 - there's

    so much place for mistake!

    - Place jumpers J12 in the right position

    */

    unsigned char k;

    unsigned char userWR_buffer[64], userRD_buffer[64];

    unsigned int temp_res;

    const char *text = "MIKROElektronika Compilers ER \r\n";

    //*****************************************************************************************

    // Main Interrupt Routine

    //*****************************************************************************************

    void interrupt()

    {

    HID_InterruptProc();

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    42/70

    42

    }

    //*****************************************************************************************

    //*****************************************************************************************

    // Initialization Routine

    //*****************************************************************************************

    void Init_Main()

    {

    //--------------------------------------

    // Disable all interrupts

    //--------------------------------------

    INTCON = 0; // Disable GIE, PEIE, TMR0IE,INT0IE,RBIE

    INTCON2 = 0xF5;

    INTCON3 = 0xC0;

    RCON.IPEN = 0; // Disable Priority Levels on interrupts

    PIE1 = 0;PIE2 = 0;

    PIR1 = 0;

    PIR2 = 0;

    ADCON1 |= 0x00; // Configure all ports with analog functionas digital (0X0F - Valor previo)

    CMCON |= 7; // Disable comparators

    //--------------------------------------

    // Ports Configuration

    //--------------------------------------

    TRISA = 0xFF;

    TRISB = 0;

    TRISC = 0xFF;

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    43/70

    43

    TRISD = 0;

    TRISE = 0x07;

    LATA = 0;

    LATB = 0;

    LATC = 0;

    LATD = 0;

    LATE = 0;

    //--------------------------------------

    // Clear user RAM

    // Banks [00 .. 07] ( 8 x 256 = 2048 Bytes )

    //--------------------------------------

    }

    //*****************************************************************************************

    //*****************************************************************************************

    // Main Program Routine//*****************************************************************************************

    void main() {

    unsigned char i, ch, ch2;

    Init_Main();

    HID_Enable(&userRD_buffer, &userWR_buffer);

    Delay_ms(1000); Delay_ms(1000)

    while (1) {

    k = HID_Read();

    i = 0;

    while (i < k) {

    ch = userRD_buffer[i];

    if (ch == 0X01) {

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    44/70

    44

    temp_res = ADC_read(2);

    PORTD = temp_res;

    userWR_buffer[0] = temp_res;

    }

    Delay_ms(7);

    ch2 = userRD_buffer[i];

    if (ch2 == 0x08) {

    PORTB = temp_res >> 8;

    userWR_buffer[0] = temp_res >> 8;

    }

    while (!HID_Write(&userWR_buffer, 1)) ;

    i++;

    }

    }

    HID_Disable();}

    //*****************************************************************************************

    Programación en Labview:

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    45/70

    45

    Conclusión:

    La conversión a 10 bits nos da mejor respuesta debido a la resolución. Lo quese observo en la practica fueron perturbaciones debido al ruido entregado delmismo potenciómetro.

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    46/70

    46

    Práctica 8. Convertidor analógico digital de 3 canales a8 bits.Objetivo.

    Profundizar mas en el protocolo USB usando lenguaje C y la herramientaLabview para realizar un manejo de mayor cantidad de datos.

    Introducción.

    Llevaremos a la práctica los conocimientos obtenidos al programar el protocoloserie, ahora en un protocolo más rápido y eficaz.

    Materiales:

    Realizar las conexiones de la práctica de comunicación serie convertidoranalógico conectando para realizar la comunicación serie como en la primerpractica.

    Código en C.

    /*

    * Project name:

    HIDtest2 (USB HID Read & Write Test)

    * Copyright:

    (c) MikroElektronika, 2005-2008

    * Revision History:

    20050502:

    - initial release;

    * Description:

    This example establishes connection with the HID terminal that is active

    on the PC. Upon connection establishment, the HID Device Name willappear

    in the respective window. The character that user sends to PIC from the HID

    terminal will be re-sent back to user.

    * Test configuration:

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    47/70

    47

    MCU: PIC18F4550

    http://ww1.microchip.com/downloads/en/DeviceDoc/39632D.pdf

    Dev.Board: EasyPIC6

    http://www.mikroe.com/en/tools/easypic6/

    Oscillator: HS 8.000 MHz (USB osc. is raised with PLL to 48.000MHz)

    Ext. Modules: on-board USB-HID

    http://www.mikroe.com/pdf/easypic6/easypic6_manual_v100.pdf#page14

    SW: mikroC PRO for PIC

    http://www.mikroe.com/en/compilers/mikroc/pro/pic/

    * NOTES:

    (*) Be VERY careful about the configuration flags for the 18F4550 - there's

    so much place for mistake!

    - Place jumpers J12 in the right position

    */

    unsigned char k;

    unsigned char userWR_buffer[64], userRD_buffer[64];

    unsigned int temp_res, temp_res1, temp_res2;

    const char *text = "MIKROElektronika Compilers ER \r\n";

    //*****************************************************************************************

    // Main Interrupt Routine

    //*****************************************************************************************

    void interrupt()

    {

    HID_InterruptProc();

    }

    //*****************************************************************************************

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    48/70

    48

    //*****************************************************************************************

    // Initialization Routine

    //*****************************************************************************************

    void Init_Main()

    {

    //--------------------------------------

    // Disable all interrupts

    //--------------------------------------

    INTCON = 0; // Disable GIE, PEIE, TMR0IE,INT0IE,RBIE

    INTCON2 = 0xF5;

    INTCON3 = 0xC0;

    RCON.IPEN = 0; // Disable Priority Levels on interrupts

    PIE1 = 0;

    PIE2 = 0;

    PIR1 = 0;PIR2 = 0;

    ADCON1 |= 0x00; // Configure all ports with analog functionas digital (0X0F - Valor previo)

    CMCON |= 7; // Disable comparators

    //--------------------------------------

    // Ports Configuration

    //--------------------------------------

    TRISA = 0xFF;

    TRISB = 0;

    TRISC = 0xFF;

    TRISD = 0;

    TRISE = 0x07;

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    49/70

    49

    LATA = 0;

    LATB = 0;

    LATC = 0;

    LATD = 0;

    LATE = 0;

    //--------------------------------------

    // Clear user RAM

    // Banks [00 .. 07] ( 8 x 256 = 2048 Bytes )

    //--------------------------------------

    }

    //*****************************************************************************************

    // Main Program Routine

    //*****************************************************************************************

    void main() {

    unsigned char i, ch, ch2, ch3 ;Init_Main();

    HID_Enable(&userRD_buffer, &userWR_buffer);

    Delay_ms(1000); Delay_ms(1000);

    while (1) {

    k = HID_Read();

    i = 0;

    while (i < k) {

    ch = userRD_buffer[i];

    if (ch == 0X01) {

    temp_res = ADC_read(0);

    userWR_buffer[0] = temp_res>> 2;

    }

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    50/70

    50

    Delay_ms(7);

    ch2 = userRD_buffer[i];

    if (ch2 == 0x08) {

    temp_res1 = ADC_read(1);

    userWR_buffer[0] = temp_res1>> 2;

    }

    Delay_ms(7);

    ch3 = userRD_buffer[i];

    if (ch3 == 0x0F) {

    temp_res2 = ADC_read(2);

    userWR_buffer[0] = temp_res2>> 2;

    }

    while (!HID_Write(&userWR_buffer, 1)) ;

    i++;

    }}

    HID_Disable();

    }

    Programación con labview:

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    51/70

    51

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    52/70

    52

    Conclusión:

    Podemos ver la cantidad de datos y la velocidad con la cual se puede trabajarcon el protocolo USB.

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    53/70

    53

    Práctica 9. Convertidor analógico digital 1 canal, 10 bitscon filtro.Objetivo:

    Ahora vamos a introducir un filtro para obtener una mejor respuesta a la señalde salida de nuestro convertidor de 10 bits, el filtro se trabajara en labview.

    Introducción:

    Como pudimos ver en la respuesta de la señal entrega por nuestropotenciómetro obtuvimos ruido, ahora nuestro propósito es eliminar ese ruidoutilizando un filtro para lograr una mejor fidelidad.

    Material:

    Circuito de práctica 7

    Diagrama:

    El circuito se usara sin cambios.

    Código en C.

    También usaremos el mismo código que en la práctica 7.

    Programación en Labview:

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    54/70

    54

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    55/70

    55

    Conclusión:

    Al llevar a cabo esta práctica podemos ver el cambio entre la señal de entrada

    en la práctica anterior a la actual esto gracias al filtro. Nos damos cuenta queun filtro no en necesariamente colocar un capacitor y una resistencia o usandoopam, sino que también lo podemos realizar mediante software.

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    56/70

    56

    Práctica 10. Convertidor analógico digital 3 canales conguardado de datos.Objetivo.

    Ahora sacaremos una de las muchas funciones de Labview para ircompletando nuestras prácticas y así obtener mayor conocimiento en laprogramación.

    Introducción.

    Agregar esta característica a la tarjeta es importante, ya que los valores de lossensores pueden ser guardados en un archivo y así ser revisados más tarde.

    No sólo eso, también podemos hacer operaciones, promedios, filtros y todo elanálisis que se necesite y lo hacemos con valores muy exactos, continuos yfieles.

    Material:

    Circuito de práctica 8.

    Diagrama:

    Seguiremos usando el armado del circuito anterior

    Código en C.

    Seguiremos usando el mismo código de programación.

    Programación en Labview:

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    57/70

    57

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    58/70

    58

    Conclusión:

    Usamos una herramienta de Labview para guardar los datos obtenidos de lamedición, así vamos conociendo mas nuestra interfaz.

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    59/70

    59

    Práctica 11. Control de motor reversible.Objetivo.

    Usando los conocimientos obtenidos hasta el momento para realizar el controlde un motor usando lógica PLC.

    Introducción.

    Usar la metodología de programación de escalera para lograr el giro del motor.

    Material:

    Circuito práctica 5.

    LM293B

    Motor de corriente directa a 5volts.

    Push Button 3

    1 Fusible.

    Código en C.

    /*

    * Project name:

    HIDtest2 (USB HID Read & Write Test)

    * Copyright:

    (c) MikroElektronika, 2005-2008

    * Revision History:

    20050502:

    - initial release;

    * Description:

    This example establishes connection with the HID terminal that is active

    on the PC. Upon connection establishment, the HID Device Name willappear

    in the respective window. The character that user sends to PIC from the HID

    terminal will be re-sent back to user.

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    60/70

    60

    * Test configuration:

    MCU: PIC18F4550

    http://ww1.microchip.com/downloads/en/DeviceDoc/39632D.pdf

    Dev.Board: EasyPIC6

    http://www.mikroe.com/en/tools/easypic6/

    Oscillator: HS 8.000 MHz (USB osc. is raised with PLL to 48.000MHz)

    Ext. Modules: on-board USB-HID

    http://www.mikroe.com/pdf/easypic6/easypic6_manual_v100.pdf#page14

    SW: mikroC PRO for PIC

    http://www.mikroe.com/en/compilers/mikroc/pro/pic/

    * NOTES:

    (*) Be VERY careful about the configuration flags for the 18F4550 - there's

    so much place for mistake!

    - Place jumpers J12 in the right position

    */

    unsigned char k;

    unsigned char userWR_buffer[64], userRD_buffer[64];

    const char *text = "MIKROElektronika Compilers ER \r\n";

    //*****************************************************************************************

    // Main Interrupt Routine

    //*****************************************************************************************

    void interrupt()

    {

    HID_InterruptProc();

    }

    //*****************************************************************************************

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    61/70

    61

    //*****************************************************************************************

    // Initialization Routine

    //*****************************************************************************************

    void Init_Main()

    {

    //--------------------------------------

    // Disable all interrupts

    //--------------------------------------

    INTCON = 0; // Disable GIE, PEIE, TMR0IE,INT0IE,RBIE

    INTCON2 = 0xF5;

    INTCON3 = 0xC0;

    RCON.IPEN = 0; // Disable Priority Levels on interrupts

    PIE1 = 0;

    PIE2 = 0;

    PIR1 = 0;PIR2 = 0;

    ADCON1 |= 0x0F; // Configure all ports with analog functionas digital

    CMCON |= 7; // Disable comparators

    //--------------------------------------

    // Ports Configuration

    //--------------------------------------

    TRISA = 0xFF;

    TRISB = 0xFF;

    TRISC = 0xFF;

    TRISD = 0;

    TRISE = 0x07;

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    62/70

    62

    LATA = 0;

    LATB = 0;

    LATC = 0;

    LATD = 0;

    LATE = 0;

    //--------------------------------------

    // Clear user RAM

    // Banks [00 .. 07] ( 8 x 256 = 2048 Bytes )

    //--------------------------------------

    }

    //*****************************************************************************************

    //*****************************************************************************************

    // Main Program Routine

    //*****************************************************************************************

    void main() {unsigned char i, ch, ch1;

    Init_Main();

    HID_Enable(&userRD_buffer, &userWR_buffer);

    Delay_ms(1000); Delay_ms(1000);

    while (1) {

    k = HID_Read();

    i = 0;

    while (i < k) {

    ch = userRD_buffer[i];

    PORTD = ch;

    ch1 = PORTB;

    userWR_buffer[0] = ch1;

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    63/70

    63

    while (!HID_Write(&userWR_buffer, 1)) ;

    i++;

    }

    }

    HID_Disable();

    }

    //*****************************************************************************************

    Programación en labview:

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    64/70

    64

    Resultados.

    Podemos ver lo poderoso que es saber usar una herramienta como el Labviewpara poder controlar un motor usando la lógica de escalera, claro este gracias aacoplar al pic con un programa en lenguaje c usando mikroc.

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    65/70

    65

    Práctica 12. Medición de un potenciómetro y de ungenerador de funciones por medio de la tarjeta USB-

    6008.Objetivo.

    Aprender a usar una nueva interfaz para conocer la diferencia de programaciónasi como todas las utilidades de la tarjeta.

    Introducción.

    Las tarjetas DAQ NI USB-6008 y NI USB-6009 tienen capacidades multifuncióncon ocho canales de entrada analógica 12 ó 14 bits, dos salidas analógicas, 12

    líneas E/S digitales y un contador. Ambos dispositivos funcionan con lacorriente del bus USB así que no necesitan una fuente de energía externa paratrabajar. Incluyen terminales de tornillo para extraíbles para conectarse porseñal directa, una referencia de tensión de abordo para suministrar energía adispositivos y sensores externos, una capa diseñada en cuatro capas parareducir el ruido y aumentar la precisión, así como para proteger contrasobretensión en las líneas de entrada analógica de hasta ±35 V.

    Material:

    USB-6008

    Potenciómetro

    Generador de funciones.

    Diagrama:

    Colocaremos la salida del potenciómetro a la salida AI0 y lo alimentaremos conla fuente incluida en la tarjeta. El generador de funciones entrara en AI1+ y AI1-para usar el modo diferencial.

    Programacion en Labview:

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    66/70

    66

    Conclusion:

    Conocer las interfaces realizadas por national instruments y ver la diferencia depracticidad entre la daq profesional o una hecha por nosotros.

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    67/70

    67

    Práctica 13. Frecuencímetro.Objetivo.

    Con la tarjeta de National construir un dispositivo capaz de medir la frecuenciade la señal de entrada.

    Introducción.

    Un frecuencímetro es un instrumento que sirve para medir la frecuencia , contando el número de repeticiones de una onda en un intervalo de tiempo,mediante el uso de un contador que acumula el número de periodos. Dado quela frecuencia se define como el número de eventos de una clase particularocurridos en un período, es generalmente sencilla su medida.Hardware.

    Materiales.

    USB 6008

    Generador de funciones.

    Diagrama.

    Conectaremos el generador de funciones a la entrada diferencial AI1.

    Programación en Labview

    http://es.wikipedia.org/wiki/Frecuenciahttp://es.wikipedia.org/wiki/Frecuenciahttp://es.wikipedia.org/wiki/Frecuenciahttp://es.wikipedia.org/wiki/Frecuencia

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    68/70

    68

    Conclusión:

    Vemos la facilidad de procesar una señal con la ayuda de la tarjeta USB 6008realizando un frecuencímetro acercándonos al comportamiento de unosciloscopio.

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    69/70

    69

    Práctica 14. Control de un sensor de temperatura conindicador de correo electrónico.Objetivo:

    Diseñar y construir un sistema telemétrico con el fin de monitorear latemperatura, checando los datos obtenidos, si el dato es mayor a latemperatura que se exponga enviara un correo avisando que se a llegado allímite y parara el proceso.

    Introducción.

    En esta práctica veremos otra aplicación de Labview, la cual es poder mandar

    un correo a un servidor.Material:

    USB-6008

    LM35

    Diagrama:

    Alimentar el sensor con la tarjeta USB-6008

    La salida conectarla a AI0, en modo SEF.

    Block Diagram

  • 8/17/2019 Comunicacion Serial Pic 18f4550

    70/70

    Conclusión:

    Vemos la facilidad de hacer un sistema telemétrico usando la interfaz USB6008 y la herramienta de Labview para censar la temperatura y mandar uncorreo con los datos obtenidos en la medición.