Enhorabuena Cryn, yo estoy trabajando en algo parecido a lo tuyo pero más simple, tengo que transferir datos desde un pic al pc,... el pc interrumpe cada hora al pic para que vuelque una tabla que tendrá guardada el pic, he pensado en usar el bus usb en el ordenador porque quiero que se pueda usar en los ordenadores portátiles, para ello he de comprar un adaptador usb-rs232 para luego añadir un max485 que saque la señal mediante esa capa física. ¿Crees que hago lo correcto?
O existe otra opción más eficaz?
Enhorabuena Cryn
El protocolo RS485 que tuve que hacer formará parte de mi trabajo de diploma de la universidad, verás que la identificación (o sea la dirección) de los esclavos es por hardware, esto es necesario porque todos los PIC Slaves tendrán el mismo Software, ellas serán las encargadas de recoger información de sensores que tendrán conectadas por la otra UART del PIC. Por eso fue que escogí este PIC porque tiene dos UART por HW y por SW es un dolor de cabeza la simulación de UART que hace el CCS.
El Master también en un momento determinado se conectará via serie con una PC para recibir toda la configuración necesaria para el funcionamiento.
Y toda la información que le vaya pidiendo a los esclavos la procesará y almacenará en una MMC.
Entonces el protocolo como tal:
-El Master envía en un byte la dirección del esclavo con el que quiere comunicarse y en el bit LSB de este mismo byte con 0 informa que va a escribir y con 1 que va a leer (tipo I2C)
-El esclavo con esa ID envía su propia ID hacia el Master como respuesta de que está recibiendo la información (o sea: ACK).
-Y en caso que el Master vaya a escribir en el Esclavo envía ahora la Cant. de bytes que va a transferir al Esclavo.
- El esclavo espera esta cantidad y la envía de nuevo al Master como Ack, y así se comprueba que llegó bien la información.
-Después el Master comienza la transferencia de los bytes.
Si el Master quiere leer al Esclavo, entonces despues de enviar la ID lo que hace es esperar del Esclavo la cantidad de bytes que este vaya a transferirle y como Ack el Master envía dicha cantidad de nuevo al esclavo.
-Después el Esclavo comienza la transferencia.
-Cualquiera de los dos que esté transfiriendo, nada más termine el otro envía el byte 0xFF para que el otro conozca que ya fue recibido el paquete.
En caso que en la espera de algún Ack se desbordara la INT TIMER0 que se activa cuando se espera el ACK se retorna ERROR en la escritura o lectura porque han pasado 1.6 segundos y creo que es suficiente como para considerar un problema, de todas formas podemos varias este tiempo.
Saludos Cryn. :-/ :-/
Zagoaristides, este protocolo lo realicé hace como 6 meses para la tesis de ingeniería, por lo que la verdad que no recuerdo bien, pero estoy casi seguro que es como dices, :D :D jjjaaaja, resulta que en estos momentos entiendes mejor el código que yo.
Pero recuerdo que después le agregué además código CRC y quedó mejor implementado, si tienes interés en utilizarlo me dices y lo busco para enviartelo.
Saludos, Ales.
Zagoaristides, este protocolo lo realicé hace como 6 meses para la tesis de ingeniería, por lo que la verdad que no recuerdo bien, pero estoy casi seguro que es como dices, :D :D jjjaaaja, resulta que en estos momentos entiendes mejor el código que yo.
Pero recuerdo que después le agregué además código CRC y quedó mejor implementado, si tienes interés en utilizarlo me dices y lo busco para enviartelo.
Saludos, Ales.
Zagoaristides, este protocolo lo realicé hace como 6 meses para la tesis de ingeniería, por lo que la verdad que no recuerdo bien, pero estoy casi seguro que es como dices, :D :D jjjaaaja, resulta que en estos momentos entiendes mejor el código que yo.
Pero recuerdo que después le agregué además código CRC y quedó mejor implementado, si tienes interés en utilizarlo me dices y lo busco para enviartelo.
Saludos, Ales.
Hola Ale, aún estoy esperándolo. zagoaristides 4rr0b4 h0tm4il punt0 c0m es mi correo. Gracias.
Hola.Gracias por responder. Lo del protocolo más o menos lo tengo claro y lo voy a implementar de forma similar a como han hecho otros foreros pero en el trabajo que estoy haciendo va a haber varios master, es más, todos los dispositivos tienen que comportarse en determinados momentos en master o slave y muchas veces cuando un master envía datos a un slave éste tiene que responder. La duda que tengo es que, por ejemplo, cuando un dispositivo con ID 00 quiera comunicarse con otro con ID 01 primero tiene que comprobar si el bus está libre porque puede darse el caso a que el dispositivo ID 02 esté transmitiendo al dispositivo ID 03 y después de esa transmisión el ID 03 empiece a transmitir para comunicar alguna respuesta, cosa que ID 00 no sabe o no debería saber.
La idea es tener un protocolo organizado en la comunicacion, es decir, debes definir cual PIC es el MASTER y cuales los SLAVES. El MASTER pide la informacion y solo el micro que la tenga va a contestar.
Hola Nicoach!Gracias stk500! He estado buscando información del protocolo DMX512 pero no he encontrado mucho sobre cómo funciona realmente es el protocolo. En cualquier caso, he pensado que la cadena de envío podría ser la siguiente:
No se si tu conoce el DMX512??? pues si revisa el Protocolo, te va a sacar de muchas dudas, el protocologo DMX512 esta hechos para esto, lo que debe tener claro que es Receptor / Transmisor
cada modulo lleva su direcion preprogramada, para asi evitar Colazo entre cadas dipositivo.
Saludos
Hola.
Debes definir primero que PIC vas a utilizar, tambien que lenguaje de programacion -C, ASM, Basic- luego ya se podria entrar de lleno a lo que quieres.
Saludos
disculpa ese codigo de programacion sirve para comunicar pics entre si via rs845 pero para pics 16F8XX??? por que de verdad necesito ayuda con eso... en eso esta la piedra de tranca de mi proyecto... necesito poner a comunicar los pics entre si via rs485... por que del pic a la pc no tengo problema... pero tengo que usar un pic 16F877 o 73 por que son los que se consiguen aca en venezuela... o en dado caso el 16F628.... si puedes ayudarme con esto te lo agradeceria mucho
HOLA un saludo a todos los usuarios del foro... escribo en esta ocacion para preguntar ya que estoy desesperado con esto... estuve probando la comunicacion RS485 con el pic... y use el codigo que colocan en el post "un rele en la lejania" en ese programa se comunicaba un pic con un pc via RS485, bueno en mi caso necesitaba comunicar dos pic (un maestro y un esclavo) y del maestro observarlo en la pc. En donde estudio poseen un conversor de RS485 a RS232 asi que por ese lado no hay problema. el problema se sucita con la comunicacion PIC - PIC. para probar la comunicacion entre ellos hice un circuito en el cual coloque pulsadores y leds en ambos pic y se trata de prender los leds del esclavo con los pulsadores del maestro y viceversa. bueno esto no me funciono. lo probe primero em proteus y la vaina funciono bien perfecto, cuando lo monte en el protoboard la cosa se complico.... ya que no hizo lo que si hacia en proteus que era encender los leds de un pic con los pulsadores del otro. use el hyperterminal de la pc para observar si se estaba comunicando y resulto que del mestro al esclavo si manda la palabra que programe para encender los leds.. pero del esclavo al maestro NO MANDA NADA... es decir manda pura basura... caracteres extraños... lo que me preocupa es que ya probe todos los casos de gafedades, es decir, el cableado, los componentes todos funcionan (los pics, los sn75176) el conversor lo probe y tambien funciona... ya de verdad no se que probar y que descartar.... SI ALGUIEN SABE QUE ESTOY HACIENDO MAL O QUE ESTOY DEJANDO DE HACER POR FAVOR AYUDENME!! aqui les adjunto el programa en PIC C de lo que se programo y el circuito tal cual como lo monte en el proteus ...
hermano gracias por responder y mostrar interes.... pero yo no necesito convertir de RS232 a RS485 o viceversa... ya que para eso tengo un conversor... mi problema es la comunicacion PIC - PIC via rs485, es ahi donde tengo el problema...
bueno lo mio es mas sencillo.... lo que tengo que hacer es 3 modulos de adquisicion de datos. el primero es entradas analogicas. es decir, en una baquela tendre un pic que se comunicara con la pc, y por medio de labview observar la forma de onda de la red.
2do modulo: entradas digitales. con otro pic en otra baquela tengo que hacer enceder unos leds que esten en labview mediante unos switch que tendre en la baquela.
3er modulo: salidas digitales. en este caso es viceversa... tendre los leds en la baquela y los encendere con pulsadores ubicados en labview. toda la comunicacion es RS485.
ademas estos modulos deben comunicarse entre si.... y llegar estos a su vez a un pic maestro que los comunicara con la pc. de verdad esto me tiene mal.... CREES QUE PUEDAS AYUDARME??? POR LO MENOS A RESOLVER LA COMUNICACION PIC - PIC RS485. TE LO AGRADECERIA EN EL ALMA DE VERDAD!!!
yo estoy usando el pic 16f628 yo he programado los pic en pic C y ya hice pruebas.. se como conectarlos... es mas use el codigo de programacion de otro post donde usan la comunicacion RS485 y ese programa funciono segun los que lo montaron.... incluso yo lo probe con el simulador PROTEUS y sirvio... pero cuando lo monte en protoboard la cosa no quizo servir... es ahi donde estoy trancado men
ah quizas es por el proteus que tienes.... ese es el proteus 7.5 el ultimo hasta ahora.... y para las versiones anteriores no sirve.... pero donde esta esa simulacion esta la foto del circuito que hice en proteus....indicando donde coloque el conversor que uso para RS485 - RS232 - pc
eso se hizo tambien... lo que me dices... lee los codigos que deje en el rar para que veas que mas sencillo no lo pude hacer... pero la verdad si el problema fuera por codigo el en simulador no me habria corrido perfectamente.... y por conexiones he revisado TOOODOOO lo que pueda ser y nada!!! estoy casi que me rindo
ok khronos... pero no entendi lo que debo de usar la interrupcion del str 232 de la pc... como es eso??? lo demas si lo tengo mas claro
AH OK YA SE A QUE TE REFIERES.... YO USO UN CONVERSOR YA HECHO... QUE SOLO LO CONECTO AL PUERTO SERIE DE LA PC Y POR EL OTRO EXTREMO TENGO DOS CABLES (A Y B) QUE LOS COLOCO EN MEDIO DE LOS 75176 QUE SON LOS QUE HACEN LA CONVERSION DE RS232 A RS485. LO QUE TU ME TRATAS DE DECIR ES QUE COMO ES UNA COMUNICACION HALF DUPLEX A DOS HILOS SOLO SE PUEDE TRANSMITIR O SOLO SE PUEDE RECIBIR... PERO NO AMBAS A LA VEZ... O ME EQUIVOCO?
buenas a todos los del foro.... una pregunta para el que sepa de esto... para desarrollar proyectos de sistemas de adquisicion de datos remotos via RS485 EXISTE ALGUNA BASE LEGAL??? ALGUNA NORMA QUE LO RIGA? O ALGUNA NORMA ELECTRONICA ESPECIFICA QUE REGULE ESTOS PROYECTOS? ES PARA EL INFORME DE MI PROYECTO, Y COMO NO CONOSCO DEL MUNDO ELECTRONICO YA QUE SOY DE ELECTRICIDAD... ME GUSTARIA SABER SI ALGUIEN ME PODRIA GUIAR SOBRE ESTO
GRACIAS DE ANTEMANO
segun mi tutor no es ninguno de esos protoculos profibus ni el otro.... alguna otra cosa que pueda ser base legal para esto aparte de eso?