# Comunicacion entre dos PIC



## canales (May 18, 2007)

Hola a todos.

Necesito hacer la comunicación entre dos pic, un 16F877A y un 16F876. Estos dos pic tienen un puerto serial síncrono el cual tiene dos modos en que se puede utilizar: SPI y I2C. Decidí hacer la comunicación en el modo SPI porque considero que es la mas fácil y se apega mas a lo que quiero, ya que con el I2C hay que utilizar direcciones y además no le entiendo muy bien.

Bueno pero sucede que aun tengo unas cuantas dudas acerca del funcionamiento del modo SPI. En los documentos de la Microchip dice que tanto el maestro y el esclavo pueden estar transmitiendo y reciviendo a la misma vez, también dicen que cada uno de estos pic tiene un registro SSPBUF en el se cargan los datos a enviar o se leen los datos recividos. Entonces mi pregunta es ¿Cómo pueden esos pic enviar y recivir datos a la misma vez si solo tienen un registro SSPBUF?

Tal vez entendí mal el funcionamiento, pero voy a explicar lo que entendí. El maestro envía datos y el escalvo recibe, pero también a la misma vez el esclavo puede enviar datos y el maestro recibe. ¿O es diferente? quizás es que el maestro envía y el esclavo recibe, luego que el esclavo termina con la recepción puede enviar los datos al maestro y este recibe los datos. Realmente estoy algo confundido.

Otra cosa es el bit SMP que no entiendo muy bien su función.

Bueno espero que alguien me pueda dar alguna sugerencia o una guía para esto. Saben, un link donde den un ejemplo de esto me serviría muchísimo.

Gracias de antemano.


----------



## ELCHAVO (May 19, 2007)

HOLA CANALES


Mira yo hice un circuito donde se comunica un PC y un micro de Motorola. y lo hice Half Duplex, ya que el micro que maneje no tiene para hacer Full Duplex.

Te Voy a Explicar como funciona para haber si tu lo comparas y crees que es asi a lo que se refiere Microchip.

El PC es el maestro y el micro hace de esclavo, lo que me quiere decir que unicamente el micro envia información cuando el PC se lo SOLICITE !! unicamente !

cuando el PC le dice al micro que le envie información de determinado canal analogo, el micro se lo envia, si el PC no le solicita nada, pues el micro no manda nada.

Es decir inmediatamente el micro recibe la información del PC, la procesa y envia de manera inmediata hacia el PC.  

Te ayudara bastante colocar un led en algun pin, para observar cuando envia el esclavo y cuando recibe, entonces colocas que se encienda cuando recibe y apague cuando envia, y asi veras un continuo y rapido parapadeo del led indicando que esta en permanente comunicacion el maestro con el esclavo. OJO hay que tener presente las velocidades de transmision en baudios.

ahora bien, la comunicacion del PC hacia el micro va por un hilo y la del micro hacia el PC va por el otro hilo de comunicacion. Yo creo que el sistema que te explican es algo asi. me parece mucho.

No se si te pude ayudar en algo , espero que si.

hasta pronto


----------



## jjfonsecaz (May 23, 2007)

Hola, yo he trabajado un poco con comunicaciones seriales y te puedo decir que si no es inconveniente te recomiendo uses el Usart en lugar del SPI,ya que el ejemplo que te comenta el compañero ELCHAVO maneja esa comunicacion por eso envia y recibe al mismo tiempo casi (de hecho pienso que tiene comunicacion Full duplex, pero como condiciona al pic a solo enviar cuando se le pide por eso funciona de esta manera). 
El modulo SPI no lo he manejado pero si esta hablando de un MASTER y SLAVE significa que el master tiene el control sobre una linea de reloj. lo cual el SLAVE no puede controlar asi que en efecto cuando tu envias algo del MASTER al SLAVE puedes obtener una respuesta, pero la misma solo puede ser enviada cuando el MASTER lo requiera no cuando el SLAVE lo decida(tiene el control sobre la linea de reloj para la sincornizacion).


----------



## canales (May 26, 2007)

Gracias chico por sus respuestas y comentarios.

Saludos.....


----------



## migmig (Jun 1, 2007)

Hola a todos:

Llevo 1 año trabajando con micros y hace un mes hice un descubrimiento que "ha cambiado mi vida"  se trata de un software llamado Niplesoft, te genera el codigo asm. practicamente arrastrando bloques y contestando las preguntas que te va haciendo, es una passada, calculos matematicos de 8 y 16 bits, manejo de lcds, teclados 4*4, ayer hice con el una comunicación 485 entre 2 16f877 tardé 2 horas, he estado dando una vuelta por el foro , y hay un gran numero de problemas que se solucionarian con Niple en poco tiempo.
He intententyado subiros un manual completo pero pesa demasiado, os lo podeis descargar en telsotec, hay tambien demos y ejmplos.

un saludo


----------



## jjfonsecaz (Jun 1, 2007)

Hola miqmiq.

Me parece interesante el programa que comentas aunque claro esta se me hace una perdida de tiempo, imaginate es como alguna ves me dijo un profesor en la universidad: "Utilizar esa herramienta es equiparable a matar una mosca a cañonazos"; se me hace una perdida de tiempo ya que el fundamento de hacer las cosas es el aprendizaje y no creo que tengas aprendizaje alguno si alguien lo hace por ti (el programa en este caso).

Apenas soy iniciado en esto de los foros y se me hace interesante; ya que es una forma de compartir conocimientos, ir creciendo mutuamente en cuanto en el desarrollo de proyectos muy ingeniosos.

Bueno por ultimo como te comente se me hace un programa muy interesante mas sin embargo creo que prefiero intentar las cosas y aprender por mi propio intelecto.

Un saludo,


----------



## chispy (Jun 11, 2007)

hola, como estan? yo tengo entendido que el master esta preguntando constantemente al esclavo por cada uno de sus pin, si se realiza alguna modificacion este lo envia al master y este lo comunica a la pc.
Yo a este proyecto lo prove una vez con niple, si bien tube algunos problemas en el uso de los bloques pude solucionarlo. El uso de niple o asm va depende tambien a preguntarce para que uno programa pics. Si la idea es programar por fanatismo e ingenio, creo que asm o c++ es una buena opcion, si la idea es proyectos en minimo tiempo posible, niple es buena opcion.
Para las moscas raid!!!
Saludos


----------



## ELCHAVO (Jun 11, 2007)

en mi humilde opinion,hoy en dia programar en assembler es mal negocio. los proyectos que se suponian eran baratos, se vuelven tremendamente costosos por el tiempo invertido en el diseño.

y el tiempo ! es el tiempo ! jamas se recupera.

hay personas muy fuertes tecnicamente en este campo pero hoy en dia el que se quiera iniciar con los micros, no aconsejo que se inicie con assembler.


porque todos hemos pecado en la famosa frase HA ESO ESTA FACIL , SOLO ES HACER ESTO Y ESTO Y ESTO ! pero cuando uno se sienta ha desarrollar comienzan los dias a correr ! y uno se da cuenta que no estaba tan sencillo.


----------



## tiopepe123 (Jun 11, 2007)

En el CCS C hay un ejemplo de como comunicar dos PIC mediante el sistema 1 wire, estoy en ello...(condenado compilador no le gusta 12f675, ya lo pillare)

Realmente hace tiempo que no programa ASM, supone demasiado tiempo  de desarrollo buscando fallos.

Creo yo que el mejor metodo es el C bien entendido, utilizando funciones y te obliga a programar de forma estructurada.

El nipple no lo conozco.


----------



## migmig (Jun 13, 2007)

Hola a todos, yo no se que sistema será mejor o peor para programar, pero lo que si se es que cuando visual basic comenzó su andadura, recuerdo haber visto muchos comentarios del tipo, esto no sirve, esto lo hace todo por tí, donde esté basic o etc tc, y mi pregunta es ¿hay algún desarrollador de software que no lo utilice? o alguien se acuerda de como se programaban los PLCS antes de que apareciera el ladder logic (o diagrama de relés) yo recuerdo haber . programado, era una locura, habia que hecharle tiempo, fe , y no eras competitivo, (el tiempo es lo que mas cuesta.

He leido un comentario vuestro sobre matar moscas a cañonazos, y no creo que la comparación sea acertada, yo que quereis que os diga, si para poder realizar un trabajo, tengo buenas herramientas, y encima no cuestan una fortuna,  no veo porque no utilizarlas, ¿alguien utiliza el MSdos?.... no verdad, ¿porque? ¡¡¡si es fantástico, no falla nunca!!! es casi tratar directamente con el PC .   Pero claro te tienes que aprender su idioma, con windows pj, solo tienes que saber mover el ratón y apretar el botón ¡¡¡a lo mejor por esto a triunfado!!!

En fin, si tienes esto por hobby está muy bién irte por carreteras secundarias, pero si lo que quieres es llegar rápido y cómodo ve por  la autopista aunque no disfrutes del paisaje.

Esta es mi opinión, por supuesto respeto las vuestras y me alegro de que haya foros como este para poder debatir.

Un saludo para todos


----------



## tiopepe123 (Jun 13, 2007)

Yo porgame con leguaje de contactos  y con plc de los años 84 y era como trabajar en ensamblador.
Ahora con el S7 es mas facil pero se te exigen mas y mas cosas, que si comunicacion ,scad... o sea es mas facil pero mas dificil.


----------



## canales (Jun 14, 2007)

Saludos a todos.

Al parecer mi tema ha cambiado, pero se puso interesante. Es por eso que quiero dar mi opinión acerca de la programación. Soy casi un novato con los pic, comencé a investigar acerca de ellos hace 5 meses, y he estado programándolos hace como un mes. Solo sé programar en assembler, conozco C porque en la universidad me lo enseñaron, pero no le agarré casi nada, es más, ya no me acuerdo nada. Pero ahora quiero retomar de nuevo la programación en C.

Bueno, acerca de qué usar para programar los micro. Pienso yo que es bueno saber y manejar de todo un poco. Si el factor tiempo te está aprentado, lo mejor es utilizar la herramienta que te permita hacerlo en el menor tiempo posible. Si el tiempo no importa, lo bueno es experimentar con uno y con el otro. Para aprender se puede comenzar con cualquiera, después sigues con el otro.

Realmente, cada quien hace las cosas a como mejor le paresca. Por eso manejar de todo un poco es mejor porque así tienes opciones de escojer lo que mejor te convenga en un momento dado.

Saludos....


----------



## tiopepe123 (Jun 14, 2007)

Pues deberias plantearte en volve al C bajate el CCS y veras que es C puro. Imaginate trabajar con dadenas ynumeron con ASM es una tarea complicada en C es un instante


----------



## canales (Jun 14, 2007)

Oye tiopepe123, durante he estado investigando acerca de los pic, he visto que muchas personas aseguran que programar un microcontrolador en C ocupa mas memoria que al hacerlo en assembler. ¿Es ésto cierto?

Saludos....


----------



## tiopepe123 (Jun 15, 2007)

totalmente cierto, asi funciona windows..hehhehhehe.

Aunque los vendedores de C hablan de optimizacion en tamaño o rapidez la verdad es que no hay nada mas optimizado que el ASM puro y duro.

Pero la pregunta es la siguiente, en tu aplicacion realmente es critico el espacio ocupado o la rapidez.

A medida que un proyecto es mas complejo se vuelve insostenible el tiempo dedicado a programar y sobre todo a testear y al final te pasas al C.


en C imprimir "Hola mundo" se hace con un printf("hola mundo"); en ASM como minimo 2 a 3 horas, queda claro no.

Realmente vale la pena utilizar el C siempre que tu proyecto sea de uso general, sin problemas criticos de tiempo o de memoria.

Por eso a los novatos les recomiendo el pic16f876 y un bootloader, en aplicaciones normales no hay problema, es dificil quedarte sin memoria "ROM", el tema RAM ya es mas discutible.

Ademas todos los compiladores te sacan el ASM y siempre te puedes plantear modificar lo que es superfluo.


----------



## emula (Dic 21, 2008)

--------------------------------
HOLA GENTE.

Necesito una ayuda con la comunicación serie entre 2 PIC.. El transmisor veo que funciona muy bien, pero en el caso del receptor al recibir la señal y modularla a los pines configurados, me esta dando errores.

Estoy trabajando en MicroCode Studio y compilando con PICBasic Pro 2.46.

Anexo el diseño y los .pbp y los .hex


----------



## emula (Dic 23, 2008)

Ah estoy simulando con Proteus. pero creo que el max232 de la libreria no es simulable. alguien ya logro simular el funcionamiento del max232 en este programa


----------



## Neokdevil (Dic 26, 2008)

hola a todos
en proteus no es necesario simular el max232
puedes poner directamente en las patas tx y rx
incluso puedes usar una hyperterminar


----------



## Plata2305 (Mar 24, 2009)

tengo poca experiencia con los pic's estoy usando el CCS C Compiler, Estoy tratando de hacer un programa que recibe datos de manera serial a travez de Rs232, esta trama viene en hexadecimal, pero no estoy seguro si el Pic 18f4550 maneja este tipo de dato... Se que estoy recibiendo los datos porque este programa lo probe con proteus y me funciona... pero los datos los veo en ascii me gustaria verlos en hexa, si pueden ayudarme por favor..... gracias



```
#include <18F4550.h>
//Ajusta los valores de la palabra de configuración durante el ensamblaje:
//Protección de código y datos=OFF, LVP=OFF, WDT=OFF y OSC=HS
 
#fuses HS,NOWDT,NOPROTECT,NOCPD,NOLVP
 
// Con estas directivas las funciones "input" y "output_bit" no reprograman
// el pin de la puerta cada vez que son utilizadas. Si no se indica el
// modo fast_io se asume por defecto standard_io el cual reprograma el pin
// siempre antes de ser utilizadas estas funciones.
 
#use fast_io (B)
#use fast_io (C)
#use fast_io (D)
 
//Habilita las funciones RS232, velocidad a 9600 baudios
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
 
 
 
//DECLARACION DE FUNCIONES DEL PROGRAMA PRINCIPAL
 
void RECI_MAESTRO(void); // Leer del maestro
 
//DECLARACIONES DE VARIABLES
 
int dato, i, j, da1;
int aux ;
int aux1;
 
//PROGRAMA PRINCIPAL
 
main()
{
SETUP_ADC_PORTS(NO_ANALOGS); //Puerta AyB Digital
set_tris_b(0x00); //Puerta B salida
set_tris_c(08); //RC7/Rx entrada, RC6/Tx salida
set_tris_d(0xFC); //Puerto d como salida
output_d(0xFF); //Borra las salidas del puerto d
 
while (true)
{
aux=read_eeprom(0);
aux=0xFF;
if(aux==0xFF) //Si la respuesta es afirmativa
aux1=1;
while(aux1==1)
{
RECI_MAESTRO();//////////////////////////////////////
 
dato=read_eeprom(1);
da1=dato;
printf(" FIN DE TELEGRAMA \n\r");
}
}
}
 
 
 
 
void RECI_MAESTRO(void)
{
i=0;
dato=getc(); 
write_eeprom(0,dato);
printf( " dato %d ", i );
printf(": %c \n\r",dato);
i++ ;
dato=getc();
write_eeprom(1,dato);
printf( " dato %d ", i );
printf(": %c \n\r",dato);
i++;
dato=getc();
write_eeprom(2,dato);
printf( " dato %d ", i );
printf(": %c \n\r",dato);
i++;
j=read_eeprom(2);
 
for(i==0;i<=j+2;i++)
{
dato=getc();
write_eeprom(i,dato);
printf( " dato %d ", i );
printf(": %c \n\r",dato);
}
}
```


----------



## mandosasd (May 8, 2009)

La verdad es que sacando el tema de la comunicacion de los pics, yo considero que para un viejo programador de pics lo mejor es usar assembler ya que no solo hay muchas mas cosas hechas en este lenguaje, sino tambien, que lo que esta hecho ya esta probado, para mi el problema del lenguaje c es que uno si o si tiene que saber programar en c, en cambio en assembler solo se tiene que saber de electronica (en muchas facultades se enseña assembler por su versatilidad y su gran manejo del micro en bajo nivel). y ademas, su punto mas fuerte es que, uno que sabe programar en assembler puede programar hasta un microprocesador, pasando por cualquier tipo de microcontralador (y me refiero a cualquier fabricante) y lo unico que cambia no es su estilo de programacion sino las instrucciones.
Ojo tengo muy claro que aveces se hace mas largo pero creo que para eso son los foros. Ahora que hay foros uno puede recurrir a ayuda mucho mas rapido.

Consejo, los que no saben programar en c, aprendanlo porque con dijo mucha gente antes, puede ser mas rapido en ciertos proyectos. Los que saben solo programacion en c, no se cierren a c solamente porque van a morir con un lenguaje y se pierden la posibilidad de charlar con los micros y conocer a fondo que es lo que enrealidad hace su codigo.

Espero que les sirva de algo a todos los que forean, ya que en lo que llevo en el foro e visto que se divide mucho en programacion en c y assembler, y creo que seria copado poder llegar a programar en cualquier cosa y aunque este hecho en un lenguaje les pueda servir a cualquiera la forma de encarar el problema.

Soy solo uno mas del monton.

Gracias por leerlo


----------



## banistelrroy (May 8, 2009)

hola mandosasd sabes aun no se4 programar pic pero si se electronica dime me puedes recomendar algun libro revista manual con la que me pueda iniciar en los pic o almnos conocer algo de pic.....ojo no se nada de pic puesto q ese curso lo llevo el proximo cilco en mi carrera ......si pudieras recomendarme alago o talvez tengas algun link dodne pueda descargar imformacion seria de mucha ayuda y te estaria muy agradecido.....necesio lo mas basico sobre pics ojo si se sobre electronica basica digitales anolagica y todo lo demas pero aun no llevo pic.....gracias de ante mano-------


----------



## mandosasd (May 8, 2009)

dejame que busque alguna pagina o libro y te lo paso, aunque seria copado que te lo enseñen en la facu porque es mucho mas facil con alguien en frente, pero deja que te averigue algo.

nos vemos


----------



## mandosasd (May 8, 2009)

de ante mano sabes lo que es un shift register?(el componente), la diferencia entre bit y byte?, y lo que es un nible?
osea en tu carrera cursaste lo que en secundaria seria digitales 1?
como para estar seguro de lo que busco


----------



## mandosasd (May 13, 2009)

fijate en el foro en la parte de tutoriales que hay uno muy bueno para empezar a programar en assembler.

cualquier cosa preguntame.

ya que esta asi te saco un par de dudas. (o al menos eso voy a tratar de hacer)

nos vemos


----------



## Plata2305 (Sep 29, 2009)

Hola que tal?, estoy buscando una rutina para comunicar dos microcontroladores PIC 18F4550 via RS232 (USART)... uno de los micros debe recibir un señal que permite sensar la velocidad de una rueda, este dato VELOCIDAD debe enviar via RS232 al otro micro que se encarga de mostrar el dato VELOCIDAD en una LCD... estoy estancado porque no se como realizar la transmisión, asi que cualquier aporte es bueno, 

ahh estoy utilizando el compilador CCS. 

gracias


----------



## stinki (Mar 16, 2010)

Hola reviviendo este tema, alguien sabe usar bien las instruciones HSERIN y HSEROUT. las logro utilizar pero en un mismo pic enviar y resivir pero almomento que quiero comunicarme con otro pic 16f877 y 16f877 no me logro resivir nada. quiero enviar desde un pic maestro mumeros de 4bits y recivirlo  en otro pic par usar ese numero en un case usando picbasic, si alguien me pudiese apoyar le agradeseria mucho


----------



## pepg (Abr 28, 2010)

hola,

estaba buscando informacion sobre cómo hacer la comunicacion entre dos pics (master y slave), mediante el 1-wire.

gracias de antemano.

un saludo.


----------



## stinki (Abr 28, 2010)

Te recomiendo que uses la instrucion serout y serin, nomas tendrias que alternar las instruciones entre los dos pic de trasmite y a hora recive y el otro alreves asi pudieses usar  el mismo pin para trasmitir y resivir


----------



## pepg (Abr 28, 2010)

pero tengo que configurar algo en los pics para que uno se comporte como master y el otro como slave? o simplemente usando esas dos instrucciones valdría?

gracias de antemano


----------



## stinki (Abr 28, 2010)

pues lo que se me ocurre seria enviar un dato con el pic master el cual interprete el pic slave como una instrucion para realizar algo ya que el esclavo realizo la instrucion le comunique al master con otro dato enviado que ya se realizo y que esta listo para recivir otra instrucion, seria solo tomando desiciones con los datos enviados 

espero haberte ayudado es lo que se me viene a la mente


----------



## mendek (Abr 24, 2013)

Que tal compañeros, la verdad es que estoy en apuros, lo que pasa es que necesito saber como hacer comunicación entre dos pic's (para un proyecto escolar) usando los módulos nfr24l0, de los cuales estoy bastante confundido, ya que he visto en internet que usan protocolo de comunicación SPI, aunque he visto que algunos otros utilizan el ICSP o I2C, pero la verdad es que no tengo idea de como implementarlos en mi lenguaje de programación (Basic) ya que yo uso el Proton IDE, no sé si me puedan auxiliar con alguna lectura, algún libro, o explicarme como es que esto funciona, desde ya muchas gracias.


----------

