Comunicacion entre dos PIC

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.
 
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
 
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).
 
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
 
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,
 
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
 
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.
 
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.
 
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
 
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.
 
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....
 
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
 
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....
 
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.
 
--------------------------------
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
 

Adjuntos

  • pc_serie_pic_194.rar
    27.7 KB · Visitas: 430
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
 
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


Código:
#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);
}
}
 
Última edición por un moderador:
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
 
Atrás
Arriba