Autor Tema: Proyecto : Interprete Redes petri  (Leído 3121 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado huron123

  • PIC10
  • *
  • Mensajes: 4
Proyecto : Interprete Redes petri
« en: 23 de Diciembre de 2007, 08:48:38 »
Hola soy un estudiante de ingenieria informatica y quisiera saber si podriais aclararme algunas dudas sobre el pic 16f84, bueno haber si consigo explicarme.

Nuestro proyecto consiste en hacer un interprete de redes petri capaz de controlar una maqueta robotica. Para ello hemos echo un programa en c capaz de interpretar y hacer evolucionar diferentes redes de petri. Para la conexion entre el robot y el ordenador contamos con un pic 16f84 para conectarlo con el pc mediante puerto serie y con los sensores mediante un cable bus.

El problema es el siguiente : El programa en c esta mas o menos echo el problema es la conexion entre el pc y el pic. Lo que sabemos es que entre el pic y el pc tenemos que usar un max232 para la diferencia de voltaje. Hasta ay todo mas o menos claro el problema es el programa en asembler del pic.
Alguien sabe como hacer para recibir datos del pc al pic  y mandarlos al pc mediante puerto serie con el protocolo rs232?? Si alguno tiene un programa echo si me lo pudiese subir a alguna pagina o mandarmelo por mail estaria muy agradecido.

Por otra parte tambien necesitamos conseguir que el pic sea capaz de mandar los datos una vez recibidos del pc a los motores del robot que tenemos y tambien poder recibir el estado de los sensores de la maquina. Aun asi la parte en la que vemos mayor problema es la conexion entre pc y pic por puerto serie. Nuestra intencion es mandar del pc una matriz 1x6,por ejemplo : (1 0 1 0 0 1) esto es el estado del marcado inicial de la red petri y lo que se recibe del pic sera el estado de los sensores de la maquina representado por 1 y 0 en  el caso de que este actibo o este desactivado.

 Espero haberme explicado bien y si alguien puede ayudarme se lo agradeceria.

GRACIAS por adelantado.  :)
« Última modificación: 24 de Diciembre de 2007, 06:55:53 por huron123 »

Desconectado jfh900

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Proyecto : Interprete Redes petri
« Respuesta #1 en: 23 de Diciembre de 2007, 09:34:28 »
Antes de nada bienvenido al foro.

Interesante proyecto el que planteas ¿podrías ampliar un poco más el concepto de Redes de Petri?.

Por lo que se refiere a la comunicación entre el pic y el pc en este foro hay muchisimos ejemplos de como hacerlo, un link interesante te lo pongo aquí (es de nuestro querido RedPic):

http://www.todopic.com.ar/foros/index.php?topic=4573.0

De tu mensaje deduzco que usas "C", ¿tienes algún compilador en particular para los pic?.

Si tienes alguna pregunta, no dudes en consultarla.

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado Menta

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 607
Re: Proyecto : Interprete Redes petri
« Respuesta #2 en: 23 de Diciembre de 2007, 10:31:13 »
...Hasta ay todo mas o menos claro el problema es el programa en asembler del pic.

El pic 16F84 no tiene puerto serie. Se puede implementar por sofware es bastante simple usando un compilador de C, pero en asembler es complicado. Si no tienes experiencia en microcontroladores te recomiendo que uses un compilador PICC para programar el pic y si esto no fuese posible por algún motivo, entonces usa otro pic que tenga puerto serie por hardware. consulta por ellos en www.microchip.com

Me despierta curiosidad eso de las redes petri... que son?

Saludos.
« Última modificación: 23 de Diciembre de 2007, 10:33:41 por Menta »
     

Desconectado huron123

  • PIC10
  • *
  • Mensajes: 4
Re: Proyecto : Interprete Redes petri
« Respuesta #3 en: 23 de Diciembre de 2007, 12:26:33 »
Bueno gracias por los aportes que abeis echo.
El pic va metido en un pictrainer que tiene puerto serie y por ay se conecta al pc  por otro lado tiene  un bus para usar con el robot. El programa en c solamente es el interprete, este programa controla cualquier tipo de red petri que se le meta en tipo matriz. Este programa hace la evolucion y manda el marcado nuevo al pic este marcado es el estado de los motores del robot y recibe el estado de los sensores de la maquina pasando por el pic. El programa del pic tengo que hacerlo en lenguaje ensablador.
El problema esta en que no se como hacer para mandar y recibir datos del pc al pic, vamos que el problema esta en el programa del pic.

Desconectado Menta

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 607
Re: Proyecto : Interprete Redes petri
« Respuesta #4 en: 23 de Diciembre de 2007, 13:24:52 »
La placa "Pic trainer" es conocida?, tenés las hojas de especificaciones de ella? Te pregunto esto porque como te digo, el pic no tiene puerto serie, posiblemente el puerto serie de la placa sea para programarlo solamente, o alguna expansión de las I/O del pic.

hoja del 16F84

Fijate aca:
Almacen del Assembler

podés encontrar cosas como esto:
empleo de un solo pin para TX/rx en rs232
     

Desconectado huron123

  • PIC10
  • *
  • Mensajes: 4
Re: Proyecto : Interprete Redes petri
« Respuesta #5 en: 18 de Enero de 2008, 12:31:41 »
Hola si alguien fuera tan amable de echarnos un cable con nuestro PIC se lo agradeceriamos. Bueno voy a intentar explicar el porblema para que podais ayudarnos.

Estamos haciendo un controlador de redes petri programado en c que se conectara con una maquina mediante un pic 16f84a. El pic debera mandar el estado de los sensores de la maquina, estos seran representados mediante un switch conectado a las patas rb0,rb1,rb2,rb3, al pc. Para ello primero leemos el estado de los switch y los pasamos a una variable de hay usando rotar a la derecha los pasamos de uno en uno por el puerto serie al ordenador. Para pasar por el puerto serie usamos la pata ra1 y pasamos byte a byte osea en 4 byte el estado de esos switches. El problema lo tenemos al recibir ya que no recibe nada. Por otra parte despues de mandarlos tendremos que esperar a que nos responda el programa del ordenador. Dicho programa mandara el estado de los motores, que seran representados mediante diodos led y que saldran por las patas rb4,rb5,rb6 y rb7 del pic para pasar luego a los led. Para leer del ordenador usamos la pata ra0 y asta que el ordenador no nos mande el bit de inicio osea el 0 no recibiremos nada. Seran 4 los datos que se nos mandaran, asi que tendremos 4 byte para recibir y de la informacion de estos byte solo nos sera util el primer bit del byte. Ahora dejo el programa para que lo mireis y comenteis si os parece bien y si le veis algun fallo. Compilar compila bien pero igual la forma de ejecucion esta mal.


 __CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST   p=16F84A   ;Tipo de procesador
#INCLUDE   <P16F84A.INC>   ;Definiciones de registros internos

#DEFINE PCS PORTA,0
#DEFINE PCI PORTA,1

Temporala   EQU 0x10
sentsorekop   EQU 0x11
prueba      EQU 0x12
PDel0      EQU 0x13
Temporala2   EQU 0x14
konpara      EQU 0x15
kont      EQU 0x16

Inicio
   bsf STATUS,RP0
   movlw b'00000001'
   movwf TRISA
   movlw b'00001111'
   movwf TRISB
   bcf STATUS,RP0
   movlw d'1'
   movwf kont

Hasi
   clrf Temporala
   clrf Temporala2
   clrf prueba
   clrf sentsorekop
   clrf PDel0
;--------------------Sentsoreak irakurri----------------------------------

   MOVF PORTB,0 ;mueve el valor de "PORTB" a "W".
   MOVWF Temporala ;mueve el valor de "W" a "Temporala".
   btfsc kont,F
   MOVWF konpara
   btfss kont,F
   goto konpara
   btfsc kont,F
   decf kont,F
   
;---------------------------Sentsoreak PC-ra--------------------------------

   movlw d'4'
   movwf sentsorekop

contador2
   bcf PCI
   call PDelay104
   rrf Temporala,f
   btfsc STATUS,C;mirar si el primer (el bit que se quiere mandar) es 1
   goto poner1 ;
   bcf PCI;si es 0 ponerlo a 0
jarraia
   call PDelay728
   bsf PCI
   call PDelay208
   decfsz sentsorekop,F
   goto contador2
   goto pcpic

poner1  bsf PCI
   goto jarraia

;----------------------------PC -> PIC-----------------------------------------

pcpic   
   clrf Temporala2
   movlw d'4'
   movwf sentsorekop   

contador3
   movf PORTA,0
   movwf prueba
   rrf prueba,f
   btfsc STATUS,C;mirar si el primer (el bit que se quiere mandar) es 1
   goto contador3         
   call PDelay156
   bcf STATUS,C
   movf PORTA,0
   clrf prueba
   movwf prueba
   rrf prueba,f
   rrf Temporala2,F
   call PDelay936
   decfsz sentsorekop,F
   goto contador3
   rrf Temporala2,f
   rrf Temporala2,f
   rrf Temporala2,f
   rrf Temporala2,f

;----------------------------PIC -> Makina-------------------------------------
       
   rrf Temporala2,f
   btfsc STATUS,C      ;mirar si el primer (el bit que se quiere mandar) es 1
   goto poner17      ;si es uno ponerlo a 1
   bcf PORTB,7
   

jarraian6
   rrf Temporala2,f
   btfsc STATUS,C      ;mirar si el primer (el bit que se quiere mandar) es 1
   goto poner16      ;si es uno ponerlo a 1
   bcf PORTB,6

jarraian5    
   rrf Temporala2,f
   btfsc STATUS,C      ;mirar si el primer (el bit que se quiere mandar) es 1
   goto poner15       ;si es uno ponerlo a 1
   bcf PORTB,5

jarraian4    
   rrf Temporala2,f
   btfsc STATUS,C      ;mirar si el primer (el bit que se quiere mandar) es 1
   goto poner14       ;si es uno ponerlo a 1
   bcf PORTB,4
   
bukaera   
   goto Hasi

poner17   
   bsf PORTB,7
   goto jarraian6
poner16   
   bsf PORTB,6
   goto jarraian5
poner15   
   bsf PORTB,5
   goto jarraian4
poner14   
   bsf PORTB,4
   goto bukaera

;Subrutina 104ko atzerapena

PDelay104
     movlw     .24     
     movwf     PDel0
     goto PLoop0        
 

;Subrutina 728ko atzerapena

PDelay728   
     movlw     .180     
        movwf     PDel0     
     goto PLoop0

           
;Subrutina 728ko atzerapena

PDelay208
     movlw     .50       
        movwf     PDel0     
     goto PLoop0

;Subrutina 156ko atzerapena

PDelay156 
     movlw     .37       
        movwf     PDel0
     goto PLoop0

;Subrutina 936ko atzerapena

PDelay936
     movlw     .232     
        movwf     PDel0
     goto PLoop0

PLoop0  clrwdt             
        decfsz    PDel0, 1 
        goto      PLoop0   
PDelL1  goto PDelL2         
PDelL2  clrwdt             
        return   

;Konparatzeko subrutina

konparatu
   movf Temporala,w
   subwf konpara,w
   btfsc STATUS,Z
   goto Hasi
   movlw d'1'
   movwf kont
   goto Hasi
   

end

Desconectado fartet

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 145
Re: Proyecto : Interprete Redes petri
« Respuesta #6 en: 19 de Enero de 2008, 21:03:42 »
Las redes de Petri viene a ser una herramienta gráfica que permite describir la evolución de un sistema. Se empleaban especialmente en tareas tanto de análisis como de síntesis de automatismos en las diversas ingienerias.

Para su campo de aplicación vienen a ser como los organigramas para lenguajes informáticos, o como los GRAFCET en sistemas industriales.

Una red de Petri suficientemente documentada contiene todas las variables de información (entrada), de estado, de evolución entre estados y de salida, amen de permitir indicar en cada momento el estado activo del sistema, por lo que resulta factible el crear protocolos de trabajo que permitan implementar los programas a aplicar al sistema de control.