Autor Tema: Ayuda expansor de puertos MCP23017  (Leído 4093 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado theworldofdudy

  • PIC10
  • *
  • Mensajes: 4
Ayuda expansor de puertos MCP23017
« en: 29 de Noviembre de 2011, 05:43:19 »
Buenas, Soy Carlos, nuevo aquí.
He leido mucho y me ha ayudado mucho esta web en mi iniciación con el mundo de los PIC, pero sigo siendo un novato en el tema.

Estoy programando un 18F2550 con C18 para realizar el control de mi proyecto de fin de carrera, el problema es que me he encontrado con la dificultad de no tener suficientes salidas digitales.

Navengando por la red encontre que existe la posibilidad de ampliar el numerpo de pines I/O mediante expansores. En este caso el que quiero utilizar es un MCP23017  mediante comunicación I2C. Ambas cosas son nuevas para mí y de ahí mi incompetencia en el asunto.

Todo lo que he encontrado ha sido enfocado para arduino o paraPIC pero con otros lenguajes de programación. En principio mi intención previa para ir aprendiendo es encender varios leds con este expansor, una vez que consiga esto, me fijare nuevas metas. Alguien podría ayudarme??

Mi código es este:

/* File:   Expansión de salidas
 * Author: Carlos Santamaria Garcia
 *
 * Created on 10 de Septiembre de 2011, 9:47
 */
#include <p18f2550.h>
#include <delays.h>
#include <i2c.h>
#include <stdio.h>
#pragma config  PLLDIV = 1, CPUDIV = OSC1_PLL2, FOSC =  XT_XT
#pragma config  FCMEN = OFF, IESO = OFF, PWRT = OFF, BOR = OFF, BORV = 1
#pragma config  VREGEN = OFF, WDT = OFF, WDTPS = 1, CCP2MX = OFF,  PBADEN = OFF
#pragma config  LPT1OSC = OFF, MCLRE = OFF, STVREN = OFF, LVP = OFF, XINST = OFF
#pragma config  DEBUG = OFF, CP0 = OFF, CP1 = OFF, CP2 = OFF, CP3 = OFF
#pragma config  CPB = OFF, CPD = OFF, WRT0 = OFF, WRT1 = OFF, WRT2 = OFF
#pragma config  WRT3 = OFF, WRTC = OFF, WRTB = OFF, WRTD = OFF, EBTR0 = OFF
#pragma config  EBTR1 = OFF, EBTR2 = OFF, EBTR3 = OFF, EBTRB = OFF
 
////////////////////////////////////////////////
//       Prototipos de las funciones         //
//                                                     //
/////////////////////////////////////////////
 
void main (void)
{
 TRISB = 0x00;
 PORTB = 0x00;
 OpenI2C(MASTER, SLEW_OFF);
 SSPADD = 0x27;

 StartI2C();
 IdleI2C();  //El módulo está activo?
 WriteI2C(0x20);
 IdleI2C();
 WriteI2C(0x00); //Elijo el registro IODIRA que es donde se encuentra la configuración de I/O como entrada o salida
 IdleI2C();
 WriteI2C(0x00); // Pongo a cero para que sea salida el banco 0
 IdleI2C();
 WriteI2C(0x00); // Pongo a cero para que sea salida el banco 1
 IdleI2C();
 StopI2C();

/*Escribimos la configuracion de los puertos que queremos*/

 StartI2C();
 IdleI2C();  //El módulo está activo?
 WriteI2C(0x20);
 IdleI2C();
 WriteI2C(0x12); //Elijo el registro IODIRA que es donde se encuentra la configuración de I/O como entrada o salida
 IdleI2C();
 WriteI2C(0x88); // Pongo el banco cero con esta configuracion binaria de leds encendidos
     //  10001000 b = 0x88 h
 IdleI2C();
 StopI2C();

}


Muchas Gracias  :)

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: Ayuda expansor de puertos MCP23017
« Respuesta #1 en: 29 de Noviembre de 2011, 06:29:00 »
Aqui Nocturno no recomienda ese expansor, dale una hojeada:
http://www.todopic.com.ar/foros/index.php?topic=31219.0

Desconectado theworldofdudy

  • PIC10
  • *
  • Mensajes: 4
Re: Ayuda expansor de puertos MCP23017
« Respuesta #2 en: 29 de Noviembre de 2011, 06:36:26 »
Si, lo leí hace un par de días, el problema que tenía él era de ruido y EMC, en mi caso no tendría ese problema, de todas formas ni simulandolo con Proteus obtengo resultado.
Muchas gracias por el aporte, cualquier ayuda es bien recibida  :) !

Si alguien ha usado otro expansor con C18 no cierro puertas, me podría servir.

Gracias

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Ayuda expansor de puertos MCP23017
« Respuesta #3 en: 29 de Noviembre de 2011, 09:13:48 »
Yo uso el MCP23S17 que es por SPI, y me anda de maravillas, después de aprender que tienen algunas cosquillas, ya que utilizo los puertos por interrupción.
No lo pude simular, porque el Proteus que tengo no simula sus interrupciones, asi que no me servia ni siquiera intentarlo, igual con ayuda del ICD pude hacer rapidamente el debug y mucho mas preciso (sin criticar al Proteus, que me ha servido de mucho en otras ocasiones).
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado theworldofdudy

  • PIC10
  • *
  • Mensajes: 4
Re: Ayuda expansor de puertos MCP23017
« Respuesta #4 en: 29 de Noviembre de 2011, 09:34:48 »
Yo uso el MCP23S17 que es por SPI, y me anda de maravillas, después de aprender que tienen algunas cosquillas, ya que utilizo los puertos por interrupción.
No lo pude simular, porque el Proteus que tengo no simula sus interrupciones, asi que no me servia ni siquiera intentarlo, igual con ayuda del ICD pude hacer rapidamente el debug y mucho mas preciso (sin criticar al Proteus, que me ha servido de mucho en otras ocasiones).

Exacto, ese también lo he visto en el datasheet, me puede servir,realmente opte por la opción del 23017 por aquello de aprender a utilizar I2C, pero con que me funcione cualquiera de los dos me sirve. Podría ayudarme con algún ejemplo de código??

Muchas Gracias!!

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Ayuda expansor de puertos MCP23017
« Respuesta #5 en: 29 de Noviembre de 2011, 09:48:23 »
  Yo no utilizo C18 y de hecho casi no hice nada con PIC18. En el datasheet del 2550 aclara que para usar el módulo I2C hay que configurar los pines como entrada. Tendrías que ver en la ayuda del C18 si al hacer Openi2c(xxxxx) automáticamente configura los pines como entrada, sino tocará hacerlo manualmente.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado theworldofdudy

  • PIC10
  • *
  • Mensajes: 4
Re: Ayuda expansor de puertos MCP23017
« Respuesta #6 en: 29 de Noviembre de 2011, 10:42:43 »
  Yo no utilizo C18 y de hecho casi no hice nada con PIC18. En el datasheet del 2550 aclara que para usar el módulo I2C hay que configurar los pines como entrada. Tendrías que ver en la ayuda del C18 si al hacer Openi2c(xxxxx) automáticamente configura los pines como entrada, sino tocará hacerlo manualmente.

Ok, lo tendré en cuenta, voy a mirarlo y ahora os cuento. Gracias

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Ayuda expansor de puertos MCP23017
« Respuesta #7 en: 29 de Noviembre de 2011, 10:46:20 »
Tampoco uso C18, pero seguramente microchip tiene notas de aplicacion en C18, si mal no recuerdo hay una donde se usan ambos dispositivos para controlar display y teclado 4x4, puedes bajarla de Microchip Web Site.
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en529784

http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en027237

La pagina del producto:
http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en023500
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.