TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: zimanka en 30 de Abril de 2006, 14:29:33
-
alguien me podria ayudar porfavor con una red entre pics uno maestro y tres esclavos el maestro se comunica por rs232 con un pc y los 3 pic esclavos por i2c o cualquier otro protocolo. en ccs con un 877 maestro y 3 16f873
-
alguien me podria ayudar porfavor con una red entre pics uno maestro y tres esclavos el maestro se comunica por rs232 con un pc y los 3 pic esclavos por i2c o cualquier otro protocolo. en ccs con un 877 maestro y 3 16f873
zimanka dime, en qué necesitas ayuda puntualmente.
¿En consejos sobre la comunicación? ¿en código? ¿en características del hardware?
En Microchip he visto tuna nota de aplicacion sobre el maestro de i2C pero está escrita en ensamblador, pero si entiendes la idea es simple adaptarla al C. Además es muy similar a escribir datos en cualquier memoria i2C.
Muchas de estas cosas o protocolos uno los diseña a la medida de las necesidades de uno mismo, pudiendo iniciarse con algo simple hasta algo muy complejo que en algunos casos excede lo que realmente uno espera o necesita de una comunicación.
Saludos
-
Gracias....La verdad es que he intentado con muchos códigos....pero no me funciona en proteus...
En si lo que quiero realizar es una red entre pics con topología logica en anillo, es decir un TokenRing.
Mi problema esta en el codigo pues el hardware es sencillo. Gracias
-
Gracias....La verdad es que he intentado con muchos códigos....pero no me funciona en proteus...
En si lo que quiero realizar es una red entre pics con topología logica en anillo, es decir un TokenRing.
Mi problema esta en el codigo pues el hardware es sencillo. Gracias
¿Topología lógica en anillo... y será topología física en estrella? jejeje me suena a LAN eso :mrgreen:
Bueno,en Proteus me han comentado que algunas comunicaciones I2C no funcionan correctamente(no envia el acknowledge el esclavo).
¿que codigo es el que estas empleando? ¿podemos verlo?
Saludos.
-
Hola Zimanka, si estás probando en proteus comunicación I2C con dos micros y rs232 no sigas.. no te funcionará. Fallos de proteus. Hace algún tiempo, un amigo estaba con eso mismo, varios micros por I2C y comunicación rs232 y nada... loco. Como no me fio un pelo del proteus, probé en proto y listo. Funcionó perfecto.
Así que imagina.. monta todo en una proto y prueba.
Saludos!!
-
Hombre Cuca cuanto tiempo, estuve buscando tu dirección de correo para decirte lo de los moderadores pero no la encontré. Revisa este enlace: http://www.todopic.com.ar/foros/index.php?topic=11394.0 (http://www.todopic.com.ar/foros/index.php?topic=11394.0)
Un abrazo Cuca.
-
Hola Pocher!!! Es cierto.. he estado offline por un tiempo, pero vuelvo a la carga!!
He picado en el enlace y me sale un error que dice:
"El tema o foro que estás buscando parece que no existe, o fuera de tus límites. "
Saludos y disculpas a zimanka por estos post que nada tienen que ver.
-
:) si es muy similar a una LAN...lo importante es que sea una topología logica en anillo la fisica puede ser en estrella o en (bus como el I2C) pero en este caso es poner 1 maestro y 3 esclavos.
Primero intente con I2C para hacer la comunicación maestro esclavo con los siguientes codigos:
PARA EL MASTER
#include <16f877.h>
#fuses XT,NOWDT,NOPROTECT,PUT,NOBROWNOUT,NOLVP
#use delay(clock=4000000)
#include <lcd.c>
#use i2c(MASTER, SDA=PIN_C4, SCL=PIN_C3,FAST,FORCE_HW)
void main(void)
{
int buffer;
delay_ms(1000); //retardo, por si acaso no da tiempo al esclavo a "inicializarse" para
//poder esperar a la informacion que le puede enviar el master
lcd_init();
while(TRUE)
{
if((!input(PIN_A0)))
{
i2c_start(); //condicion de inicio
i2c_write(0x08); //direccion del esclavo con el que haremos la comunicacion
i2c_write(5); //enviamos un dato, p.e el entero 5
i2c_stop(); //finalizacion de la comunicacion
delay_ms(1000); //introducimos retardo para que no este constantemte escribiendo
}
if((!input(PIN_A1)))
{
i2c_start(); //inicio
i2c_write(0x08); //direccion del esclavo
i2c_write(6); //enviamos un dato, p.e el entero 6
i2c_stop(); //parada
delay_ms(1000);
}
};
}
PARA EL ESCLAVO
#include <16f877.h>
#fuses XT,NOWDT,NOPROTECT,PUT,NOBROWNOUT,NOLVP
#use delay(clock=4000000)
#include <lcd.c>
#use i2c(SLAVE, SDA=PIN_C4, SCL=PIN_C3, ADDRESS=0X08, FAST , FORCE_HW)
void main(void)
{
int dato;
lcd_init();
lcd_putc("Esperando");
while(TRUE)
{
//i2c_poll solo se puede usar por hardware, detecta un byte en el buffer
//seguidamente se llama a la funcion i2c_read que devolvera el byte recibido ó 5 ó 6
if(i2c_poll())
{
dato=i2c_read();
lcd_putc("\f");
printf(lcd_putc,"El dato es el %i",dato);
}
};
}
En proteus no funciono, sin embargo talves si ustedes saben como podria aumentar la cantidad de esclavos donde la comunicación sea en serie entre si como un anillo lógico utilizando RS232?....como empleo en el codigo tres esclavos y un solo maestro?....esta bien el codigo?...
Gracias....por decirme lo de proteus...pero bueno lo estare armando en protoboard...
Gracias :lol: