TODOPIC
Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: huron123 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. :)
-
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
-
...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.
-
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.
-
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 (http://ww1.microchip.com/downloads/en/DeviceDoc/35007b.pdf)
Fijate aca:
Almacen del Assembler (http://www.todopic.com.ar/foros/index.php?board=3.0)
podés encontrar cosas como esto:
empleo de un solo pin para TX/rx en rs232 (http://www.todopic.com.ar/foros/index.php?topic=5967.msg39713#msg39713)
-
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
-
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.