Autor Tema: Ayuda!.Problemas con un programa simple  (Leído 5934 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado joruji

  • PIC10
  • *
  • Mensajes: 34
Ayuda!.Problemas con un programa simple
« en: 20 de Noviembre de 2006, 09:58:43 »
Hola a todos, estoy haciendo pruebas con un 16F877 y Pic Basic Pro. El problema es que he hecho un programilla simple pero no hay manera de que funcione de la manera que yo quiero. A ver si hay alguien que me pueda echar una mano..., por cierto, no llevo mucho en ésto.

Éste es el programa:

--------------------------------------------------------------------------------------------
include "bs2defs.bas"
define OSC 8                     
define LOADER_USED 1                   
                   
'SEÑALES

oute1 var portb.0
oute2 var portb.1
msg1 var portd.4
msg2 var portd.5
msg3 var portd.6
msg4 var portd.7
msg5 var portd.2


alarma var portb.4


'VARIABLES

i var byte
comprobacion var byte[2]
abrele var byte[2]
rele var byte[2]
reles var byte[2]:reles[0] = "R":reles[1] = "E"
rele1 var byte[2]:rele1[0] = "R":rele1[1] = "1"
rele2 var byte[2]:rele2[0] = "R":rele2[1] = "2"
rele3 var byte[2]:rele3[0] = "R":rele3[1] = "3"
abrir var byte[2]:abrir[0] = "A":abrir[1] = "B"


INICIO:

if msg1 = 1 then
    comprobacion[0] = "R"
    comprobacion[1] = "E"
    rele[0] = "R"
    rele[1] = "1"
    abrele[0] = "A"
    abrele[1] = "B"
else   
if msg2 = 1 then
    comprobacion[0] = "R"
    comprobacion[1] = "E"
    rele[0] = "R"
    rele[1] = "1"
    abrele[0] = "C"
    abrele[1] = "E"
else
if msg3 = 1 then
    comprobacion[0] = "R"
    comprobacion[1] = "E"
    rele[0] = "R"
    rele[1] = "2"
    abrele[0] = "A"
    abrele[1] = "B"
else
if msg4 = 1 then
    comprobacion[0] = "R"
    comprobacion[1] = "E"
    rele[0] = "R"
    rele[1] = "2"
    abrele[0] = "C"
    abrele[1] = "E"
else
if msg5 = 1 then
    comprobacion[0] = "R"
    comprobacion[1] = "E"
    rele[0] = "R"
    rele[1] = "7"
    abrele[0] = "A"
    abrele[1] = "B"

else
    goto INICIO
endif
endif
endif
endif
endif



for i=0 to 1   
if comprobacion <> reles then error   
next
rel1:
for i=0 to 1
if rele<> rele1 then rel2
next
for i=0 to 1
if abrele<>abrir then cerrar
next
high oute1
goto INICIO     
cerrar:
low oute1
goto INICIO

rel2:
for i=0 to 1
if rele<> rele2 then rel3
next
for i=0 to 1
if abrele<>abrir then cerrar2
next
high oute2
goto INICIO   
cerrar2:
low oute2
goto INICIO

rel3:
for i=0 to 1
if rele<> rele3 then error
next
for i=0 to 1
if abrele<>abrir then cerrar3
next

goto INICIO   
cerrar3:

goto INICIO


error:

for i=0 to 2   
    high alarma
    pause 1000
    low alarma
    pause 1000
next   
goto INICIO
   
end
----------------------------------------------------------------------

Ahora explico un poco, el programa es para hacer pruebas, no está ni mucho menos completo, por ejemplo lo de msg1...msg5 son valores que le asigno a las variables para poder hacer las comprobaciones (que no me salen), en un futuro éstas cadenas de caracteres las quiero mandar mediante un módem, pero de momento sólo les asigno valores.

Tal  y como yo quiero que funcione el programa sería de la siguiente manera:
-Si activo la patilla del pic msg1, se encenderá un led correspondiente a la patilla oute1
-Si activo msg2, el led oute1 se apagará.
-Lo mismo con msg3 y msg4, que encenderán y apagarán el led correspondiente a oute2.
-Si activo msg5, éste contiene una cadena (R7) que dará error (led alarma intermitente) al hacer la comparación de caracteres rele con rele3
-Si no activo ninguna entrada, no debe encenderse ningún led de salida.

Ahora pongo lo que en realidad me hace:
-Si no activo nada, el led de alarma está en funcionamiento y además, al poco tiempo, el led oute1 se enciende.
-Si activo msg5, hace exactamente lo mismo.
-Si activo msg1 el led oute1 se enciende.
-Con msg2 el led ni se apaga.
-Con msg3 el led oute2 se enciende (¡¡pero también oute1!!)
-con msg4 apago el led oute2.


En resumen, el led salida oute2 controlado por msg3 y msg4 parece que funciona como debe ser, pero el led oute1 hace lo que le da la gana. Lo extraño es que el código es el mismo para uno que para otro pero no va. He probado también asignarle otra patilla al oute1, o intercambiarlos pero siempre da el mismo problema. No se que puede ser..., además lo de el led de alarma que se enciende cuando no activas ninguna entrada también me tiene mosqueado.

A ver si algún alma caritativa pierde un poco de tiempo echandole un vistazo al programa y me ayuda un poco.


Saludos.

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Ayuda!.Problemas con un programa simple
« Respuesta #1 en: 20 de Noviembre de 2006, 14:41:38 »
Puedes complicarte menos la vida y usar el select case poniendo todas las entradas en un puerto y las salidas en otos.

suponiendo que los actives con 1 y las entradas estan el el PORTD:

msg1--rd0
msg2..rd1
msg3..rd2
msg4..rd3
msg5..rd4


SELECT CASE PORTD
 case %00000000
       gosub all_off
 case %00000001
       HIgh Led1
 case %00000010
       low led1
 case %00000100
       high led2
 case %00001000
       low led2
 case %00010000
    gosub compara
ens select

obvio es un ejemplo las rutinas las tienes que implementar bien tu.
       




"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado joruji

  • PIC10
  • *
  • Mensajes: 34
Re: Ayuda!.Problemas con un programa simple
« Respuesta #2 en: 21 de Noviembre de 2006, 07:19:05 »
He sustituido la parte de asignación de msg1...mg5 por un "select case" para probar, en concreto he puesto lo siguiente:

SELECT CASE PORTD
 case %00000000
       goto INICIO
 case %00010000
    comprobacion[0] = "R"
    comprobacion[1] = "E"
    rele[0] = "R"
    rele[1] = "1"
    abrele[0] = "A"
    abrele[1] = "B"
 case %00100000
    comprobacion[0] = "R"
    comprobacion[1] = "E"
    rele[0] = "R"
    rele[1] = "1"
    abrele[0] = "C"
    abrele[1] = "E"
 case %00000100
    comprobacion[0] = "R"
    comprobacion[1] = "E"
    rele[0] = "R"
    rele[1] = "7"
    abrele[0] = "A"
    abrele[1] = "B"
 case %01000000
    comprobacion[0] = "R"
    comprobacion[1] = "E"
    rele[0] = "R"
    rele[1] = "2"
    abrele[0] = "A"
    abrele[1] = "B"
 case %10000000
    comprobacion[0] = "R"
    comprobacion[1] = "E"
    rele[0] = "R"
    rele[1] = "2"
    abrele[0] = "C"
    abrele[1] = "E"
end select

Parece que los Leds oute1 y oute2 ahora me hacen caso los dos, pero continua ejecutándose la rutina de error cuando no hay ninguna entrada del puerto D activa. Qué puede ser?, debería inicializar el puerto D con valores 0? se supone que tendría que hacer caso al goto INICIO que he colocado para el caso de que ninguna entrada esté activa, no?.

Al final seguro que es alguna chorrada, pero como novato me cuesta encontrar el motivo.

Un Saludo.


Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Ayuda!.Problemas con un programa simple
« Respuesta #3 en: 21 de Noviembre de 2006, 14:07:31 »
en lugar de usar un GOTO INICIO, usa un GOSUB y al finalizar la rutina INICIO pon un RETURN y nos cuentas
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado joruji

  • PIC10
  • *
  • Mensajes: 34
Re: Ayuda!.Problemas con un programa simple
« Respuesta #4 en: 22 de Noviembre de 2006, 07:43:35 »
He probado el gosub y me hace lo mismo. Pero acabo de averiguar más o menos qué es lo que hace el programa cuando no hay ninguna entrada activa. Al parecer, en vez de hacer caso del "case %00000000", lo que hace es guardar en memoria los valores de uno de los "case", y mantiene el valor aunque reprograme el PIC. Debe hacer algo así, ya que he ido probando distintas modificaciones del programa y a veces, con la misma versión de programa, he visto que hacía cosas distintas. Lo que no entiendo es porqué coge esos valores y sobretodo porqué se salta el "case %00000000" y consigue llegar a la zona del programa donde comparo valores.

Me estoy volviendo loco, estoy atascado con éste programa que a simple vista es sencillo, pero me empieza a dar dolor de cabeza al ver que la cosa no avanza.

Se os ocurre algo más que pueda probar?

Un Saludo y gracias.

Desconectado joruji

  • PIC10
  • *
  • Mensajes: 34
Re: Ayuda!.Problemas con un programa simple
« Respuesta #5 en: 22 de Noviembre de 2006, 09:07:50 »
Ésta es la última versión que he probado (por si queréis echarle un vistazo al programa completo), lo que no funciona es el instante en el que no hay ninguna entrada activada (se va a la etiqueta "error"). Me faltaría algo?, qué pondríais para que el programa se comporte como yo quería.

include "bs2defs.bas"
define OSC 8                     
define LOADER_USED 1                   
                   
'SEÑALES
oute1 var portb.0
oute2 var portb.2
msg1 var portd.4
msg2 var portd.5
msg3 var portd.6
msg4 var portd.7
msg5 var portd.2
alarma var portb.4

'VARIABLES
i var byte
comprobacion var byte[2]
abrele var byte[2]
rele var byte[2]
reles var byte[2]:reles[0] = "R":reles[1] = "E"
rele1 var byte[2]:rele1[0] = "R":rele1[1] = "1"
rele2 var byte[2]:rele2[0] = "R":rele2[1] = "2"
rele3 var byte[2]:rele3[0] = "R":rele3[1] = "3"
abrir var byte[2]:abrir[0] = "A":abrir[1] = "B"

INICIO:
gosub selecciona

for i=0 to 1   
if comprobacion <> reles then error   
next
rel1:
for i=0 to 1
if rele<> rele1 then rel2
next
for i=0 to 1
if abrele<>abrir then cerrar
next
high oute2
goto INICIO     
cerrar:
low oute2
goto INICIO

rel2:
for i=0 to 1
if rele<> rele2 then rel3
next
for i=0 to 1
if abrele<>abrir then cerrar2
next
high oute1
goto INICIO   
cerrar2:
low oute1
goto INICIO

rel3:
for i=0 to 1
if rele<> rele3 then error
next
for i=0 to 1
if abrele<>abrir then cerrar3
next
goto INICIO   
cerrar3:
goto INICIO
 
selecciona:
SELECT CASE PORTD
 case %00000000
       goto INICIO
 case %00010000
    comprobacion[0] = "R"
    comprobacion[1] = "E"
    rele[0] = "R"
    rele[1] = "1"
    abrele[0] = "A"
    abrele[1] = "B"
 case %00100000
    comprobacion[0] = "R"
    comprobacion[1] = "E"
    rele[0] = "R"
    rele[1] = "1"
    abrele[0] = "C"
    abrele[1] = "E"
 case %00000010
    comprobacion[0] = "R"
    comprobacion[1] = "E"
    rele[0] = "R"
    rele[1] = "7"
    abrele[0] = "A"
    abrele[1] = "B"
 case %01000000
    comprobacion[0] = "R"
    comprobacion[1] = "E"
    rele[0] = "R"
    rele[1] = "2"
    abrele[0] = "A"
    abrele[1] = "B"
 case %10000000
    comprobacion[0] = "R"
    comprobacion[1] = "E"
    rele[0] = "R"
    rele[1] = "2"
    abrele[0] = "C"
    abrele[1] = "E"
end select
return

error:
for i=0 to 2   
    high alarma
    pause 1000
    low alarma
    pause 1000
next   
goto INICIO
end
« Última modificación: 22 de Noviembre de 2006, 09:17:15 por joruji »

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Ayuda!.Problemas con un programa simple
« Respuesta #6 en: 22 de Noviembre de 2006, 13:49:10 »
Pondria el PORTD de entrada, osea TRISD=255 y solo seria entrada nada de salidas para que no afecte, y trataria de no complicarme tanto con tantas variables y menos poniendo cadenas puedes poner valores numericos :mrgreen:.

Mira te dejo este programa, ahi te puedes dar una idea de como comparar o seleccionar rutinas segun los estados de los pines tal vez te ayude un poco mas.

Y si no habria que redefinirlo todo, a veces me pasa eso.
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado joruji

  • PIC10
  • *
  • Mensajes: 34
Re: Ayuda!.Problemas con un programa simple
« Respuesta #7 en: 23 de Noviembre de 2006, 07:01:51 »
uaahh!, me he asustado un poco al ver tu programa navaismo, pensaba que sería algo más corto  :D . Le echaré un vistazo detenidamente a ver si hay algo que me pueda ayudar, gracias.

Por otra parte, lo de sustituir las cadenas de caracteres por números, podría hacerlo para ver de que manera responde el programa, pero solo para probar. Necesito esas cadenas de caracteres, ya que en un futuro utilizaré un "serin" para recibir cadenas desde un módem gsm.

Un saludo.

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Ayuda!.Problemas con un programa simple
« Respuesta #8 en: 23 de Noviembre de 2006, 14:39:24 »
Bueno entonces vamonos por partes, la descripcion de lo que quieres hacer esta arriba, pero como lo lei no se parece a los programas, el programa mas bien es mas complejo -jiji- Entonces vamonos por partes.


Si aprietas el msg1 enciendes un led y asignas valores de caracter a rele y comprobacion?
Si aprietas el msg2 apagas el led que msg1 encendio y tambien asignas valore a rele y comprobacion?
Si aprietas el msg3 este enciende otro led y tambien asignas cadenas?
Si aprietas el msg4 este apaga el led que encendio msg3 y tambien asignas cadenas?

Y despues????
cuales son tus condiciones de comparacion de esas cadenas y que hacer si son o no son iguales?
El for que usas me imagino es para comparar?--> solo que no veo los indices para que lo haga correctamente osea un:

Código: [Seleccionar]
For i=0 to 1
comprobacion.[i] <> reles.[i]  then         
next i

mas o menos asi.

Bueno sorry por ser tan pregunton pero para poder ayudarte tenemos que tener un panorama mas grande.

Para lo de recibir cadenas usa mejor el SERIN2 y puedes checar este post

"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado joruji

  • PIC10
  • *
  • Mensajes: 34
Re: Ayuda!.Problemas con un programa simple
« Respuesta #9 en: 24 de Noviembre de 2006, 07:23:55 »
vamos a ver, me explicaré un poco mejor:

Si activo msg1, se guarda una cadena total "RER1AB". "comprobacion" guarda "RE", "rele" guarda "R1" y "abrele" guarda "AB". Después lo que hago es comparar las variables "comprobacion", "rele" y "abrele" con "reles", "rele1" y "abrir" que son constantes y que contienen los valores con los que deben coincidir. Esto me servirá en un futuro (cuando tenga un módem gsm) para activar o desactivar unas salidas de relé que quiero controlar desde un móvil, mandando un sms. Mientras no tenga el módem, utilizo estas variables para ver si la cosa más o menos funciona, cuando por fin tenga el módem estas variables las sustituiré como ya te dije, por un serin o serin2 como me has recomendado.

Bueno, continuo con la explicación. Si comparo "comprobacion" con "reles" y coinciden, quiere decir que le ha llegado la instrucción correspondiente a los relés, y por tanto pasa a la siguiente comparación para ver a que relé nos referimos (si no coinciden, nos dará una señal de error con el led de alarma). Si coinciden "rele" con "rele1", se tratará del relé número 1 el que queremos activar o desactivar ( si no coinciden, saltaremos a la etiqueta correspondiente al siguiente relé, hasta que no nos queden más relés y por tanto nos lleve a la etiqueta "error"). Pasamos a la siguiente comparación, si "abrele" es igual a "abrir" entonces abriremos el relé (o en el caso simplificado, que es el que estoy utilizando, enciendo el LED "oute1"), en caso contrario, lo cerraremos (o apagamos el LED).

msg1 equivale a la cadena RER1AB, por tanto encenderá el LED oute1.
msg2 equivale a la cadena RER1CE, por tanto, como los dos últimos caracteres son distintos a AB, se apagará el LED oute1.
msg3 y msg4 hacen exactamente lo mismo, pero sobre el LED oute2. Sus cadenas serían RER2AB y RER2CE respectivamente.
msg5 equivale a la cadena RER7AB, que dará error ya que no tenemos el relé R7, por tanto se activará el LED de alarma.
Si le metiera por ejemplo la cadena XER1AB, nos activaría la alarma ya que la primera comparación no se cumpliría.

Espero haberme explicado más o menos bien  :). Por cierto, es posible que me esté fallando la comparación con el "for"?. Veo que tú me has puesto un ejemplo con el "for", pero sin un "if" que condicione el caso de que coincidan o no las cadenas. Quizas me falte a mi lo de "", que al parecer no se lo puse al comparar ni a la variable ni a la constante con la que comparo. Tengo que probarlo, lo malo es que hasta el lunes no puedo hacerlo... :?. Ya te contaré, navaismo.


Un Saludo.


Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Ayuda!.Problemas con un programa simple
« Respuesta #10 en: 24 de Noviembre de 2006, 16:11:44 »
Bueno mira te dejo algo parecido a lo que quieres esto solo funciona para la comparacion del msg1 pero en el fondo es practicamente lo mismo para todos.

Obviamente puedes optimizarlo pero lo hice asi para que te sea mas claro; y enciendo el Todo el PORTB solo por un instante para que percibas que esta correcta la comparacion.

Insisto puede mejorar este codigo pero con esto ya te daras la idea o mejor dicho complementaras tu trabajo.

Código: FreeBasic
  1. TRISA = 31
  2. TRISB = 0
  3.  
  4. LED1  VAR PORTB.0
  5. LED2  VAR PORTB.1
  6. LEDA  VAR PORTB.2
  7.  
  8. reles var byte[2]
  9. rele1 var byte[2]
  10. rele2 var byte[2]
  11. rele3 var byte[2]
  12. abrir var byte[2]
  13.  
  14. comp var byte[2]
  15. rele var byte[2]
  16. abre var byte[2]
  17.  
  18. i var byte
  19.  
  20. porta=0
  21. INICIO:
  22.  RELES[0]="R" : RELES[1]="E"
  23.  RELE1[0]="R" : RELE1[1]="1"
  24.  RELE2[0]="R" : RELE2[1]="2"
  25.  RELE3[0]="R" : RELE3[1]="3"
  26.  ABRIR[0]="A" : ABRIR[1]="B"
  27.  
  28.  SELECT CASE PORTA
  29.   CASE %00000
  30.    GOSUB ALLOF
  31.  
  32.   CASE %00001      
  33.     COMP[0]="R" : COMP[1]="E"
  34.     RELE[0]="R" : RELE[1]="1"
  35.     ABRE[0]="A" : ABRE[1]="B"
  36.     GOSUB COMPARA
  37.   CASE %00010
  38.     COMP[0]="R" : COMP[1]="E"
  39.     RELE[0]="R" : RELE[1]="1"
  40.     ABRE[0]="C" : ABRE[1]="E"      
  41.     GOSUB COMPARA
  42.   CASE %00100
  43.     COMP[0]="R" : COMP[1]="E"
  44.     RELE[0]="R" : RELE[1]="2"
  45.     ABRE[0]="A" : ABRE[1]="B"
  46.     GOSUB COMPARA
  47.   CASE %01000
  48.     COMP[0]="R" : COMP[1]="E"
  49.     RELE[0]="R" : RELE[1]="2"
  50.     ABRE[0]="C" : ABRE[1]="E"
  51.     GOSUB COMPARA
  52.   CASE %10000
  53.     GOSUB ERROR    
  54.  END SELECT
  55. goto inicio
  56.  
  57. ALLOF:
  58.  PORTB=0
  59. RETURN
  60.  
  61. COMPARA:
  62.   for i=0 to 1
  63.    if comp[i] <> reles[i] then
  64.      goto nomatch
  65. '    else
  66. '     high led1
  67. '     pause 500
  68. '     low led1
  69. '     pause 500
  70.    endif
  71.   next i  
  72.  
  73.   for i=0 to 1
  74.    if rele[i] <> rele1[i] then
  75.      goto nomatch
  76. '    else
  77. '     high led1
  78. '     pause 500
  79. '     low led1
  80. '     pause 500
  81.    endif
  82.   next i
  83.  
  84.   for i=0 to 1
  85.    if abre[i] <> abrir[i] then
  86.      goto nomatch
  87.     else
  88.      goto hled1
  89.    endif
  90.   next i      
  91.  
  92.  
  93. return
  94.  
  95. nomatch:
  96.  high leda
  97.  pause 500
  98.  low  leda
  99.  pause 500
  100. goto inicio
  101.  
  102. hled1:
  103.  portb=255
  104. return
  105.  
  106.  
  107. error:
  108.  
  109.  high leda
  110.  pause 500
  111.  low  leda
  112.  pause 500
  113. return

Suerte, por cierto use un 16f84a para ese codigo con un XT de 4MHZ
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado joruji

  • PIC10
  • *
  • Mensajes: 34
Re: Ayuda!.Problemas con un programa simple
« Respuesta #11 en: 27 de Noviembre de 2006, 07:09:05 »
Antes de nada, muchas gracias navaismo por tu ayuda y por tu código.

Sabes?, me ha pasado una cosa, he adaptado tu programa para poder probarlo con el 16f877 y cuando me he puesto a probarlo, he visto que cuando no activaba ninguna entrada, el LEDA hacía lo que le daba la gana otra vez. Ya me estaba mosqueando de nuevo cuando de repente, veo que cuando me alejo del circuito, el LEDA se mantiene apagado. De hecho, cuando acercaba la mano al led, el led hacía la función de alarma, y cuando alejaba la mano, el led se apagaba. Muy fuerte, parecía un sensor de proximidad. El caso es que, como el circuito está montado en una protoboard, le he tirado toda la culpa a la placa, y efectivamente la culpa no era del programa, sino del circuito. Ha sido poner a masa las patillas que debían estar desactivadas, y el circuito ha respondido como debía hacerlo.

Ahora voy a modificar el programa y ponerme a hacer pruebas a ver que tal salen. Vete tu a saber, pero a lo mejor mi programa inicial también funciona si pongo las patillas a masa, lo probaré también.


Un Saludo.

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: Ayuda!.Problemas con un programa simple
« Respuesta #12 en: 27 de Noviembre de 2006, 13:19:12 »
Sugiero entonces que cambies de µicro.
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Ayuda!.Problemas con un programa simple
« Respuesta #13 en: 27 de Noviembre de 2006, 13:32:06 »
Antes de cambiar asi como lo dice Mario de PIC si estas digitalizando el PORTA y PORTE del 877 con la linea
ADCON1=7??

Puede que pueda -jiji- estar la falla ahi
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado joruji

  • PIC10
  • *
  • Mensajes: 34
Re: Ayuda!.Problemas con un programa simple
« Respuesta #14 en: 04 de Diciembre de 2006, 09:19:04 »
Bueno, he estado modificando mi programa para poder mandarle la cadena de caracteres a través del puerto serie del ordenador, en vez de asignarle valores con el "select" a las variables comp, rele y abre. He utilizado estas instrucciones en distintos lugares de mi programa:
serin2 entra,84,1000,INICIO,[wait("X"),str comp\2]
serin2 entra,84, [str rele\2]
serin2 entra,84, [str abre\2]

La verdad es que ha funcionado todo a la primera, pero como siempre, surje un nuevo problema. Cuando llego a cinco instrucciones enviadas, el pic parece que se bloquea y ya no hace caso a la sexta instrucción enviada. Supongo que debe ser porque el buffer de memoria está lleno y hay que limpiarlo, el problema es que no se que instrucción de "pic basic" es la que tengo que utilizar para ello. Alguna sugerencia?


Un saludo.


 

anything