TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: zonadjarn en 21 de Octubre de 2007, 12:53:39
-
Muy buenas a todos, necesito que me echeis una mano con un proyecto ya que estoy un poco atascado:
Se trata de un control semafórico a distancia.
Cada semaforo "4 en cada cruce" iria controlado por un PIC y estos mediante 485 "irian todos en el mismo bus" deverian comunicarse con el PC, en el cual se debe monitorizar el estado actucal de cada semaforo.
Para programar estoy indeciso si utilizar el VB.
Me podeis dar alguna idea?...Saludos
-
Bueno mientras alguien me puede ayudar tengo dos dudas esenciales:
1) como puedo saber desde el programa de VB que Pic me esta mandando la informacion "para hacer la accion que precise".
2)Como cada cruce es de 4 semaforos tengo q tener 4 pics.
Mi pregunta: habria que poner un pic central de comunicacion en cada cruce antes de ir al pc? o valdria con conectar todas las salidas 485 de todos los pìc al bus 485 que va al pc "digamos empalmarlos?...Saludos
-
Hola, para implementar la comunicacion, los pic estaran en modo esclavo, y cada uno tendra un numero de identificacion, que al ser consultado por ese numero, te responda con los estados de salida
la implementacion dependera de "hasta donde quieras llegar", y podras emplear desde un pic por semaforo, a un pic por cruce, o a colocar un pic dedicado a la comunicacion... son todas posibilidades..
Suerte!
Norberto
-
Hola, para implementar la comunicacion, los pic estaran en modo esclavo, y cada uno tendra un numero de identificacion, que al ser consultado por ese numero, te responda con los estados de salida
la implementacion dependera de "hasta donde quieras llegar", y podras emplear desde un pic por semaforo, a un pic por cruce, o a colocar un pic dedicado a la comunicacion... son todas posibilidades..
Suerte!
Norberto
Hola muy buenas, te entiendo mas o menos. hay algun manual o algo de como hacer lo de maestros y esclavos con los pic?
Otra cosa, que programa me recomendarias para hacer la programacion en el pC?...Saludos
-
Un poco de filosofía barata sobre el RS485:
Independiente de protocolos hardware y/o software de control de flujo del RS485 mas complejos voy a hablar del sistema mas simple de implementación de comunicaciones RS485.
La idea fundamental que quiero transmitir es la siguiente: Todos los dispositivos colgados en paralelo de las dos líneas de un RS485 pueden hablar al mismo tiempo, pero no deben hablar al mismo tiempo, por que en este caso nadie oirá nada de nada.
Una de las soluciones posibles, la mas simple, es que uno de ellos habla siempre primero, es el MASTER, y todos los demás sólo responden, son los SLAVES.
Escenifiquemos una situación imaginando que tenemos un PIC al que llamamos MASTER y otro PIC al que llamamos SLAVE.
Una posible conversación entre ellos podría ser:
MASTER : "Hola SLAVE"
SLAVE : "Hola MASTER".
Simple y sencillo como juego de chiquillo.
Pero compliquemos un poco el asunto, añadiendo a nuestra Red RS485 un segundo PIC también llamado SLAVE
Nuestra conversación anterior sería:
MASTER : "Hola SLAVE"
SLAVE : "Hola MASTER". SLAVE : "Hola MASTER".
Puafffff, el PIC MASTER habla y los dos PIC's SLAVE lo oyen y le contestan al mismo tiempo. Choque, Crash, Overrun, simultaneidad de tiempo y espacio, el resultado no puede ser mas horrible: nadie escucha nada.
La solución no puede ser mas sencilla: Implementamos lo que conocemos como sistema de POLLING (sondeo, muestreo, pregunta) para ello nombramos de forma distinta a cada SLAVE. Uno de ellos será SLAVE1 y el otro responderá a SLAVE2.
De forma que nuestra conversación será ahora:
MASTER : "Hola SLAVE1"
SLAVE1 : "Hola MASTER".
MASTER : "Hola SLAVE2"
SLAVE1 : "Hola MASTER".
Sólo uno de ellos habla cada vez, primero el MASTER le pregunta al SLAVE1, sólo éste le contesta, después el MASTER le pregunta al SLAVE2 y es entonces este cuando le contesta también. El MASTER está haciendo POLLING y los SLAVES contestan cuando se reconocen en el mensaje del MASTER.
En una forma mas académica: Cada PIC SLAVE guarda un parámetro de configuración del estilo "001", "002", "00x". El PIC MASTER emite un mensaje del estilo "P001:?", todos los SLAVES reciben el mismo mensaje pero sólo el PIC numerado como "001" responderá algo así como "R001:ABCDEFG"
Fijaos como un "P001:?" significaría algo así como "Pregunta para el 001 : ¿Tú quien eres?" y el "R001:ABCDEFG" debería entenderse como "Respuesta de 001 : Yo soy ABCDEFG"
Con esto te aseguras unas comunicaciones simples y fiables. :mrgreen: :mrgreen: :mrgreen:
Un saludo.
-
Mas o menos te entiendo, hay que hacer un barrido de 1 a 1, pero a ver si tienes algun ejemplo de como se haria..Saludos
-
Mas o menos te entiendo, hay que hacer un barrido de 1 a 1, pero a ver si tienes algun ejemplo de como se haria..Saludos
¿Como se haría ... el qué? ¿el contenido de los mensaje que se intercambien? ¿el programa del SERVER? ¿el de los SLAVES? ¿En C? ¿En ASM? :shock:
-
Mas o menos te entiendo, hay que hacer un barrido de 1 a 1, pero a ver si tienes algun ejemplo de como se haria..Saludos
¿Como se haría ... el qué? ¿el contenido de los mensaje que se intercambien? ¿el programa del SERVER? ¿el de los SLAVES? ¿En C? ¿En ASM? :shock:
Bueno te pregunto, el cod ese de identificacion del pic como seria? y como llamarias discriminarias desde el PC cada msje q te llega de algun pic,
el programa tendra 3 cruces con 4 semaforos cada 1 y depende en q cruce pinches apareceran esos 4 semaforos.
Nose si usar VB u otro...Saludos
P.D-->Con algun ejemplito facil de esa comunicacion o tutorial seria valioso en principio, esq otra opcion es usar automatas em vez de pic
-
Hola:
A mi me parece que te preguntaron que lenguae usarás para el pic, no que como irían los semáforos, dependiéndo del lenguaje que uses se te podrá indicar o dar pistas en base a pequeños códigos para que puedas irlo implementarlo a tus necesidades
-
Hola:
A mi me parece que te preguntaron que lenguae usarás para el pic, no que como irían los semáforos, dependiéndo del lenguaje que uses se te podrá indicar o dar pistas en base a pequeños códigos para que puedas irlo implementarlo a tus necesidades
El lenguaje seria en CSS...Saludos
-
Un enlace a un proyecto con RS485 http://www.endtas.com/robot/modules.php?name=News&file=article&sid=183. Espero que te ayude.
-
Ahora una pregunta, creeis que es factible hacer este proyecto mediante PIC? o seria mejor realizarlo con automatas?.
una duda me acaba de surgir ahora con la programacion del Pic en CCS, necesito que el timer sea de 30 segundos, que es lo que los semaforos estaran en verde, no puedo usar el delay, ya que mientras lo esta ejecutando no se puede cancelar nada y no me valdria en caso de q le de al boton de paro de los semaforos...Saludos
-
No habría ningún problema en usar un PIC para dicha tarea.
-
Ahora una pregunta, creeis que es factible hacer este proyecto mediante PIC? o seria mejor realizarlo con automatas?.
una duda me acaba de surgir ahora con la programacion del Pic en CCS, necesito que el timer sea de 30 segundos, que es lo que los semaforos estaran en verde, no puedo usar el delay, ya que mientras lo esta ejecutando no se puede cancelar nada y no me valdria en caso de q le de al boton de paro de los semaforos...Saludos
En realidad si no puedes usar el Delay() te conviene generar una interrupcion cada 5 mseg (por ejemplo) y usar contadores dentro de la interrupcion, comparando los acumuladores, una vez alcanzado el numero de interrupciones, activas un flag y pones en cero el contador.
El flag lo utilizas en el programa principal para ejecutar procesos cada XX tiempo.
La ventaja de este sistema es que con un solo timer tienes varios tiempos diferentes... :D
-
Ahora una pregunta, creeis que es factible hacer este proyecto mediante PIC? o seria mejor realizarlo con automatas?.
una duda me acaba de surgir ahora con la programacion del Pic en CCS, necesito que el timer sea de 30 segundos, que es lo que los semaforos estaran en verde, no puedo usar el delay, ya que mientras lo esta ejecutando no se puede cancelar nada y no me valdria en caso de q le de al boton de paro de los semaforos...Saludos
En realidad si no puedes usar el Delay() te conviene generar una interrupcion cada 5 mseg (por ejemplo) y usar contadores dentro de la interrupcion, comparando los acumuladores, una vez alcanzado el numero de interrupciones, activas un flag y pones en cero el contador.
El flag lo utilizas en el programa principal para ejecutar procesos cada XX tiempo.
La ventaja de este sistema es que con un solo timer tienes varios tiempos diferentes... :D
Podria hacer un bucle de 30 seg utilizando el preescaler del PIC, ya que este va a 4Mhz y con el de 256 seria 1 segundo cada flanco?...Saludos
-
Hola zonadjarn, creo que sería recomendable que empezases tu camino en los PIC por algún proyecto de menos dificultad, lo típico de hacer parpadear leds, comunicaciones RS232, y prácticas con timers, conversores analógicos y otros periféricos.
Una vez que estuvieras rodado en esas batallas, podrías acometer una guerra como la que te planteas.
Deduzco por las preguntas que haces que el proyecto supera ampliamente tus conocimientos/experiencia con los PIC, por eso te recomiendo algo más sencillito.
-
Hola zonadjarn, creo que sería recomendable que empezases tu camino en los PIC por algún proyecto de menos dificultad, lo típico de hacer parpadear leds, comunicaciones RS232, y prácticas con timers, conversores analógicos y otros periféricos.
Una vez que estuvieras rodado en esas batallas, podrías acometer una guerra como la que te planteas.
Deduzco por las preguntas que haces que el proyecto supera ampliamente tus conocimientos/experiencia con los PIC, por eso te recomiendo algo más sencillito.
la cuestion que nunca he utilizado el tmr0 para contar tiempo, soloolo habia usado como contador, mas o menos entiendo de pic a eccepcion de USart ese, no obstante si me podrias alumbrar un poko con como hacer el tmr0 a 30 seg?....Saludos y gracias
-
pasate por éste link
1.- Ejemplitos en C para 16F648A por Vszener (http://www.todopic.com.ar/foros/index.php?topic=4530.0)
hay bastaaaantes ejemplos sobre pics para ir entendiendo el funcionamiento básico, igual como te recomendó manolo, tienes que empezar con algo sencillo, después de tener una idea, te sugiero que busques información teorica sobre el protocolo que quieres implementar, después si, puedes buscar un ejemplo similar y estudiarlo.
otros enlaces:
Indice de Hilos Destacados en el sub-Foro de C para Microcontroladores. (http://www.todopic.com.ar/foros/index.php?topic=14634.msg89357#msg89357)
a usar el buscador...
-
zonadjarn, acabo de postear el hilo El RS485, un Relé en la lejanía: Hardware y Software (http://www.todopic.com.ar/foros/index.php?topic=19057.0) que creo que puede ayudarte un poco.