Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?
24/04/2012 #1881

Avatar de reyvilla

Ok el codigo lo modifique para que trabaje a 2400 invertido, ya que no se calcular el que tu hicistes que es 16468, trate de calcularlo pero no pude...Dime como lo calculaste

Código:
@ DEVICE PIC16F628A         
@ DEVICE INTRC_OSC_NOCLKOUT 
@ DEVICE WDT_OFF        
@ DEVICE PWRT_OFF       
@ DEVICE MCLR_OFF       
@ DEVICE BOD_OFF        
@ DEVICE LVP_OFF        
@ DEVICE CPD_OFF        
@ DEVICE PROTECT_OFF
 
include "modedefs.bas"
DEFINE OSC 4
CMCON=7
TRISA = %00000000 'todo el puerto a como salida
TRISB = %00000001 'todo el puerto b como salida menor portb.0 es entrada
SYMBOL REL1 = PORTA.0
SYMBOL RX = PORTB.0   'RX ENTRADA 
SYMBOL TX = PORTB.1   'TX SALIDA
B0 VAR BYTE


INICIO:
SerIn2 RX,16780,[WAIT("Activar"),SKIP 2,DEC B0]
IF B0 = 1 THEN
HIGH REL1
REL1 = 1
PAUSE 100
ENDIF
ENVIAR:
PAUSE 1000
serout2 Tx,16780,["AT+CMGF=1",13]
PAUSE 1000
serout2 Tx,16780,["AT+CMGS=",34,"092661649",34,13]
PAUSE 1000
SEROUT2 Tx,16780,["R1 activado ",#B0,26]
PAUSE 1000
GOTO INICIO
24/04/2012 #1882


rey a mi me avienta basura... le hize igual que tu y no me manda nada...

definitavamente yo creo que el error esta en la configuracion de los baudios paridad polaridad etc..
24/04/2012 #1883

Avatar de reyvilla

No fijate yo lo cambie a 16780 que es = 2400 baud , sin paridad , invertido
pero tienes que enviarle Activar, osea con la primera letra en mayuscula y con 2 espacios y luego enter y veras como si activa el rele 1, te dejo el esquema modificado.

Edit: por cierto si quieres cámbiale el tiempo
ENVIAR:
PAUSE 10000
a 1000 para que sea mas rápida la respuesta
Archivos Adjuntos
Tipo de Archivo: rar pull1988 sms.rar (28,4 KB (Kilobytes), 66 visitas)
24/04/2012 #1884


O si ya...

Código:
@ DEVICE PIC16F628A         
@ DEVICE INTRC_OSC_NOCLKOUT 
@ DEVICE WDT_OFF        
@ DEVICE PWRT_OFF       
@ DEVICE MCLR_OFF       
@ DEVICE BOD_OFF        
@ DEVICE LVP_OFF        
@ DEVICE CPD_OFF        
@ DEVICE PROTECT_OFF
 
include "modedefs.bas"
DEFINE OSC 4
CMCON=7
TRISA = %00000000 'todo el puerto a como salida
TRISB = %00000001 'todo el puerto b como salida menor portb.0 es entrada
SYMBOL REL1 = PORTA.0
SYMBOL RX = PORTB.0   'RX ENTRADA 
SYMBOL TX = PORTB.1   'TX SALIDA
B0 VAR BYTE
serout2 Tx,16780,[13] 'ponle esta linea tambien

INICIO:
SerIn2 RX,16780,[WAIT("Activar"),SKIP 2,DEC B0]
IF B0 = 1 THEN
HIGH REL1
REL1 = 1
PAUSE 100
ENDIF
ENVIAR:
PAUSE 1000
serout2 Tx,16780,["AT+CMGF=1",13]
PAUSE 1000
serout2 Tx,16780,["AT+CMGS=",34,"092661649",34,13]
PAUSE 1000
SEROUT2 Tx,16780,["R1 activado ",#B0,26]
PAUSE 1000
GOTO INICIO
si ya vi porque me mandaba basura... fijate y el primer envio es basura...
24/04/2012 #1885


a ya amigo reyvilla ahora te entendi lo de los fuses, te comento, yo no los utilizo porque yo quemo el PIC con el programa pickit 2 y utilizo el ICprog para activar o desactivar el Boden, MCRL, etc,etc, entonces ahi se genera una palabra de configuracion en hexadecimal, esa palabra la convierto en binario y ese codigo en binario lo introduzco en el pickit2, parece largo el proceso pero no lo es en realidad.

Ahora paso a indicarte como calculé los 9600 baudios con logica invertida:

la ecuacion para calcular los baudios con logica normal es: (1000000/9600)-20=84.1666...que cojiendo la parte entera es 84.
luego de eso se lo convierte a binario: 1010100 q para este caso es de 7 bits, despues se debe completar hasta el bit 13 con paridad nula y el bit 14 para debe ser 1 para q indique q es logica negada o invertida osea: 10000001010100 que corresponde al codigo decimal 16468.

Espero haberme explicado, sino culquier duda estaré presto a responderla.

Tu codigo ya activa el rele?

---------- Actualizado después de 9 minutos ----------

reyvilla dijo: Ver Mensaje
No fijate yo lo cambie a 16780 que es = 2400 baud , sin paridad , invertido
pero tienes que enviarle Activar, osea con la primera letra en mayuscula y con 2 espacios y luego enter y veras como si activa el rele 1, te dejo el esquema modificado.

Edit: por cierto si quieres cámbiale el tiempo
ENVIAR:
PAUSE 10000
a 1000 para que sea mas rápida la respuesta
Amigo reyvilla solo se activa con la palabra "Activar" y dos espacios???, entonces si queiro activar un segundo rele tendría que poner otra palabra ya que solo con esa palabra y dos espacios se activaria cualquier rele.
24/04/2012 #1886

Avatar de reyvilla

Lubeck a que se debe ese primer envio que es basura, ya que si lo vuelves activar si lo envía bien.

Amigo pull1988, ya me sospechaba algo asi mas me faltaba ese ultimo dato del arreglo de los últimos bit, gracias por el dato, y si activa el rele, pero a tu código ahora es que le falta para que sea una aplicación real, ya que si es un solo rele no habria problema pero si son mas, tendrías que enviar el dato del rele activado, como lo hice en la ultima linea, osea enviar lo que recibiste, o en tal caso verificar el pin del rele que este realmente activo, digamos que mandas activar el rele 1, en el receptor debes responder cual fue el dato recibido y si es correcto activas el rele correspondiente y luego indicas que fue activado.
24/04/2012 #1887


Lubeck a que se debe ese primer envio que es basura, ya que si lo vuelves activar si lo envía bien.
se me ocurre que al hacer el primer envio cambia el puerto como salida o algo y el primer bit no lo manda bien... si me explico?...
24/04/2012 #1888


reyvilla dijo: Ver Mensaje
Lubeck a que se debe ese primer envio que es basura, ya que si lo vuelves activar si lo envía bien.

Amigo pull1988, ya me sospechaba algo asi mas me faltaba ese ultimo dato del arreglo de los últimos bit, gracias por el dato, y si activa el rele, pero a tu código ahora es que le falta para que sea una aplicación real, ya que si es un solo rele no habria problema pero si son mas, tendrías que enviar el dato del rele activado, como lo hice en la ultima linea, osea enviar lo que recibiste, o en tal caso verificar el pin del rele que este realmente activo, digamos que mandas activar el rele 1, en el receptor debes responder cual fue el dato recibido y si es correcto activas el rele correspondiente y luego indicas que fue activado.
Amigo reyvilla sabes que a mi no se me activa le pongo Activar y 2 espacios tal como dijiste y nada sin resultados
24/04/2012 #1889


es Activar + 2 espacios + 1 + ascii 13

Palabra "Activar" mas dos espacios mas un uno mas el retorno ascii 13
24/04/2012 #1890


Pull1988 dijo: Ver Mensaje
Hola amigos, quisiera por favor alguien me ayudara intruyendome un poco sobre el siguiente tema que pongo a su consideracion:
Sucede que estoy por presentar mi proyecto de grado el cual consiste en automatizar mi departamento usando PICs; bueno basicamente lo que hace el PIC es recibir un SMS enviado desde cualquier movil y accionar diferentes cosas en base a reles, en otras palabras el PIC recibe un mensaje y este le manda una señal a un o varios reles y estos proceden abrise o cerrarse; el problema que se me ha presentado esque no puedo independizar los reles, osea si quiero activar el rele dos, primero debo activar el rele uno, porque en el codigo fuente esta primero la linea que contiene al rele uno, entonces quiero saber si hay la posiblidad de saltarme esas lineas de codigo para que no siga el orden logico o bien sea poner condicionantes para que si a determinada accion se active cualquier rele ya sea el uno el dos, el tres, etc.

Adjunto mi codigo fuente que este hecho en Basic, en microcode studio.

Cualquier ayuda m sería de gran utilidad.

Gracias
parce yo creo que el problema esta en igualar las variables, es decir, que mensaje se envia para activar el rele. supongamos que en el mensaje vas a enviar un numero cualquiera entonces tenes que guardar ese valor en una variable y luego decirle al programa si esa variable es igual al numero recibido entonces 1 a pin.


x var byte

if x = 24 then

porta.0 = 1

endif.

he leido algo de comandos AT, la verdad es que no le he puesto mucha atencion el serin guarda el valor entrante en una variable, esa es la variable a la que tenes que condicionar.

pillate este ejemplo a ver si te sirve:

INCLUDE "modedefs.bas" ;incluyen los modos de comunicación
@ device XT_OSC ;cambia a oscilador XT en el IC-Prog
led VAR portb.7 ;nombre led al puerto b.7
dat VAR BYTE ;variable de almacenamiento de 255
num VAR BYTE ;variable para almacenar el contador
num=0 ;contenido inicial para la variable num
GOSUB ledr ;ir a leds para saber si ya arrancó el PIC
Inicio:
SERIN portb.0,T2400,dat ;esperar el dato y guardarlo en dat
IF dat = "C" THEN contar ;si dat es una C empiece a contar
GOSUB ledr
GOTO inicio ;ir a esperar el siguiente caracter
contar:
HIGH led ;led sólo encendido indica enviando datos
SEROUT portb.1,T2400,[#num,"-"] ;enviar el contenido decimal de la variable num
;seguido de un signo menos
num=num+1 ;incrementar la variable 1 x 1
PAUSE 1000 ;esperar 1 s
GOTO contar ;ir a subrutina contar
ledr: ;subrutina ledr
HIGH led
PAUSE 200
LOW led
RETURN
END
24/04/2012 #1891


Bueno antes que nada confirmado ya se me activo el rele tuve que cambiarle el al seri2 le corresponde el Tx, que es el puertob.1 y serout2 RX que es el puerto b.0 tu le tienes al reves amigo reyvilla, gracias por ese codigo mañana lo reviso para ya continuar haciendolo con mas reles pero por el momento se me ocurre lo siguiente.
Para el rele uno es Activar 1 y un enter si estamos a traves de un hyperterminal, tal cual esta escrito ahi, por lo tanto para el rele dos deberia ser Activar 2 diciendole que si B0=2 active el rele 2
24/04/2012 #1892

Avatar de reyvilla

Si de echo por eso te dije que hay que estar pendiente recuerda que serout es una salida por lo tanto correponde a tx y de igual forma para rx aqui un video de el codigo y como funciona este activa hasta 5 rele:

24/04/2012 #1893


Bueno lo importante esque poco a poco vamos depurando esta situacion, ahora lo malo esq con cualquier numero tu puedes activar el mismo rele, si pensamos en un caso real, estaria mal q mandemos un SMS con la palabra Activar 2 por ejm. y se active unicamente el rele 1, era por esa razon que yo al principio le puse B0="1"para que solo me reconociera el 1 y asi hacer una difrenciacion de los reles, osea si quieria el rele tres por ejm B0 tendria q ser igual a "3" para que cuando ponga Activar 3 solo se active el rele 3, eso deberiamos depurarle amigos, el día de mañana continuaré trabajando en eso puesto que para mi ha sido el final en este día, ha sido muy sacrificado pero muy productivo este día, les agradezco por su interes, una buena noche
24/04/2012 #1894

Avatar de reyvilla

Si te fijas bien en el video activo dependiendo del mensaje una salida del puerto A, si es 1 activa el pin 0 del puerto A, si el mensaje es 2 activa el pin 1 del puerto A y asi sucesivamente chequea bien y veras

El codigo es este:
Código:
@ DEVICE PIC16F628A         
@ DEVICE INTRC_OSC_NOCLKOUT 
@ DEVICE WDT_OFF        
@ DEVICE PWRT_OFF       
@ DEVICE MCLR_ON       
@ DEVICE BOD_OFF        
@ DEVICE LVP_OFF        
@ DEVICE CPD_OFF        
@ DEVICE PROTECT_OFF
 
include "modedefs.bas"
DEFINE OSC 4
CMCON=7
TRISA = %00000000 'todo el puerto a como salida
TRISB = %00000001 'todo el puerto b como salida menor portb.0 es entrada
SYMBOL REL1 = PORTA.0
SYMBOL REL2 = PORTA.1
SYMBOL REL3 = PORTA.2
SYMBOL REL4 = PORTA.3
SYMBOL REL5 = PORTA.4
SYMBOL REL6 = PORTA.5

SYMBOL RX = PORTB.0   'RX ENTRADA 
SYMBOL TX = PORTB.1   'TX SALIDA
B0 VAR BYTE
TX = 1
'serout2 Tx,16780,[13] 'ponle esta linea tambien

INICIO:
SerIn2 RX,16780,[WAIT("ACTIVAR"),SKIP 2,DEC B0]

SELECT CASE B0

CASE 0
serout2 Tx,16780,["ERROR DE COMANDO"]
GOTO INICIO
CASE 1
HIGH REL1
PAUSE 1000
GOTO ENVIA2
GOTO INICIO

CASE 2
HIGH REL2
PAUSE 1000
GOTO ENVIA2
GOTO INICIO
CASE 3

HIGH REL3
PAUSE 1000
GOTO ENVIA2
GOTO INICIO
CASE 4

HIGH REL4
PAUSE 1000
GOTO ENVIA2
GOTO INICIO
CASE 5

HIGH REL5
PAUSE 1000
GOTO ENVIA2
GOTO INICIO
end select

GOTO INICIO
ENVIA2:
serout2 Tx,16780,["AT+CMGF = ",#B0,13]
PAUSE 1000
serout2 Tx,16780,["AT+CMGS=",34,"092661649",34,13]
PAUSE 1000
SEROUT2 Tx,16780,["R1 activado ",#B0,26]
GOTO INICIO
24/04/2012 #1895


a ok no me fije en eso, pero le modificaste el programa? pusiste algo para hacer ese reconocimiento??
24/04/2012 #1896

Avatar de reyvilla

No fue mucho casi todo es copiar y pegar y colocar un select case y listo, claro esta ese seria la base del programa como tal, ya que falta la parte de desactivar y la parte de verificación, para saber si esta activo o no el rele
24/04/2012 #1897


si tienes razon pero una pregunta para que sirve esa linea de "ERROR DE COMANDO"?
Por cierto muy util ese select, se me ocurre que para desactivar solo se coloque en la rutina INICIO un serin2 con la palabra desactivar y hacer otro select para desactivar los 5 reles
24/04/2012 #1898

Avatar de reyvilla

Es una opción que se me ocurrió, en caso de recibir un comando no deseado o que no este dentro de los comandos normales, en fin puedes quitarlo, y bueno eso seria una idea para empezar ya lo demas esta de parte de cada quien ahora espero tu gran aporte cuando lo termines
24/04/2012 #1899


por supuesto amigo reyvilla, ya mañana todo lo que yo vaya avanzando lo iré compartiendo con Uds.
24/04/2012 #1900


Prueben este....
Código:
@ DEVICE PIC16F628A         
@ DEVICE INTRC_OSC_NOCLKOUT 
@ DEVICE WDT_OFF        
@ DEVICE PWRT_OFF       
@ DEVICE MCLR_ON       
@ DEVICE BOD_OFF        
@ DEVICE LVP_OFF        
@ DEVICE CPD_OFF        
@ DEVICE PROTECT_OFF
 
DEFINE OSC 4
CMCON=7
TRISA = %00000000 'todo el puerto a como salida
TRISB = %00000001 'todo el puerto b como salida menor portb.0 es entrada

SYMBOL RX = PORTB.0   'RX ENTRADA 
SYMBOL TX = PORTB.1   'TX SALIDA
B0 VAR BYTE
TX = 1
serout2 Tx,16780,[13] 'ponle esta linea tambien

INICIO:
SerIn2 RX,16780,[WAIT("ACTIVAR"),SKIP 2,DEC B0]

PortA=PortA+DCD B0

serout2 Tx,16780,["AT+CMGF = ",#B0,13]
PAUSE 1000
serout2 Tx,16780,["AT+CMGS=",34,"092661649",34,13]
PAUSE 1000
SEROUT2 Tx,16780,["R1 activado ",#B0,26]
GOTO INICIO
empieza en rele 0 osea "activar 0"
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.