TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Nocturno en 30 de Mayo de 2008, 14:52:37
-
Puesto que los pines que uso para I2C en CCS se especifican una sóla vez en una directiva del preprocesador ( #use i2c(master, sda=EEPROM_SDA, scl=EEPROM_SCL) ), si necesito montar en un mismo PIC dos buses I2C, ¿alguien sabe cómo se hace?
-
Saludos maestro.
A mi se me ocurre que deberia hacerse tal y como lo hacen el el EX_ENCRY.C solo que con el #use i2c (....) y se definen las funciones para cada puerto i2c despues de cada directiva correspondiente, pero yo solo lo he probado con el #use rs232.
Saludos
-
Saludos maestro nocturno!
No tengo tanta experiencia como vos, pero lo que entiendo es que uno puede en ccs hacer que un bus i2c sea por hardware y otro sea por software... y entonces le pones un nombre a cada bus. En la directiva #use i2c hay un parámetro que es STREAM=id, donde id es el nombre del bus i2c... puedes declarar una directiva #use i2c con STREAM=bus_1 y otra con bus_2, y luego cuando por ejemplo, vayas a escribir, la instrucción es i2c_write(STREAM, DATA), donde en STREAM eliges cuál de los dos i2c que has declarado vas a usar...
Ok nos leemos! :mrgreen:
-
No estoy yo tan seguro de que STREAM sea válido en el #USE I2C .. sé que en el #USE RS232 si vale, y además aparece en la lista de parámetros del mismo pero en el I2C no se menciona para nada. Pero por probar que no quede. :mrgreen:
-
Muchas gracias Firepic, tu solución funciona perfectamente.
No se me había ocurrido pensar que el I2C manejaba los STREAM como el RS232, pero sí, ahora puedo confirmarlo.
#use i2c(master, sda=EEPROM_SDA, scl=EEPROM_SCL, STREAM=interna)
#use i2c(master, sda=EEPROM2_SDA, scl=EEPROM2_SCL, STREAM=externa)
-
Maestro Diego, qué manual de CCS usas? Yo tengo el de la versión 4, de Agosto de 2007, y aparece lo de STREAM=id en la directiva #use i2c, en la pag. 120.
Es el último parámetro que se describe.
Aquí dejo la imagen:
(http://img225.imageshack.us/img225/5718/imagen1tn5.jpg)
Yo no lo he probado pero si aparece allí pues debería funcionar supongo :D
Como dice el maestro redpic, a probar pues!
Nos leemos!
-
Guao ya lo habías solucionado antes de que escribiera el segundo mensaje, eso se llama velocidad! :P
Me alegra que hayas solucionado tu problema maestro nocturno. :-/
Eso nos ayuda a todos, ya sabemos que se pueden implementar dos buses i2c en ccs. :-)
Nos leemos pues! :mrgreen:
-
Hola
Si es necesario el STREAM?, yo he corrido los dos COM (HW y SW) con el #use rs232 sin el STREAM teniendo cuidado de definir las funciones que van a usar cada puerto justo despues de la directiva #use. Esperemo que el maestro Nocturno lo pruebe para salir de dudas. :-) :-)
Saludos
-
¿Definir las funciones después del #USE?
Vale, lo probaré también y te cuento.
-
Maestro Diego, qué manual de CCS usas? Yo tengo el de la versión 4, de Agosto de 2007, y aparece lo de STREAM=id en la directiva #use i2c, en la pag. 120.
Ja, ja, ja :D :D :D Yo aún estoy en el Paleolítico de la 3.242 Ja, ja, ja :D :D :D
-
Es que aun conserva su vieja licencia...de conducir. :D :D
-
Ja, ja, ja :D :D :D Yo aún estoy en el Paleolítico de la 3.242 Ja, ja, ja :D :D :D
Es que aun conserva su vieja licencia...de conducir. :D :D
Naguará uno con ustedes no sólo aprende, sino que se muere de la risa! Qué cómicos son! :D :D :D
No pues sería bueno que te cambiaras a la versión 4 del CCS maestro Diego, trae varias actualizaciones bien interesantes.
Ok nos leemos! :mrgreen:
-
Comprobada también la posibilidad de poner dos #use i2c seguidos de sus funciones sin utilizar stream. Funciona de lujo
Muchas gracias Firepic
-
Bueno ahí da las gracias a MLO quien fue el que hizo mención de esa última opción que has probado.
Nos leemos! :mrgreen:
-
Tienes razón, pues al César lo que es del César.
Muchas gracias por tu ayuda MLO__
-
Saludos.
Mas bien demole las gracias al ejemplo EX_ENCRY.C que es el que utiliza dos puertos seriales, y se se me ocurrio que se podria hacer lo mismo con el i2c!! :D :D y fue la primera opcion que di :D :D
-
La utilización de los dos puertos seriales está recogida en versiones bastante antiguas del CCS, sin embargo la implementación de dos puertos i2c es bastante reciente. Por otra parte habría que ver si permite crear un puertos esclavo por software, que creo que no, ya que el pic no es capaz de seguir las señales del maestro.
Un saludo
-
Y solo por saber... ¿Porq, Nocturno, necesitas de dos buses i2c en el PIC? Si una de las particularidades del protocolo i2c esq se pueden conectar varios dispositivos en un mismo bus.
Salu2.
-
Y solo por saber... ¿Porq, Nocturno, necesitas de dos buses i2c en el PIC? Si una de las particularidades del protocolo i2c esq se pueden conectar varios dispositivos en un mismo bus.
No me lo vas a creer pero yo tenía esa misma duda... supongo que el maestro nocturno tendrá sus razones... ya nos dirá.
Ok saludos, nos leemos! :mrgreen:
-
Y solo por saber... ¿Porq, Nocturno, necesitas de dos buses i2c en el PIC? Si una de las particularidades del protocolo i2c esq se pueden conectar varios dispositivos en un mismo bus.
No me lo vas a creer pero yo tenía esa misma duda... supongo que el maestro nocturno tendrá sus razones... ya nos dirá.
Ok saludos, nos leemos! :mrgreen:
La unica razon que le veo yo (y me esta pasando a mi, ahora mismo xD) es que alguno o varios dispositivos, con protoculo i2c, tiene frecuencias de clock diferentes (100khz o 400khz normalmente). Aunq para esto, me dijieron q se podria setear la velocidad en un solo mismo bus. Pero probando... parece que falla =(
Quiero saber la razon de nocturno, yaq est problema me esta llevando mucho tiempo XD
Salu2.
-
Ah si, puede ser.
Pues esperemos entonces la respuesta del maestro nocturno para estar más seguros de la razón.
Hoy es domingo y debe andar posiblemente de rumba con amistades y familia :D
Ya quedará entonces para mañana.
Ok nos leemos! :mrgreen:
-
Porque el hardware del proyecto ya me viene dado, y está diseñado así. No puedo cambiarlo.
-
Ah.. los pines del i2c por hardware ya estaban ocupados ? o habian dispositivos en diferentes pines? Bueno, almenos ya se que no es por el problema de las velocidades que yo tengo:lol:
Salu2.
-
Esa es una razón muy poderosa :D
"Donde manda capitán no manda marinero". Si así lo piden, así será :lol:
Exito con tu proyecto jeremylf!
Saludos, nos leemos! :mrgreen: