Vous êtes sur la page 1sur 7

UNIVERSIDAD MAYOR REAL Y PONTIFICIA DE

SAN FRANCISCO XAVIER DE CHUQUISACA


FACULTAD DE INGENIERÍA MECÁNICA-ELÉCTRICA-
ELECTRÓNICA

INGENIERÍA ELECTRÓNICA

Universitarios: Cardozo Gonzales José Luis


Medrano Daza Javier
PRACTICA: Entrada / Salida de
microcontroladores basados en USB
Fecha de Entrega: 4 de julio de 2019
Materia: Microcontroladores

Sucre-Bolivia
PROYECTO 8.2 — Entrada / Salida de microcontroladores basados en USB
1. Descripción del proyecto.

Este proyecto comunicación bidireccional, los datos que se enviarán en PORTB se


enviaran al microcontrolador. Además, los datos PORTB se reciben desde el
microcontrolador y se muestran en la PC.
La PC envía dos comandos al microcontrolador:
El comando P = nT solicita al microcontrolador que envíe el byte de datos n a PORTB.
Comando P = ?? solicita al microcontrolador que lea sus datos PORTB y los envíe como
un byte a la PC. La PC luego muestra estos datos en la pantalla. El microcontrolador envía
sus datos en el formato familiar P = nT.
El programa Visual Basic utilizado en esta sección se basa en la utilidad USB conocida
como EasyHID USB Wizard, desarrollada por Mecanique, y se puede descargar de forma
gratuita desde su sitio web (www.mecanique.co.uk). EasyHID está diseñado para
funcionar con USB 2.0, y no es necesario desarrollar un controlador, ya que el sistema
operativo XP se entrega con un controlador USB basado en HID. Esta utilidad genera
códigos de plantilla de Visual Basic, Visual C ++ o Borland Delphi para el final de PC de
una aplicación USB utilizando una interfaz de dispositivo de tipo HID. Además, la
utilidad puede generar un código de plantilla USB para los microcontroladores
PIC18F4550 y similares, según los lenguajes de programación Proton Development Suite
(www.crownhill.co.uk), Swordish PIC Basic o PicBasic Pro (www.melabs.com). Los
códigos generados se pueden expandir con el código de usuario para implementar la
aplicación requerida.
En este proyecto se usa un solo formulario que se muestra a continuación:
La parte superior del formulario contempla el envío de datos al PORTB del
microcontrolador. También se colocan en el formulario un cuadro de texto y un botón de
comando llamado HACER CLIC PARA RECIBIR. Cuando se presiona el botón, la PC
envía el comando P = ?? Al microcontrolador. El microcontrolador lee sus datos PORTB
y los envía en formato P = nT a la PC donde se muestra en el cuadro de texto.
El programa envía el número ingresado al microcontrolador como un paquete que consta
de cuatro caracteres en el siguiente formato:

donde el carácter P indica el inicio de los datos, n es el byte que se enviará a PORTB y T
es el carácter de terminación.
Por ejemplo, si se deben establecer los bits 3 y 4 de PORTB, es decir, PORTB =
"00011000", entonces el programa de Visual Basic envía el paquete P = 24T (el número
24 se envía como un solo byte binario y no como dos bytes ASCII) al microcontrolador
a través del enlace USB. La parte inferior del formulario muestra el estado de la conexión.

El programa verifica el formato del comando recibido. Para p = ?? escriba comandos,


PORTB se configura como entradas, los datos PORTB se leen en Write_buffer [2], y
Write_buffer se envían a la PC, donde Write_buffer [0] = "P", Write_buffer [1] = "=", y
Write_buffer [3 ] = "T" como sigue:
Para los comandos de tipo P = nT, PORTB se configura como salidas y Read_buffer [2]
se envía a PORTB de la siguiente manera:

El reloj del microcontrolador debe configurarse como en el Proyecto 8.1 (es decir, tanto
la CPU como el módulo USB deben tener relojes de 48MHz).

2. Hardware del proyecto.

El hardware del proyecto consta de un microcontrolador PIC18f4550, un conector


USB, cristal de cuarzo de 8MHz, capacitores cerámicos de 22pF, LEDs,
resistencias de 330 Ohm

3. PDL del proyecto.

Rutina de servicio de interrupción


Inicio
Mantener actividad
Recargar TMR0L
Reactivar interrupciones.
Fin
Programa principal
Inicio
Establecer los registros de interrupción en los valores
predeterminados de encendido.
Habilitar puerto USB.
Leer desde el puerto USB
Bucle indefinido
Leer datos del buffer
Si los datos en los buffers son P=??
Escribir el valor del puerto B en los buffers
Sino, mostrar el dato que se envió al microcontrolador en el
puerto B
Fin
Fin

4. Código y Descripción.

#include "C:\Program
Files\Mikroelektronika\mikroC\Examples\EasyPic4\extra_examples\HIDlibrary\
USBdsc.c"
unsigned char Read_buffer[64];
unsigned char Write_buffer[64];
unsigned char num,i;
//
// Rutina de servicio del temporizador de interrupción
//
void interrupt()
{
HID_InterruptProc(); // Keep alive
TMR0L = 100; // Reload TMR0L
INTCON.TMR0IF = 0; // Re-enable TMR0 interrupts
}
//
// Inicia el programa principal
//
void main()
{
ADCON1 = 0xFF; // Set PORTB to digital I/O
TRISB = 0; // Set PORTB to outputs
PORTB = 0; // PORTB all 0s to start with
//
// Establecer los registros de interrupción en los valores predeterminados de encendido
// Desabilita todas las interrupciones
//
INTCON=0;
INTCON2=0xF5;
INTCON3=0xC0;
RCON.IPEN=0;
PIE1=0;
PIE2=0;
PIR1=0;
PIR2=0;
//
// Configurar el temporizador 0 para interrupciones de 20ms. Establece preescala en 256
// y cargue TMR0L a 156 para que el intervalo de tiempo para el temporizador
// las interrupciones a 8MHz son 256 ∗ 156 ∗ 0.5 = 20ms
//
// El temporizador está en modo de 8 bits por defecto
//
T0CON = 0x47; // Prescaler = 256
TMR0L = 100; // Timer count is 256-156 = 100
INTCON.TMR0IE = 1; // Enable T0IE
T0CON.TMR0ON = 1; // Turn Timer 0 ON
INTCON = 0xE0; // Enable interrupts
//
// Habilitar puerto USB
//
Hid_Enable(&Read_buffer, &Write_buffer);
Delay_ms(1000);
Delay_ms(1000);
//
// Leer desde el puerto USB. El número de bytes leídos está en num.//
for(;;) // do forever
{
num=0;
while(num != 4)
{
num = Hid_Read();
}
if(Read_buffer[0] == 'P' && Read_buffer[1] == '=' &&
Read_buffer[2] == '?' && Read_Buffer[3] == '?')
{
TRISB = 0xFF;
Write_buffer[0] = 'P'; Write_buffer[1] = '=';
Write_buffer[2] = PORTB; Write_buffer[3] = 'T';
Hid_Write(&Write_buffer,4);
}
else
{
if(Read_buffer[0] == 'P' && Read_buffer[1] == '=' &&
Read_buffer[3] == 'T')
{
TRISB = 0;
PORTB = Read_buffer[2];
}
}
}
Hid_Disable();
}
5. Simulación del proyecto.

Vous aimerez peut-être aussi