Autor Tema: hacer funcionar 5 salidas comandadas por 5 pulsadores con una condicion  (Leído 25946 veces)

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

Desconectado janiro74

  • PIC10
  • *
  • Mensajes: 44
lo  primero saludos a todos y espero no incurrir en una falta hacia el foro. Mi cuestion es ke con el 16f84a quiero encender unos leds de portb comandados por unos pulsadores en  porta con la condicion ke si hay ya dos pulsadores presionados al pulsar el tercero y sucesivos ya no realice ninguna accion (un tercer o cuarto led mas encendido...)
pero lo ke ocurre es ke con este programa ke he creado en mikrobasic pro for pic ni siquiera se enciende portb.0 al poner a "1" porta.0 (no me responde a ningun pulsador)
Alguien sabe que es lo que pasa y como hacer para que se cumpla la condicion que espongo al principio?
Muchas gracias ante todo
está en mikrobasic pro for pic

program ecli
trisa = %00011111
trisb = %00000000
portb = %00000000
'porta = %00000
porta.7 = 0
porta.6 = 0
porta.5 = 0
main:
while (porta.0 + porta.1 + porta.2 + porta.3) <=2
if  porta.0 = 1 then portb.0 = 1 else   portb.0 = 0  delay_ms(100)
end if
if  porta.1 = 1 then portb.1 = 1 else   portb.1 = 0   delay_ms(100)
end if
if  porta.2 = 1 then portb.2 = 1 else   portb.2 = 0   delay_ms(100)
end if
if  porta.3 = 1 then portb.3 = 1 else   portb.3 = 0   delay_ms(100)
end if
if  porta.4 = 1 then portb.4 = 1 else   portb.4 = 0   delay_ms(100)
end if
wend
end.
« Última modificación: 13 de Enero de 2010, 13:06:56 por dogflu66 »

Desconectado rnelson

  • PIC12
  • **
  • Mensajes: 53
Re: hacer funcionar 5 salidas comandadas por 5 pulsadores con una condicion
« Respuesta #1 en: 08 de Enero de 2010, 14:19:35 »
saludos..
hermano colocastes todos las definiciones al comenzar el programa??

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4069
Re: hacer funcionar 5 salidas comandadas por 5 pulsadores con una condicion
« Respuesta #2 en: 08 de Enero de 2010, 15:30:24 »
Con que programa has realizado el susodcicho.
Me paree que si ese es todo el programa falta añadir cosas como el: el micro utilizado, frecuencia del oscilador, si el micro tiene entradas analogicas y/o comparadores, debes de deshabilitarlos.

Me parece que como a mí te hace falta leer mucho lo datasheet.

fer.
Todos los días se aprende algo nuevo.

Desconectado janiro74

  • PIC10
  • *
  • Mensajes: 44
Re: hacer funcionar 5 salidas comandadas por 5 pulsadores con una condicion
« Respuesta #3 en: 08 de Enero de 2010, 18:41:41 »
si es cierto por eso digo ke estoy enpezando poro os digo tambien que uso ep mikrobasic pro for pic. Este cuando comienzas un proyecto le indicas el pic y luego te sale la pantalla para enpezar a programar.
Lo he diseñado otra vez y ahora todo el portb esta encendido sin pulsar nada
en este pic no hay ke definir nada puesto ke sus tegistro ya son de entrad salida.
total estoy cada bez mas liao . os comento ke lo he hecho con el 16f887 y funciona incluso co 8 I/O aunke segun le plazca en ocasiones enciende cuando y las ke quiere.



program ecli
trisa.0 = 1
trisa.1 = 1
trisa.2 = 1
trisa.3 = 1
trisa.4 = 1
trisb.0 = 0
trisb.1 = 0
trisb.2 = 0
trisb.3 = 0
trisb.4 = 0
main:
portb = %00000000
WHILE TRUE
if  porta.0 = 1 then portb.0 = 1 else   portb.0 = 0
end if
if  porta.1 = 1 then portb.1 = 1 else   portb.1 = 0
end if
if  porta.2 = 1 then portb.2 = 1 else   portb.2 = 0
end if
if  porta.3 = 1 then portb.3 = 1 else   portb.3 = 0
end if
if  porta.4 = 1 then portb.4 = 1 else   portb.4 = 0
end if
 WEND
end.

aki esta con el 16f887
program ecli

ANSEL = 0
ANSELH = 0
TRISA0_BIT = 1
TRISA1_BIT = 1
TRISA2_BIT = 1
TRISA3_BIT = 1
TRISA4_BIT = 1
TRISA5_BIT = 1
TRISA6_BIT = 1
TRISA7_BIT = 1
TRISB = %00000000
PORTB = %00000000
main:
while (porta.0+porta.1+porta.2+porta.3+porta.4+porta.5+porta.6+porta.7) <=2
if  porta.0 = 1  then portb.0 = 1 else   portb.0 = 0  'delay_ms(5)
end if
if  porta.1 = 1  then portb.1 = 1 else   portb.1 = 0  delay_ms(5)
end if
if  porta.2 = 1  then portb.2 = 1 else   portb.2 = 0  delay_ms(5)
end if
if  porta.3 = 1  then portb.3 = 1 else   portb.3 = 0  delay_ms(5)
end if
if  porta.4 = 1  then portb.4 = 1 else   portb.4 = 0   delay_ms(5)
end if
if  porta.5 = 1  then portb.5 = 1 else   portb.5 = 0   delay_ms(5)
end if
if  porta.6 = 1  then portb.6 = 1 else   portb.6 = 0  delay_ms(5)
end if
if  porta.7 = 1  then portb.7 = 1 else   portb.7 = 0  delay_ms(5)
end if
wend
goto main
end.

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4069
Re: hacer funcionar 5 salidas comandadas por 5 pulsadores con una condicion
« Respuesta #4 en: 08 de Enero de 2010, 19:16:30 »
Si no tienes puesto ningun delay, me parece que a la velocidad que va el micro pudes estar leyendo cualquier cosa y mas si no tienes nada puesto para evitar los rebotes que se producen al abrir y cerrar los contactos de los pulsadores. estos son se abren o cierran instantaneamente. Presentan el efecto de tirar un pelota al aire y cada vez que llega al suelo rebota (cada vez menos) hasta quedar en el suelo.
Bueno con esto, si estas simulando el programa o bien colocas un circuito hardware para que los elimine o bien realizas una demora por software entre lecturas del(os) pulsadores. Un valor aceptable puede estar del orden de los 20milisegundos.

Fermin
Todos los días se aprende algo nuevo.

Desconectado janiro74

  • PIC10
  • *
  • Mensajes: 44
Re: hacer funcionar 5 salidas comandadas por 5 pulsadores con una condicion
« Respuesta #5 en: 08 de Enero de 2010, 19:50:02 »
este es el diseño con los delay que estoy simulando co este hardware easypic6 http://www.mikroe.com/en/tools/easypic6/

program ecli
trisa0_bit = 1
trisa1_bit = 1
trisa2_bit = 1
trisa3_bit = 1
trisa4_bit = 1
trisb0_bit = 0
trisb1_bit = 0
trisb2_bit = 0
trisb3_bit = 0
trisb4_bit = 0

main:
delay_ms(20)
portb = 0
while (porta.0+porta.1+porta.2+porta.3+porta.4) >=2
if  porta.0 = 1  then portb.0 = 1 else   portb.0 = 0  delay_ms(20)
end if
if  porta.1 = 1  then portb.1 = 1 else   portb.1 = 0  delay_ms(20)
end if
if  porta.2 = 1  then portb.2 = 1 else   portb.2 = 0  delay_ms(20)
end if
if  porta.3 = 1  then portb.3 = 1 else   portb.3 = 0  delay_ms(20)
end if
if  porta.4 = 1  then portb.4 = 1 else   portb.4 = 0  delay_ms(20)
end if
 WEND
 goto main
 end.

pero incluso con los delay me tililan los led de portb sin pulsar nada y cuando pulso 3 ó mas se apaga todo portb
cada vez me sale algo distinto y estoy mu liao ya ke bajo mis cortos conocimientos no me hacen cosas logicas
gracias por buestra ayuda

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4069
Re: hacer funcionar 5 salidas comandadas por 5 pulsadores con una condicion
« Respuesta #6 en: 08 de Enero de 2010, 20:04:38 »
Pues por lo que indicas es como si viniese abajo la tension de la placa de desarrollo.
En algunas placas comerciales creo recordar que utilizan puentes o switches para anular ciertas partes de la circuiteria. Por el efecto que indicas es que cuando se iluminan varios leds se viniese abajo la placa.
¿No tienes el esquema para que revises las conexiones?

Por otra parte en la linea siguiente:

while (porta.0+porta.1+porta.2+porta.3+porta.4) >=2
 
Entiendo que lo que quieres realizar es que cuando esten 2 pulsadores activados se realice alguna operacion.
Pero segun entiendo, todo lo que hay entre el While y el Wend solo se va a ejecutar si tienes accionados al mens 2 pulsadores.
¿No habras querido poner:    while (porta.0+porta.1+porta.2+porta.3+porta.4) <=2 Si es asi, entonces si se ejecuta lo de abaj, pero ademas despues del Wend deberias de poner algo de codigo para dejar las salidas en algun estado determinado como apagados o encenddos, por ejemplo.

Fermin
Todos los días se aprende algo nuevo.

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4069
Re: hacer funcionar 5 salidas comandadas por 5 pulsadores con una condicion
« Respuesta #7 en: 08 de Enero de 2010, 20:12:44 »
Oye Janiro:

Comprobando los dos programas veo que en el del 877 que dices que funciona veo que está así: while (porta.0+porta.1+porta.2+porta.3+porta.4) <=2

mientras que en que tu estas realizando está asi:while (porta.0+porta.1+porta.2+porta.3+porta.4) >=2

Fer.
Todos los días se aprende algo nuevo.

Desconectado janiro74

  • PIC10
  • *
  • Mensajes: 44
Re: hacer funcionar 5 salidas comandadas por 5 pulsadores con una condicion
« Respuesta #8 en: 08 de Enero de 2010, 20:21:20 »
si si parece ser ke probando probando y con el copia y pega se ma ido la pinzapero el problema son los titileos y resultados aleatorios como luces led ke se encienden sin ke les coresponda o ke probando con los pulsadores en ocasiones no de cumplan las condiciones yyyyy ademas creo ke
no tiene nada ke ver con la tension de alimentacion ya ke con los ejemplos del cd de la placa y algunos programas de encender muchos led no hay problema . en realidad lo ke quiero es un programa ke aunque haya mas de un pulsador dado en porta haya un maximo de dos led encendidos porke este circuito iria luego a unas electrovalvulas (con sus respectivos reles y transi.) de unas tuberias  cuyo caudal solo soporta el de 2 tuberias , de ahi ke solo puede haber 2 leds encendidos simultaneamente

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4069
Re: hacer funcionar 5 salidas comandadas por 5 pulsadores con una condicion
« Respuesta #9 en: 08 de Enero de 2010, 20:31:53 »
El programa te configura el wachtdog como enable. Aver si se te esta reseteando por eso.

Una cosa mas. En tu programa antes del END no te falta = goto main.
Todos los días se aprende algo nuevo.

Desconectado janiro74

  • PIC10
  • *
  • Mensajes: 44
Re: hacer funcionar 5 salidas comandadas por 5 pulsadores con una condicion
« Respuesta #10 en: 08 de Enero de 2010, 20:33:59 »
como se configura el wachtdog ke no se ni lo ke es y si es cierto lo del goto

Desconectado janiro74

  • PIC10
  • *
  • Mensajes: 44
Re: hacer funcionar 5 salidas comandadas por 5 pulsadores con una condicion
« Respuesta #11 en: 08 de Enero de 2010, 20:35:22 »
si ya se lo kes el wachtdog  y está en disable

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4069
Re: hacer funcionar 5 salidas comandadas por 5 pulsadores con una condicion
« Respuesta #12 en: 08 de Enero de 2010, 20:37:58 »
el wachtdog es un temporizador interno que si se configura como enable en el momento que se da tension al equipo empieza a contar y cada pocos milisegundos lo que hace es resetear y dejar perdido el programa.
Dentro del micro basic no hay ninguna opcion para configurar los fuses. Normalmente si los entornos de programacion no tiene esta opcion hay que escribirlas a mano dentro del programa, pero por lo que has dicho anteriormente que al empezar a realizar el programa te pide cosas como tipo del micro, oscilador,......

Prueba añadiendo el goto main
Todos los días se aprende algo nuevo.

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4069
Re: hacer funcionar 5 salidas comandadas por 5 pulsadores con una condicion
« Respuesta #13 en: 08 de Enero de 2010, 20:43:37 »
Otra cosa el PIC16F887 tiene comparadores analogicos.

¿Le dices al programa que los deshabilite y deje el puerto como digital? Fijate que hay una intruccion ANsel= = de por medio que alguna vez has eliminado en el programa.
Todos los días se aprende algo nuevo.

Desconectado janiro74

  • PIC10
  • *
  • Mensajes: 44
Re: hacer funcionar 5 salidas comandadas por 5 pulsadores con una condicion
« Respuesta #14 en: 08 de Enero de 2010, 21:00:33 »
este es el programa con mikrobasic y con el pic16f84a
con el goto y demas pero tiene una inestabilidad muy notable de titileos , ledas por ejemplo al pulsa de porta.1 y destellan otros tamien o pulsas mas de dos y se apaga todo portb.....  no se es posible ke la rutina sea muy larga y mientras barre todo el programa pasen cosas raras pero yo no  se simplificar mas esto y seguro ke con otros comando seria mas corto pero yo no se. no se si es eso posible

program ecli
delay_ms(40)
trisa0_bit = 1
trisa1_bit = 1
trisa2_bit = 1
trisa3_bit = 1
trisa4_bit = 1
trisb0_bit = 0
trisb1_bit = 0
trisb2_bit = 0
trisb3_bit = 0
trisb4_bit = 0

main:
delay_ms(40)
portb =0
while  (porta.0+porta.1+porta.2+porta.3+porta.4) <=2

if  porta.0 = 1  then portb.0 = 1 else   portb.0 = 0  delay_ms(40)
end if
if  porta.1 = 1  then portb.1 = 1 else   portb.1 = 0  delay_ms(40)
end if
if  porta.2 = 1  then portb.2 = 1 else   portb.2 = 0  delay_ms(40)
end if
if  porta.3 = 1  then portb.3 = 1 else   portb.3 = 0  delay_ms(40)
end if
if  porta.4 = 1  then portb.4 = 1 else   portb.4 = 0  delay_ms(40)
end if

 WEND
 goto main
 
   end.


 

anything