TODOPIC

Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: jachy en 01 de Mayo de 2003, 04:34:00

Título: necesito ayuda con este pekeño proyecto
Publicado por: jachy en 01 de Mayo de 2003, 04:34:00
Bueno pues lo que quiero hacer es utilizar el puerto paralelo del pc y comunicarlo con el pic de forma binaria utilizando 4 pines de salida y pasandolos a las entradas del pic porta1,2,3,4 y que convinando en esa entrada que me active una u otra salida portB.

Entrada salida
0001 rele1 on
0011 rele1 off
esto es mas o menos la idea.

Me puede alguien hechar una mano ,no se k es lo k estoy haciendo mal (soy novato en asm)

list p=16f84
include "p16f84.inc"
__CONFIG 3FF5H
org 0x00
goto INICIO
org 0x05

INICIO clrf PORTB
bsf STATUS,RP0
clrf TRISB
movlw b"00001111"
movwf TRISA

bcf STATUS,RP0

CASO1 clrwdt

BIN1 btfsc PORTA,0
goto CASO2
btfsc PORTA,1
goto CASO2
btfsc PORTA,2
goto CASO2
btfsc PORTA,3
goto RELE1
goto CASO2

RELE1 bsf PORTB,1

CASO2 goto BIN2

BIN2 clrwdt
btfsc PORTA,0
goto CASO3
btfsc PORTA,1
goto CASO3
btfsc PORTA,2
goto BIN21
goto CASO3
BIN21 btfsc PORTA,3
goto RELE2
goto CASO3

RELE2 bcf PORTB,1

CASO3 goto BIN3

BIN3 clrwdt
btfsc PORTA,0
goto CASO4
btfsc PORTA,1
goto BIN31
goto CASO4
BIN31 btfsc PORTA,2
goto BIN32
goto CASO4
BIN32 btfsc PORTA,3
goto RELE3
RELE3 bsf PORTB,2
CASO4 goto BIN4

BIN4 clrwdt
btfsc PORTA,0
goto CASO5
btfsc PORTA,1
goto CASO5
btfsc PORTA,2
goto BIN41
goto CASO5
BIN41 btfsc PORTA,3
goto CASO5
goto RELE4

RELE4 bcf PORTB,2

CASO5 goto BIN1

end


CASO5 CONTINUARIA PERO LO CORTE HAY PARA VER EL FUNCIONAMIENTO EN LA PLACA
Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: franda en 01 de Mayo de 2003, 05:45:00
jachy me interesaría saber como se programa el puerto paralelo del PC. ¿Podrías incluir el programa? Voy a intentar averiguar que le pasa a tu programa en ensamblador.

Salu2
Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: jachy en 01 de Mayo de 2003, 06:10:00
el programa lo estoy haciendo en VisualBasic en cuanto lo termine lo cuelgo pero de todas formas pasame tu mail y te lo mando en cuanto lo termite pero el problema ahora era hacerlo funcionar el pic para ver si rula el prog. bien con el pic.


Salu2 Jachy
Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: franda en 01 de Mayo de 2003, 14:48:00
En tu programa si PORTA0=1 lo mandas a CASO2 con lo cual el RELE1 no se activará nunca.

De VisualBasic no tengo ni idea, mala suerte.
Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: Eduagra en 01 de Mayo de 2003, 14:50:00
Bueno, no soy un experto, pero creo que el problema lo tienes en que cuando escribes un dato en el puerto paralelo desde visual basic, este permanece en él por un corto periodo de tiempo, y el pic quizá no le de tiempo a leerlo.

o hice algo parecido, pero en mi caso sólo se trataba de encender unos led, para ello necesité una librería para poder acceder diréctamente al puerto paralelo, tanto para leer como para escribir.

Te adjunto la librería que he estado usando yo.

Si por el contrario estas usando un S.O. que viene de WindowsNT, tendrás problemas, visita esta web http://www.pablin.com.ar/computer/programa/vb/iodll.htm esta muy bien y te dará la solución.

Salu2
Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: jachy en 01 de Mayo de 2003, 17:19:00
los puerto buncionan bien el pic lo estoy provando con una placa lo alimento con sus 5v , sus condensadores su cristal de cuarzo 4Mhz y a las salidas de pic tengo diodos led con sus respectivas relistencias y a las entradas mediante pulsadores le ataco con 5v(al pulsar).


Lo que necesito es que por ejm. la RA0=0 RA1=1 RA2=0 RA3=1 CON ESTA COMBINACION SE ACTIVE RB0=1,
LA IDEA ES QUE DEPENDIENDO DE LA COMBINACION ENTRE RA0-------RA3 FUNCIONE UNA U OTRA SALIDA RBx.


Salu2 Jachy
Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: franda en 02 de Mayo de 2003, 00:21:00
Hola jachy, ¿crees que está mal lo que te he dicho? Me costó un poquillo averiguarlo a partir de tus datos ya que tomé 0001 como RA0=1 y por lo que parece es RA3=1 ¿no tienes nada en C para el control del puerto paralelo?

Salu2
Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: franda en 02 de Mayo de 2003, 01:41:00
¿Cual es exactamente la secuencia? Creo que es esta:

RA3=RA2=RA1=RA0=0 ------ > RB2=RB1=0
RA3=1;RA2=0;RA1=0;RA0=0 ----- > RB2=0;RB1=1
RA3=1;RA2=1;RA1=0;RA0=0 ----- > RB2=0;RB1=0
RA3=1;RA2=1;RA1=1;RA0=0 ----- > RB2=1;RB1=0
RA3=1;RA2=1;RA1=1;RA0=1 ----- > RB2=0;RB1=0
Para cualquier otra combinación debe de mantenerse el estado anterior

Si la secuencia es la que acabo de escribir, en la etiqueta de tu programa BIN32:

BIN32    btfsc PORTA,3
             goto RELE3
RELE3   bsf PORTB,2

valga lo que valga RA3 se conecta RB2 y RB2 solo se tendría que conectar si RA3=RA2=RA1=1; RA0=0

Si no pones cual es la secuencia exacta que debe seguir es imposible averiguar donde está el fallo

Salu2
Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: jachy en 02 de Mayo de 2003, 10:55:00
Guenas ta estoy por aka.

Bueno te explico la chuletilla que tengo con la idea

SI PORTA0=0, PORTA1=0,PORTA2=0 Y PORTA3=1 ENTONCES PORTB1 SE PONE A 1 ACTIBANDO UN RELE

SI PORTA0=0, PORTA1=0,PORTA2=1 Y PORTA3=1 ENTONCES PORTB1 SE PONE A 0 ACTIBANDO UN RELE

SI PORTA0=0, PORTA1=1,PORTA2=1 Y PORTA3=1 ENTONCES PORTB2 SE PONE A 1 ACTIBANDO UN RELE

SI PORTA0=0, PORTA1=0,PORTA2=1 Y PORTA3=0 ENTONCES PORTB2 SE PONE A 0 ACTIBANDO UN RELE

CON LO K KEDARIA LAS SIGIENTES CONBINACIONES

0100 = PORTB3 ON
1000 = PORTB3 OFF

0110 = PORTB4 ON
1110 = PORTB4 OFF

1100 = PORTB5 ON
1001 = PORTB5 OFF

1101 = PORTB6 ON
1011 = PORTB6 OFF

Y CON ESTO ESTARIA TERMINADO.
EL PROBLEMA NO ES DE EL PUERTO POR K LO ESTOY PROBANDO EN PLACA CON FUENTE ALIMENTACION  PULSADORES Y LED´S

SALUDOS A TODOS
JACHY
Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: franda en 02 de Mayo de 2003, 11:48:00
¿A que las tres primeras combinaciones (1000, 1100, 1110) te van bien? y cuando llegas a la cuarta (0110) y esperas que RB2=0 no te pasa a 0. La explicación te la dí más arriba (haciendo de adivino de combinaciones) y me dá la impresión de que no lo has comprobado.

Dime exactamente hasta donde llega funcionando bien.
Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: jachy en 02 de Mayo de 2003, 12:35:00
pues lo k me hace es k de primeras rb2 se keda encendido continuamente y segundo es como si el pic cogiese ruido pones el dedo encima del pic y se enciende rb1 unas cosas muy raras y claro ya no se si es del prog.asm o del circuito. no tendras algun esquema de la configuracion electronica del 16f84.

Por ke ahora k lo dices cuando ponia el  dedo encima del pic y cogia ruido RB1 si funcionaba pero claro no terminaba de apagarse el led.

Voy a terminar se pasar el ASM entero y lo cuelgo aky para k lo veas completo, a ver si va a ser el circuito......
Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: cucaracha en 02 de Mayo de 2003, 13:17:00
Si pones el esquemático y el programa (o la parte que tengas hecha) te podremos intentar ayudar. Estuve mirando el programa y... claro no se si hay cosas que pueden fallar porque no se exactamente el funcionamiento. Cuantos relés vas a conectar, como, etc...
Un saludo
Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: jachy en 02 de Mayo de 2003, 15:13:00
ahy cuelgo el esquema en formato eagle k es en el editor el cual utilizo y en formato bmp , el programa lo tengo sin compilar pero ya te digo k esta sin terminar seguire con prog y le cuelgo pero es eso un simple programa para controlar una cierta cantidad de reles atraves de puerto paralelo utilizando 4 salidas del puerto paralelo aciendolas funcionar en una especie de sistema binario para tener posibilidad de manejar mas de 4 salidas y el pic se tiene que encargar de hacer esa traduccion de binario atraves de ra0 ra1 ra2 ra3 como entradas conectadas a puerto paralelo y traduzca decidiendo esa conbinacion a k rele coresponde. pero por ahora lo quiero hacer funcionar con esa especie de entrenador k he hecho para posterior mente cuando lo vea funcionar conectarlo al puerto paralelo y manejarlo con el programa.

Salu2 Jachy
Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: franda en 03 de Mayo de 2003, 01:51:00
me equivoqué al copiar la 4ª combinación. En lugar de ser 0110 es 0100 (me lo podías haber dicho) y con esta combinación el programa que enviaste funciona bien.

¿Alguno de vosotros tiene un programa en C que controle desde el teclado los pines del puerto paralelo?

Un saludo
Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: todopic en 03 de Mayo de 2003, 14:30:00
Hola Jachy, que te parece esta idea
 X0000001  es el uno para ON, si X=1 seria OFF

X0000010  es el dos para ON, si X=1 seria OFF

X0000011  es el tres para ON, si X=1 seria OFF

y basi seguimos para la cuenta en binario, y obtendras que X vale 128, si a tu valor le sumas 128,lo apagas, se entiende?

luego, la seleccion en el pic, seria muy simple... solamente testeas el bit 7

btfss mmmm,7  es decir el que llame X

si es uno, iria a la rutina de apagado, sino a la de encendido


estas serian tablas, es decir , ingresas con el valor leido en porta, lo guardas por ejemplo en ENTRADA

movf entrada,w  " coloco en lalor ENTRADA en W
bcf entrada,7      "borro el bit X
addwf PCL,F      " sumo el valor entrada al contador de programa, y este salta

goto cero
goto uno
goto dos

etc


uno   bsf portb,0
goto mmmmmm

dos  bsf portb,1




etc


se entiende?

un abrazo
Norberto



Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: jachy en 04 de Mayo de 2003, 13:16:00
Cita:
Hola Norberto

Entiendo el planteamiento que me dices pero lo me no se es como plasmarlo a asm, seguro k hay una forma mas sencilla de hacerlo ,por k mi planteamiento a asm es un poko pobre ya que estoy aprendiendo, yo estaria jugando solo con 4 entradas del pic 16f84a , y lo k me preguntaba hay alguna manera posible de decir en asm ,
si porta=0001 entonces rb0=on
si porta=0010 entonces rb0=off

Saludos espero respuesta

Jachy
Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: franda en 04 de Mayo de 2003, 14:07:00
Test_RA0   BTFSS   PORTA,0
                  GOTO    Test_RA1
                  BSF     PORTB,0

Test_RA1   BTFSS   PORTA,1
                  GOTO    Test_RA0
                  BCF     PORTB,0
                  GOTO    Test_RA0

Lo he hecho muy rápido espero que esté bien

Un saludo
Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: jachy en 04 de Mayo de 2003, 14:21:00
pero Test_RA0  k seria un campo de memoria donde diriamos que seria 0001 , necesito mas pistas estoy un poco verde.

Salu2 Jachy
Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: jachy en 06 de Mayo de 2003, 03:14:00
Ok Franda ya entiendo en realidad es mas o menos lo que hacia yo en el mio , una preguntita que no se si es posible se podria testear ra0,ra1,ra2,ra3 de una tirada me esplico

ejm. k seguro que no es asi ni queriendo.

If porta,0,1,2,3 = 0,0,0,1 then rb0 = 1
If porta,0,1,2,3 = 1,0,0,0 then rb0 = 0

esto es una suposicion k ya te digo no controlo mucho ,¿se podria hacer esto?

Saludos Jachy
Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: franda en 06 de Mayo de 2003, 09:02:00
Hola jachy. Sí que se puede, es así:

Test_1      MOVFW   PORTA

SUBLW       0x01          ; Si RA3=RA2=RA1=0 y RA0=1 entonces RB0=1

BTFSS         STATUS,Z

GOTO Test_2

BSF    PORTB,0            ; RB0=1

Test_2      MOVFW   PORTA

SUBLW       0x08          ; Si RA2=RA1=RA0=0 y RA3=1 entonces RB0=0

BTFSS         STATUS,Z

GOTO Test_3

BCF    PORTB,0            ; RB0=0

Test_3         etc

Puede haber más de un bit activo, lo único que hay que hacer es modificar el valor de los números que acompañan al SUBLW

Si tienes alguna duda del programa, pregunta

Un saludo









Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: jachy en 06 de Mayo de 2003, 10:48:00
Eres genial chiko, claro k te are mas preguntas,jejejeje lo que voy a aprender contigo franda,
lo único que hay que hacer es modificar el valor de los números que acompañan al SUBLW ,¿como se yo los valores?¿hay algun tipo de tabla? ¿como llegamos a k 0x08 es igual a esto RA2=RA1=RA0=0 RA3=1?

Gracias por tu tiempo

Un Saludo Jachy
Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: MGLSOFT en 06 de Mayo de 2003, 13:29:00
Todas las comparaciones son binarias.
Por lo tanto el bit 0 vale 1 si esta activo y 0 si esta desactivado, igual para todos los bits, pero multiplicado por su peso dentro del Byte.



Esto es: si el bit 3 esta activo vale 8, pero si tambien esta activo el bit 2 el valor sera de 8 + 4 (peso del bit 2), lo que da 12.

O sea que si buscas comparar, para mi es mejor siempre hacerlo con XORLW y no con resta o SUBLW, pues el anterior te activa el bit de cero solo y solo si las cifras son iguales..
Por otro lado y para tener mejor claridad en este caso es mejor utilizar la notacion binaria en la expresion, porque facilita la comprension de la comparacion y su resultado.
Por ejemplo:
XORLW B"00110101"

sera mas claro que

XORLW 0x35  o   XORLW  D"35"

Mucha suerte!!
Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: jachy en 06 de Mayo de 2003, 17:21:00
 Ya lo pillo MGLSOFT,claro k si es mas sencillo porlomenos para mi k tengo un nivel bajo en ASM , pero me ha salido una duda,

XORLW B"00110101"
entonces con B"00110101" seria como si se dijese k:
ra0= 1,ra1=0, ra2=1, ra3=0, ra4=1, ra5=1, ra6=0 y ra7=0

seria de derecha a izq. y en mi caso que utilizaria ra0,ra1,ra2,ra3, ¿como seria?

0001 =  B"0001"
0010 =  B"0010"
0100 =  B"0100"
1000 =  B"1000"

saludos jachy
Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: franda en 07 de Mayo de 2003, 01:00:00
Los otros bits también hay que ponerlos:

0001 = b"00000001"    ,  o bien en hexadecimal (no escribes tanto) (se hacen grupos de 4 y se basa a decimal) 0x01
0010 = b"00000010"    , o bien en hexadecimal 0x02
0100 = b"00000100"    , o bien en hexadecimal 0x04
1000 = b"00001000"    , o bien en hexadecimal 0x08

Otras ejemplos de combinaciones :

0011 = b"00000011"    , o bien en hexadecimal 0x03
1100 = b"00001100"    , o bien en hexadecimal 0x0C
1010 = b"00001010"    , o bien en hexadecimal 0x0A

10000010 = b"10000010"    , o bien en hexadecimal 0x82
11110100 = b"11110100"    , o bien en hexadecimal 0xF4
10011001 = b"10011001"    , o bien en hexadecimal 0x99

Saludos
Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: jachy en 07 de Mayo de 2003, 02:47:00
ok franda, ya lo pillo ,pues eso me pongo manos a la obra y ya os cuento a todos a ver si funciona en el entrenador y si rula a terminar el programa en visual ,ya mandare respuesta.

Saludos Jachy
Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: MGLSOFT en 07 de Mayo de 2003, 06:42:00
Este es el foro que me gusta!!!


Los felicito muchachos!!!



Si hubiera tenido la mitad de la ayuda que aqui se da en cualquiera de los temas, no estaria quedando pelado ni hubiera quemado tantos PICs.



De nuevo los felicito, y a seguir....
Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: jachy en 08 de Mayo de 2003, 04:30:00
Funciona porfin ,peroooooooo encender los led ok! pero no los consigue apagarlos es como si RA4 no funcionase.
Tomar el asm. ¿Donde tengo el error?

List   p=16F84
   Include   "P16F84.INC"
   org   0x00

Inicio   bsf   STATUS,RP0
   clrf   TRISB
   movlw   b"00011111"
   movwf   TRISA
   bcf   STATUS,RP0

Caso1   movfw   PORTA
   XORLW   0x01
   BTFSS   STATUS,Z
   goto   Caso2
   BSF   PORTB,0

Caso2   movfw   PORTA
   XORLW   0x11
   BTFSS   STATUS,Z
   goto   Caso3
   BCF   PORTB,0

Caso3   movfw   PORTA
   XORLW   0x02
   BTFSS   STATUS,Z
   goto   Caso4
   BSF   PORTB,1

Caso4   movfw   PORTA
   XORLW   0x12
   BTFSS   STATUS,Z
   goto   Caso5
   BCF   PORTB,1

Caso5   movfw   PORTA
   XORLW   0x03
   BTFSS   STATUS,Z
   goto   Caso6
   BSF   PORTB,2

Caso6   movfw   PORTA
   XORLW   0x13
   BTFSS   STATUS,Z
   goto   Caso7
   BCF   PORTB,2

Caso7   movfw   PORTA
   XORLW   0x04
   BTFSS   STATUS,Z
   goto   Caso8
   BSF   PORTB,3

Caso8   movfw   PORTA
   XORLW   0x14
   BTFSS   STATUS,Z
   goto   Caso9
   BCF   PORTB,3

Caso9   movfw   PORTA
   XORLW   0x05
   BTFSS   STATUS,Z
   goto   Caso10
   BSF   PORTB,4

Caso10   movfw   PORTA
   XORLW   0x15
   BTFSS   STATUS,Z
   goto   Caso11
   BCF   PORTB,4

Caso11   movfw   PORTA
   XORLW   0x06
   BTFSS   STATUS,Z
   goto   Caso12
   BSF   PORTB,5

Caso12   movfw   PORTA
   XORLW   0x16
   BTFSS   STATUS,Z
   goto   Caso13
   BCF   PORTB,5

Caso13   movfw   PORTA
   XORLW   0x07
   BTFSS   STATUS,Z
   goto   Caso14
   BSF   PORTB,6

Caso14   movfw   PORTA
   XORLW   0x17
   BTFSS   STATUS,Z
   goto   Caso15
   BCF   PORTB,6

Caso15   movfw   PORTA
   XORLW   0x08
   BTFSS   STATUS,Z
   goto   Caso16
   BSF   PORTB,7

Caso16   movfw   PORTA
   XORLW   0x18
   BTFSS   STATUS,Z
   goto   Caso1
   BCF   PORTB,7

end


Tabla hex bin
   hexadecimal   BINARIO      
   1   1   ON   RB0
   11   10001   OFF   
   2   10   ON   RB1
   12   10010   OFF   
   3   11   ON   RB2
   13   10011   OFF   
   4   100   ON   RB3
   14   10100   OFF   
   5   101   ON   RB4
   15   10101   OFF   
   6   110   ON   RB5
   16   10110   OFF   
   7   111   ON   RB6
   17   10111   OFF   
   8   1000   ON   RB7
   18   11000   OFF   
   9   1001   ON   RB8
   19   11001   OFF   


P.D.: El entrenador lo he tenido que modificar y tirar a masa las 5 entradas con 5 resistencias de 10k de tal manera k no me coja ruido y esten siempre a cero menos cuando pulse el pulsador que pasa a 5v. Hay os dejo el board en eagle, ha quedado muy chulo y funciona de miedo para probar nuestros proyectos.

Saludos Jachy
Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: MGLSOFT en 08 de Mayo de 2003, 06:25:00
Todo muy lindo pero si lees la hoja de datos del pic, RA4 deberas ponerle una resistencia de Pull-Up, es decir directamente conectada a +5V y a la patilla RA4, una resistencia de 10K aproximadamente, pues cuando la declaras como salida no funciona igual que las demas.



En mi caso prefiero utilizarla como entrada, antes de renegar con ella....

Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: pocher en 08 de Mayo de 2003, 09:41:00
Tienes definido el PORTA como entradas por lo tanto RA4 no va a actuar como salida a colector abierto. Debes en el circuito utilizar RA4 como entrada

Revisándo el programa deprisa no veo porqué no se te apagan los leds. ¿No se te apaga nunca ningún LED o solo cuando interviene RA4?

En el caso que se cumpla el Caso16 apagará RB7 y el programa dejará de funcionar (ya no testeará más). Faltaría después del BCF PORTB,7 un GOTO Caso1

No uso el eagle, no puedo ver las conexiones.

Un saludo
Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: jachy en 08 de Mayo de 2003, 11:59:00
Entonces ya se porque no apaga por que para apagar si os dais cuenta lo unico que hago es a ese binario ponerle un 1 delante para ponerle en off y ese uno me lo tiene k dar RA4 ,pero RA4 lo quiero utilizarar como entrada ,estoy utilizanado como entradas con pulsadores (el entrenador de mas arriba) RA0, RA1, RA2, RA3 Y RA4 ó eso es lo que quiero ra como entradas y rb como salidas.

Pero como hago que funcione RA4??????


Saludos Jachy
Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: cucaracha en 08 de Mayo de 2003, 12:39:00
Estoy pasándolo a Proteus y he notado lo que creo un fallo. Si te fijas el pulsador 1 esta mal conectado. Tienes tres pines tirados a masa. A no ser que sean unos pulsadores raros, estos tienen unidos internamente los pines dos a dos, es decir, que el pin 1 y 2 son el mismo, y lo mismo con el 3 y 4. Prueba en uno que no tengas conectado con un polímetro. Por tanto siempre estará a cero ese pulsador. Otra cosa es que no creo que puedas simular bien con pulsadores, o por lo que veo por encima no se si lo hará (ya que no he revisado el programa y no se como funciona o como lo hace). Verás el caso es que los pulsadores no se pulsan al instante, vamos que pulsas, luego otro... osea que es casi imposible que el codigo de 4 bits se reciba en el puerto completo y correcto (no se si me explico). Por eso puede que recibas codigos erroneos o indeseadosmientras pulsas todos los que sean.
En cuanto a RA4, yo me pase muuuucho tiempo hasta que lo hice funcionar, y la verdad es que ni siquiera me acuerdo si fue un sueño o lo hice de verdad. En mi caso es un pin perdido. Para que funcione pon lo que te han dicho, una resistencia de Pull-up.
Bueno sigo con lo del proteus...
Un saludo.
Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: cucaracha en 08 de Mayo de 2003, 12:50:00
Vamos a ver, el montaje es el que has hecho o te has equivocado de archivo. No te estoy vacilando eh, es yo cuando hago algo y modifico alguna cosa lo guardo con otro nombre (entrenador, entrenador1, entrenador2... p.ej). Es que los pulsadores tienen una resistencia de pull-up a masa cada uno y el otro lado va a masa también???. Osea que cuando no están pulsados hay un cero y cuando lo pulsas hay un cero ¿?.
Por que no dejas el esquemático que me estoy partiendo la vista siguiendo las pistas.
Aun así sigo con lo del proteus cambiando estas cosas.
Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: cucaracha en 08 de Mayo de 2003, 13:12:00
Cambios:
- Como veo que sólo van a ser 8 salidas pues te sobra un pin del puerto A.

- Y acostumbrate a comentar tus códigos. Para el que lo lea le es más fácil, pero para tí también. Un par de meses sin mirar el código y verás como no te acuerdas de nada y tendrás que volver a estudiar el código.
Sigo.

PD: me he tomado la libertad de cambiarlo sin preguntarte. De todos modos con lo que saque tu decides si te sirve o no.
Un saludo.
Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: jachy en 08 de Mayo de 2003, 13:34:00
ahhhhhhhhhhhhhhhhhhh
Estoy kedao ,esto funciona correctamente ,el problema lo tenia en el entrenador, el entrenador lo tenia antes al reves con entrada de 5v continuamente  atraves de unas resistencias y lo modifique para hacerlo al reves pues se me fue la pelota y meti una resistencia de 10k entre salida regulador y pulsadores (gran cagada por mi parte), ya k cuando se activaba el pulsador no estaba llegando los 5voltios sino 3,5 por la caida y al pulsar 2 a la vez ,caida total, a otra cosa el esquema k os mande no esta modificado del todo hay os dejo el Güeno y el ASM.

Por ahora esta listo me piro a hacer el Programa en visualBasic y a ver que new inconvenientes me salen ya hos contare y no muy tarde,

Gracias a todos por vuestra gran info, (esto es un foro lo demas es tonteria).

P.D.: En cuanto termine el prog. posteo por aka para contaros y si todo sale bien para postearle para k lo veais y si no para entretenernos otro poco ,

Saludos Jachy
20:30 8/5/03
Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: pocher en 08 de Mayo de 2003, 14:14:00
Te funciona todo correctamente, ¿verdad? El programa teóricamente lo ví bien. Solo añadir el GOTO final para que testeara de nuevo.

RA4 si actua como entrada no tiene porqué dar ningún problema, sin embargo si la programas como salida, actua como salida con colector (drenador) abierto y si no conectas a este pin (el colector) una resistencia que haga de carga y a VCC pués el LED que haya conectado a este pin no se encenderá (encontrar esto en su día me llevó de cabeza, no entendía porqué no se encendía el LED).
Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: cucaracha en 08 de Mayo de 2003, 18:05:00
Peeeerdón. Es cierto funciona.
Pero de verdad te funciona en el entrenador??
Sigo diciendo que el pulsador SW1 tiene unido los pines 2 y 4, y creo que esto lo cortocircuita. Mide en el pin 1 del conector "entradas". Si no me equivoco tendrás 5v tanto si pulsas el botón como si no.

Un saludo.
Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: pocher en 08 de Mayo de 2003, 23:44:00
Sí que lo sería.

Si en la entrada de PORTA tenemos 01010 que se active RB0 y al mismo tiempo un temporizador. Cuando ese temporizador haya finalizado la temporización que se desactive RB0. Así de sencillo.

Puedes hacer la temporización con y sin interrupción del TMR0.

Si el programa no es necesario que atienda a otras entradas cuando se esté realizando la temporización entonces puedes hacerlo sin interrupción.

Si el programa al mismo tiempo que temporiza ha de mirar el estado de otras entradas, y salirse de la temporización en el caso que alguna de estas se active, entonces con interrupción

Un saludo
Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: jachy en 09 de Mayo de 2003, 02:51:00
Yo habia pensado esto:


caso1     movfw      PORTA
              XORLW     0x01                   ;si Porta=00001
              BTFSS       STATUS,Z
              goto         caso4                  ;no,pasa caso4
              goto         caso2                  ;si,pasa caso2

caso2     movfw      PORTB
              XORLW     PORTB,0              ;Si PORTB=1
              BTFSS       STATUS,Z
              goto         caso3                   ;no,caso3
              BCF          PORTB,0               ;si,apagagaRb0


caso3     BSF           PORTB,0              ;enciende RB0

caso4     movfw      PORTA  
              XORLW     0x11                     ;si Porta=10001
              BTFSS       STATUS,Z
              goto         caso7
              goto         caso5

caso5     movfw      PORTB
              XORLW     PORTB,1
              BTFSS       STATUS,Z
              goto         caso6
              BCF          PORTB,0

caso6     BSF           PORTB,0

etc.etc.........


Estaria bien .....?????

Saludos Jachy  
Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: pocher en 09 de Mayo de 2003, 07:08:00
- El goto caso2 sobraría

- La instrucción XORLW requiere un Literal (un número) detrás y tú has puesto XORLW PORTB,0 (estaría mal)

- Si quieres hacer una XOR del acumulador con un registro es esta instrucción: XORWF f,d

- Según decías lo que quieres es que se active una salida, que esté un tiempo encendida y que luego se apague. Si es esto estúdiate el TMR0.

Un saludo
Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: jachy en 09 de Mayo de 2003, 10:43:00
no lo del tiempo me da lo mismo ,


La idea es que con la misma conbinacion binaria active y desactive. la salida RB .

ejm.

con 00001 actica
y si ya esta activado y se pulsa otra vez  00001 se desactive.


Saludos Jachy
Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: pocher en 09 de Mayo de 2003, 23:03:00
Hola Jachy.

Es muy importante detallar el exacto y correcto funcionamiento del automatismo (lo que se quiere conseguir).

Si lo que quieres es:

- Con 00001 (RA0=1) se activa RB0

- Una vez activado pueden pasar dos cosas: que se vuelva a pulsar RA0 debiendose desactivar RB0 o bien que se active cualquier otra entrada diferente de RA0 en cuyo caso debe de activarse la RB correspondiente con lo cual habrían dos salidas activas (RB0 y la otra)

- Las salidas activas se desactivaran al pulsar de nuevo sobre la RA correspondiente

Una posible solución sería esta:

La primera vez que actives RA0 por ejemplo, se debe activar RB0 y además una variable interna (un bit de una dirección de memoria) de forma que cuando quieras desactivar RB0 preguntarás si RA0=1 y si la variable interna es 1 en cuyo caso que se desactive RB0 y también la variable auxiliar interna (esta ya ha cumplido su cometido que era memorizar la primera pulsación de RA0)

- Deberás hacer actuar a los pulsadores por flanco de subida, ya que si mantienes mucho tiempo activa RA0 se producirían múltiples activaciones y desactivaciones de RB0

- Para hacerlos actuar por flanco de subida primero te preguntas si RA0=1 y luego si RA0=0 con lo cual solo se pasará a la próxima pregunta si se ha soltado el pulsador.

- Te recomiendo que hagas el diagrama de flujo del automatismo, ayuda a programar de una forma ordenada

Espero que se entienda la idea, la pantalla de un ordenador es muy fría para explicar cosas.

Un saludo
Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: jachy en 10 de Mayo de 2003, 16:10:00
Escrito originalmente por pocher


La primera vez que actives RA0 por ejemplo, se debe activar RB0 y además una variable interna (un bit de una dirección de memoria) de forma que cuando quieras desactivar RB0 preguntarás si RA0=1 y si la variable interna es 1 en cuyo caso que se desactive RB0 y también la variable auxiliar interna (esta ya ha cumplido su cometido que era memorizar la primera pulsación de RA0)

- Deberás hacer actuar a los pulsadores por flanco de subida, ya que si mantienes mucho tiempo activa RA0 se producirían múltiples activaciones y desactivaciones de RB0

- Para hacerlos actuar por flanco de subida primero te preguntas si RA0=1 y luego si RA0=0 con lo cual solo se pasará a la próxima pregunta si se ha soltado el pulsador.

- Te recomiendo que hagas el diagrama de flujo del automatismo, ayuda a programar de una forma ordenada

Espero que se entienda la idea, la pantalla de un ordenador es muy fría para explicar cosas.

Un saludo


Eso es esactamente lo k kiero hacer, el problema es que aprender uno solo ASM, como yo aqui solo pues me cuesta ,apesar de que ya he aprendido a hacer mis pinitos gracias a todos claro, no tendreis ejemplos y ejercicios  de todo esto para estudiarmelo , por que lo del flanco de subida te entiendo y comprendo lo que me quieres decir pero no se como interpretarlo en ASM.


Saludos jachy
Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: jachy en 11 de Mayo de 2003, 10:03:00
Bueno viendo el funcionamiento de programa he decidido dejar el asm como esta lo unico k he visto es la necesidad de un secuenciador manual que pase de RB0 a RB7 de uno en uno cuando a la entradade PORTA  sea = a 0x01
pero tengo un error en el ASM por k al montarlo en el entrenador no se mantiene quieto en la  ultima posicion de RBx donde anteriormente estaba,

list      p=16f84
   include      "p16f84.inc"
   org      0x00
   

INICIO   bsf   STATUS,RP0
   clrf   TRISB
   movlw   b"00001111"
   movwf   TRISA
   bcf   STATUS,RP0


caso1    movfw   PORTA
        XORLW   0x01                  
   BTFSS   STATUS,Z
        goto    caso1                                  

caso12  movfw   PORTA
        XORLW   0x01
   BTFSS   STATUS,Z
   GOTO   On1
   GOTO   caso12

On1   BSF   PORTB,0
   BCF   PORTB,7


;En caso1 si en la entrada tenemos0x01 pasa a caso12 y si caso12 ya no esta porta en 0x01 entonces pone a onRB0 y off RB7 (asi hasta k no suelte el pulsador no enciende RB0 Y APAGA RB7) Pero lo k no se hacer es que haga este ciclo hasta k se cumpla y cuando lo cumpla pase al siguiente y haga lo mismo k el caso anterior pero con la siguiente salida RB.


caso2    movfw   PORTA
        XORLW   0x01                  
   BTFSS   STATUS,Z
        goto    caso2                                  

caso22  movfw   PORTA
        XORLW     0x01
   BTFSS   STATUS,Z
   GOTO   On2
   GOTO   caso22

On2   BSF   PORTB,1
   BCF   PORTB,0

caso3    movfw   PORTA
        XORLW     0x01                  
   BTFSS   STATUS,Z
        goto    caso3                                  

caso32  movfw   PORTA
        XORLW    0x01
   BTFSS   STATUS,Z
   GOTO   On3
   GOTO   caso32

On3   BSF   PORTB,2
   BCF   PORTB,1

caso4    movfw   PORTA
        XORLW   0x01                  
   BTFSS   STATUS,Z
        goto    caso4                                  

caso42  movfw   PORTA
        XORLW   0x01
   BTFSS   STATUS,Z
   GOTO   On4
   GOTO   caso42

On4   BSF   PORTB,3
   BCF   PORTB,2

caso5    movfw   PORTA
        XORLW   0x01                  
   BTFSS   STATUS,Z
        goto    caso5                                  

caso52  movfw   PORTA
        XORLW   0x01
   BTFSS   STATUS,Z
   GOTO   On5
   GOTO   caso52

On5   BSF   PORTB,4
   BCF   PORTB,3

caso6    movfw   PORTA
        XORLW   0x01                  
   BTFSS   STATUS,Z
        goto    caso6                                  

caso62  movfw   PORTA
        XORLW   0x01
   BTFSS   STATUS,Z
   GOTO   On6
   GOTO   caso62

On6   BSF   PORTB,5
   BCF   PORTB,4

caso7    movfw   PORTA
        XORLW   0x01                  
   BTFSS   STATUS,Z
        goto    caso7                                  

caso72  movfw   PORTA
        XORLW   0x01
   BTFSS   STATUS,Z
   GOTO   On7
   GOTO   caso72

On7   BSF   PORTB,6
   BCF   PORTB,5

caso8    movfw   PORTA
        XORLW   0x01                  
   BTFSS   STATUS,Z
        goto    caso8                                  

caso82  movfw   PORTA
        XORLW   0x01
   BTFSS   STATUS,Z
   GOTO   On8
   GOTO   caso82

On8   BSF   PORTB,7
   BCF   PORTB,6

goto   caso1

end


¿Que instruccion hay para hacer eso?

Saludos Jachy
Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: pocher en 12 de Mayo de 2003, 03:27:00
Hola Jachy.

En el apartado de microcontroladores he puesto un ejercicio resuelto por flancos, quizá te sea de ayuda.

Un saludo
Título: RE: necesito ayuda con este pekeño proyecto
Publicado por: jachy en 12 de Mayo de 2003, 05:57:00
Hola gracias lo del flanco de subida lo en conseguido en el ejecicio anterior pero tengo otro problemilla miratelo y me dices algo .

Saludos Jachy