Vous êtes sur la page 1sur 8

UNIVERSIDAD POLITÉCNICA SALESIANA SISTEMAS MICROPROCESADOS II

Fecha de entrega: 11/07/2018

COMUNICACIÓN I2C Y USB


Ñacata Paucar Alex David
e-mail: anacata@est.ups.edu.ec
Bryan David Sanches Pozo
e-mail: bsanches@est.ups.edu.ec

RESUMEN: Pila: bloque de 31 palabras de 21 bits


En el presente informe se ilustra los conceptos teóricos
Memoria de configuración: Memoria en la que se incluyen
de la comunicación I2C y USB mediante la utilización del
los bits de configuración (12 bytes de memoria flash) y los
PIC 18f4550. registros de identificación (2bytes de memoria de solo
PALABRAS CLAVE: lectura).
COMUNICACIÓN, I2C, USB PIC 18f4550.

1 OBJETIVOS

1.1 Objetivo General:

 Realizar una aplicación en la cual se implemente


la comunicación I2C entre dos PICs 18F4550 y
USB entre un pic y un computador, aplicando la
debida programación para su buen
funcionamiento con la ayuda de las librerías
existentes en el software de programación Mikro
C.

1.2 Objetivos Específicos:


Figura 1. Distribución de pines en el PIC 18F4550
 Diseñar e implementar un diagrama
esquemático para así realizar las 2.2 COMUNICACION I2C EN PIC18F455
conexiones necesarias en el protoboard.
El bus I2C permite el intercambio de información entre
muchos dispositivos a una velocidad aceptable, de unos
 Utilizar las interrupciones del pic para
100 Kbits por segundo, aunque hay casos especiales en
facilitar la programación cuando se realice
los que el reloj llega hasta los 3,4 MHz. La metodología
la comunicación entre los pics. de comunicación de datos del bus I2C es en serie y
2 MARCO TEÓRICO sincrónica. Una de las señales del bus marca el tiempo
(pulsos de reloj) y la otra se utiliza para intercambiar
datos.
2.1 PIC 18F4550
El primer paso que se realización de este taller fue
2.2.1 CONEXIONES PARA LA
conocer las características generales del PIC18F4550 las
cuales son las siguientes: COMUNICACIÓN I2C Y DESCRIPCIÓN
2.1.1 Memorias del microcontrolador PIC DE LAS SEÑALES
18F4550
Descripción de señales:
Memoria de programa: memoria flash interna de 32.768
bytes.
 SCL (System Clock) es la línea de los
Memoria RAM de datos: memoria RAM interna de 2048
pulsos de reloj que sincronizan el sistema.
bytes en la que están incluidos los registros de función
especial.  SDA (System Data) es la línea por la que se
mueven los datos entre los dispositivos.
Memoria EEPROM de datos: memoria no volátil de 256
bytes.

1
UNIVERSIDAD POLITÉCNICA SALESIANA SISTEMAS MICROPROCESADOS II

Fecha de entrega: 11/07/2018

 GND (Masa) común de la interconexión en la siguiente imagen se muestra cómo será la


entre todos los dispositivos "enganchados" conexión para la comunicación I2C PIC, al ser
al bus. utilizado el PIC como maestro, con otros
Las líneas SDA y SCL son del tipo drenaje abierto, es dispositivos capaces de comunicarse con el
decir, un estado similar al de colector abierto, pero protocolo I2C.[3]
asociadas a un transistor de efecto de campo (o FET). Se
deben polarizar en estado alto (conectando a la
alimentación por medio de resistores "pull-up") lo que
define una estructura de bus que permite conectar en
paralelo múltiples entradas y salidas. [3]

2.2.2 La comunicación i2c se realiza de la


siguiente manera

 La señal del pin SDA del maestro pasa de un alto Fig2.Comunicacion I2


a un bajo mientras la señal su pin SCL esté a un
alto, esto es el inicio de la comunicación I2C, al
iniciar la comunicación se genera una señal de 2.3 COMUNICACION USB EN PIC18F455
reloj por el pin SCL del maestro y se empieza a
enviar los datos por el pin SDA en grupos de 8
Para realizar sencilla y fácilmente una transferencia de
bits o un byte, que es lo mismo. [3] datos utilizando para ello el bus USB para lo cual
 El maestro enviará primero la dirección de tenemos implementado el protocolo HID.
identificación del esclavo con el que se quiera
comunicar junto con el bit de escritura lectura, si El Bus Serie universal (USB) es una de las interfaces
el maestro quiere enviar o escribir un dato este más comunes utilizadas hoy en día en productos
bit será 0, si el maestro quiere leer o recibir un electrónicos de consumo, como ordenadores, cámaras,
GPS, MP3, juegos, módems, impresoras y escáners,
dato este bit será 1, la dirección del esclavo solo por nombrar algunos pocos.
normalmente será de 7 bits aunque también hay
direcciones de 10bits. [3]
 Cada vez que el esclavo reciba un byte el El Bus USB fue desarrollado originalmente por Compaq,
esclavo responderá enviando un bit en bajo o 0 Microsoft, Intel y NEC, y más tarde también por Hewlett-
al maestro para indicar que se ha establecido la Packard, Lucent, y Philips. Estas empresas formaron
eventualmente nonprofit corporation USB Implementers
comunicación, este es un bit de confirmación y
Forum Inc. para organizar el desarrollo y la publicación
se le llama ACK, si la comunicación no se de las especificaciones USB.
establece el valor del bit ACK será un 1. [3]
 Luego el maestro enviará el dato si lo que se
quiere es enviar o escribir un dato en el registro
del esclavo, el esclavo responderá enviando al
maestro el bit de confirmación ACK; pero si lo
que se quiere es que el maestro recibirá o lea
algún dato desde algún registro del esclavo,
ocurrirá que si la recepción es correcta es
maestro enviará al esclavo el bit de confirmación
ACK.[3]
 Por último y para finalizar la comunicación la
señal del pin SDA pasará de un bajo a un alto Fig3.Comunicacion USB
mientras la señal de reloj en el pin SCL este en
un alto, en ese momento se deja de generar la
señal de reloj y la comunicación habrá terminado 3. DISEÑO Y CONSTRUCCION
[3]
 Las conexiones tienen que hacerse de tal
manera que los nombres de los pines coincidan,

2
UNIVERSIDAD POLITÉCNICA SALESIANA SISTEMAS MICROPROCESADOS II

Fecha de entrega: 11/07/2018

Siguiendo el diagrama vemos que los 4 MHz obtenidos se 3.2 PREPARACION DEL PROYECTO
transforman en 96MHz que a continuación son divididos
por 2 por lo que se quedan en 48 MHz. Para la implementación de este taller en el protoboard se
Con la configuración del fuse USBDIV1 estamos
indicando que estos 48MHz obtenidos del PLL son los utilizó los siguientes materiales:
que vamos a utilizar para el módulo USB. Aclarar que  Una pantalla LCD 2x16
podríamos emplear directamente la frecuencia de un  4 microcontroladores PIC 18F4550
cristal de 48MHz con NOUSBDIV.  Una fuente DC variable
Configurado el clock del módulo USB, debemos ahora  1 Módulo grabador de PIC
hacerlo con el clock del resto de módulos del procesador.  1 teclado matricial de 4x4
Igual que para el USB obtenemos el clock del módulo  12 pulsadores
PLL. Si nos fijamos en el diagrama partimos de los 96  8 resistencias de 330 ohm
MHz conseguidos con los 4 MHz procedentes del PLL.  13 resistencias de 10 k ohm
Esta frecuencia la vamos a dividir por un valor  8 capacitores cerámicos de 22 pF
configurado por CPUDIV. Podemos trabajar a frecuencias  Cables de conexión y Protoboard
diferentes a la del módulo USB pero en este caso vamos  2 cristal de cuarzo de 4 MHz
a emplear la misma. Para ello, para obtener 48MHz  8 Diodos led
debemos dividir por 2 por lo que
 1 Buzzer
configuraremos CPUDIV1.
 1 pantalla lcd
Si somos observadores vemos en el diagrama otro
CPUDIV. ¿Por qué la frecuencia de reloj para el  4 resistencias de 1 k ohm
procesador no nos viene por ahí? La respuesta es que al  1 potenciómetro de 10 k ohm
configurar el fuse HSPLL estamos indicando que  1 puente H L293D
hacemos uso de un cristal con frecuencia superior a 4  1 motor de 5 voltios
MHz (HS) y además que lo hacemos por mediación del
PLL (HSPLL), por lo que ese CPUDIV queda 3.3 CONSTRUCCION DEL PROYECTO
deshabilitado.

Con respecto a los drivers que vamos a emplear van a 1. Realizar el diseño del diagrama de flujo para
ser, por un lado, lógicamente, el correspondiente al PIC entender los circuitos planteados.
18F4550 y el correspondiente a la librería de uso de una 2. Diseñar el circuito en el software Proteus .
clase de dispositivo CDC USB. 3. Programar en el software Micro C el código a ser
utilizado en el PIC 18F4550
4. Cargar el código .hex a la simulación del circuito
en el software Proteus.
5. Grabar el programa en el PIC 18F4550
6. Armar el circuito en el Protoboard con la ayuda
del diagrama simulado en el software Proteus
7. Armar los circuitos de master clear, oscilador.
8. Para el circuito de comunicación en serie
conectar las salidas del maestro del puerto D al
lcd.
9. Para el circuito de comunicación en paralelo se
conectan las salidas del puerto D del maestro a
las entradas del puerto B del esclavo.
10. Para del circuito de comunicación en paralelo se
conectan las salidas del esclavo del puerto D a
Fig4.Diagrama estructurado de comunicación USB
los leds y el motor.
11. Se procede a comprobar el circuito.

FUNCIONAMIENTO I2C
4. ANALISIS Y RESULTADOS
La práctica está dividida en dos partes la primera parte es
el diseño y programación de una comunicación i2c y la 4.1 Descripción y funcionamiento de los pines
segunda parte es el diseño y programación de una empleados en el proyecto.
comunicación USB. Funcionamiento comunicación USB

3
UNIVERSIDAD POLITÉCNICA SALESIANA SISTEMAS MICROPROCESADOS II

Fecha de entrega: 11/07/2018

6. CONCLUSIONES

 El modulo USART (Universal Synchronous


Asynchronous Receiver Transmitter) nos
permite la transmisión y recepción de datos en
serie ya sea con un ordenador trabajando en
modo Full-Duplex asíncrono o con periféricos
trabajando en modo Half-Duplex.(Alex Ñacata)

 La ventaja de la comunicación serie es que


necesita un número más pequeño de líneas de
transmisión que una comunicación paralela que
transmita la misma información. Esta última
necesita tantas líneas de transmisión como la
cantidad de bits que componen la información,
mientras que la primera se puede llevar a cabo
con una sola línea de transmisión. Por otra parte,
surgen una serie de problemas en la transmisión
de un gran número de bits en paralelo, como los
problemas de interferencia o desincronización.
(Bryan Sanchez)

7 RECOMENDACIONES
 Tomar en cuenta la posición de los diodos led y
su respectiva polarización ya sea en lógicas
directa o lógica inversa.
 Al momento de conectar el pic en el grabador
verificar el primer pin se encuentre mirando
hacia la palanca del zif ya que caso contrario
puede quemar el grabador y el pic.

8 REFERENCIAS:
Libros:
[1] F. Valdez, R. Pallas, “Entrada y salida en paralelo”,
Microcontroladores: Fundamentos y aplicaciones con
PIC,Marcobo, Edición 2, Barcelona, España, 2007, Pp
180-184.
Web:
[3] PIC 18F4550, 2013 [Online]
Recuperado en:
http://todoelectrodo.blogspot.com/2013/02/pic-
18f4550.html
[4] Pantalla LCD 16×2 con PIC (Librería en C para
HD44780) , 2014 [Online]
Recuperado en:
https://www.geekfactory.mx/tutoriales/tutoriales-
pic/pantalla-lcd-16x2-con-pic-libreria/

4
UNIVERSIDAD POLITÉCNICA SALESIANA SISTEMAS MICROPROCESADOS II

Fecha de entrega: 11/07/2018

9 ANEXOS:
Anexo A
DIAGRAMA DE FLUJO MAESTRO COMUNICACIÓN PARALELO

SIMULACION COMUNICACIÓN PARALELA

DIAGRAMA DE FLUJO ESCLAVO COMUNICACIÓN PARALELO

PROGRAMACIÓN COMUNICACIÓN PARALELO MAESTRO

5
UNIVERSIDAD POLITÉCNICA SALESIANA SISTEMAS MICROPROCESADOS II

Fecha de entrega: 11/07/2018

PROGRAMACION USB
#include <Built_in.h>
unsigned char Leer_USB[64] absolute 0x500;
unsigned char Escribir_USB[64] absolute 0x540;
unsigned char Reservar_USB[256] absolute 0x400;

void interrupt(){
Usb_Interrupt_Proc(); //Mantiene viva la comunicacion
}

void EntradaAnalogica(){
unsigned analogVal;

analogVal = ADC_get_sample(0);
Escribir_USB[11] = Hi(analogVal);
Escribir_USB[12] = Lo(analogVal);
analogVal = ADC_get_sample(1);
Escribir_USB[13] = Hi(analogVal);
Escribir_USB[14] = Lo(analogVal);
analogVal = ADC_get_sample(2);
Escribir_USB[15] = Hi(analogVal);
Escribir_USB[16] = Lo(analogVal);
analogVal = ADC_get_sample(3);
Escribir_USB[17] = Hi(analogVal);
Escribir_USB[18] = Lo(analogVal);
analogVal = ADC_get_sample(4);
Escribir_USB[19] = Hi(analogVal);
Escribir_USB[20] = Lo(analogVal);
analogVal = ADC_get_sample(5);
Escribir_USB[21] = Hi(analogVal);
Escribir_USB[22] = Lo(analogVal);
analogVal = ADC_get_sample(6);
Escribir_USB[23] = Hi(analogVal);
Escribir_USB[24] = Lo(analogVal);
analogVal = ADC_get_sample(7);
Escribir_USB[25] = Hi(analogVal);
Escribir_USB[26] = Lo(analogVal);

while(!HID_Write(&Escribir_USB, 64));
}

void EntradaDigital(){

Escribir_USB[4] = PORTB;

while(!Hid_write(&Escribir_USB, 64));
}

void main() {
char dato; // Se recibo datos de la PC
TRISA = 255; // Entradas Analogicas
TRISB = 255; // Entradas Digitales
TRISC = 0x00;
PORTC = 0x00;
TRISD = 0x00;
PORTD = 0x00;
ADCON1 = 7; // A0-A7 Analogicos lo demas, son digitales

ADC_Init(); // Iniciales el conversor ADC


PWM1_Init(1500); // PWM 1 1500Hz
PWM2_Init(1500);
PWM1_Set_Duty(0);
PWM2_Set_Duty(0);
PWM1_Start();
PWM2_Start();

HID_Enable(&Leer_USB,&Escribir_USB);

6
UNIVERSIDAD POLITÉCNICA SALESIANA SISTEMAS MICROPROCESADOS II

Fecha de entrega: 11/07/2018

while(1){
EntradaAnalogica();
EntradaDigital();
dato = HID_Read(); // Devuelve el numero de bytes recibidos
if(dato == 1){
dato = 0;
PORTD = 0B01010101; //
DELAY_MS(500);
PORTD = 0B10101010; //
DELAY_MS(500);
PORTD = 0;
}
if(dato == 4){
dato = 0;
PORTD = 0b00000001; //
DELAY_MS(300);
PORTD = 0b00000010; //
DELAY_MS(300);
PORTD = 0b00000100; //
DELAY_MS(300);
PORTD = 0b00001000; //
DELAY_MS(300);
PORTD = 0b00010000; //
DELAY_MS(300);
PORTD = 0b00100000; //
DELAY_MS(300);
PORTD = 0b01000000; //
DELAY_MS(300);
PORTD = 0b10000000; //
DELAY_MS(300);
PORTD = 0;
}
delay_ms(50);
}
}
DIAGRAMA DE FLUJO MAESTRO COMUNICACIÓN SERIE

SIMULACION COMUNICACIÓN USB

7
UNIVERSIDAD POLITÉCNICA SALESIANA SISTEMAS MICROPROCESADOS II

Fecha de entrega: 11/07/2018

Vous aimerez peut-être aussi