Autor Tema: Usar comando SHIFTOUT con integrado 74HC595  (Leído 4655 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Mecatronico_MG

  • PIC10
  • *
  • Mensajes: 20
Usar comando SHIFTOUT con integrado 74HC595
« en: 26 de Julio de 2012, 03:08:58 »
Hola amigos. Estoy aprendiendo a programar en microcode studio y se me ha presentado un problema con el registro de desplazamiento 74HC595. Estoy usando 2 de estos integrados junto con el comando SHIFTOUT de microcode para desplazar un dato por 14 bits. El problema es que no logro hacer que el circuito funcione como deseo. Aqui pongo el circuito y mi programa. Lo que quiero es que los leds se vayan encendiendo uno por uno desde el primero hasta el ultimo, y cuando se encienda el ultimo led se quede prendido, y luego empiece a encenderse otra vez el primer led hasta llegar al penultimo y que tambien se quede prendido, algo asi como una "pila" que se va llenando. Es decir, al final todos los leds deberian prenderse. Si alguien me puede ayudar se lo agradecere mucho.  :)
Código: [Seleccionar]

Código: [Seleccionar]
@ DEVICE PIC16F628A
@ DEVICE PROTECT_OFF
@ DEVICE CPD_OFF
@ DEVICE WDT_OFF
@ DEVICE BOD_OFF
@ DEVICE PWRT_OFF
@ DEVICE MCLR_OFF
@ DEVICE LVP_OFF
@ DEVICE HS_OSC

INCLUDE "modedefs.bas"
DEFINE   OSC 20

TRISA=$F0 'PORTA.0 ES ENTRADA
TRISB=0 'PORTB.0 ES SALIDA
CMCON=7 'DESACTIVA EL MODO COMPARADOR

CLK VAR PORTB.0
DS VAR PORTB.1
ST VAR PORTB.2 : ST = 0
DATO VAR WORD  : DATO = 1
CUENTA VAR BYTE
IND VAR BYTE : IND=14

BUCLE:
   
    SHIFTOUT DS,CLK,1,[DATO\14]
    ST=1 : PAUSE 1 : ST = 0
    DATO = DATO<<1
    CUENTA=CUENTA+1
    PAUSE 100
    IF CUENTA<IND THEN
        GOTO bucle
    ENDIF
   
CUENTA=0
IND=IND-1
GOTO BUCLE
Martin.

Desconectado Mecatronico_MG

  • PIC10
  • *
  • Mensajes: 20
Re: Usar comando SHIFTOUT con integrado 74HC595
« Respuesta #1 en: 26 de Julio de 2012, 03:21:07 »
El compilador es pic basic pro (.pbp)   :-/

Adjunto en un archivo rar el diagrama del circuito en proteus y el codigo en pic basic pro.
« Última modificación: 26 de Julio de 2012, 03:40:33 por Mecatronico_MG »
Martin.

Desconectado jansuini

  • Moderador Local
  • PIC24F
  • *****
  • Mensajes: 566
Re: Usar comando SHIFTOUT con integrado 74HC595
« Respuesta #2 en: 26 de Julio de 2012, 09:50:53 »
Hola:
Realmente te respondo para darte una pista rápida ,no he estudiado en detalle el circuito o el 595 ,pero me parece que no debes considerar el desplazamiento como de 14 bits sino de 16 ,porque entiendo que los 2 integrados 595 son de 8bits cada uno ,emtonces deberías hacer la escritura de 16 bits ,aunque sea los 2 no usados como cero.-
Sds.
Jorge

Desconectado Mecatronico_MG

  • PIC10
  • *
  • Mensajes: 20
Re: Usar comando SHIFTOUT con integrado 74HC595
« Respuesta #3 en: 26 de Julio de 2012, 22:52:26 »
Gracias Jorge, probare con tu idea. Si tienes tiempo podrias verificar el codigo anterior que hice? Tengo una duda, no se por que el ultimo GOTO BUCLE del codigo, aparentemente no funciona  :? :?
Martin.

Desconectado Mecatronico_MG

  • PIC10
  • *
  • Mensajes: 20
Re: Usar comando SHIFTOUT con integrado 74HC595
« Respuesta #4 en: 27 de Julio de 2012, 03:13:58 »
Amigo, lo probe considerando un desplazamiento de 16 bits y no resulto. Me parece que ese no es el problema.  El problema es que la orden GOTO no esta funcionando. Alguien puede ayudarme a ver que esta mal en el codigo?  :(

Código: [Seleccionar]
@ DEVICE PIC16F628A
@ DEVICE PROTECT_OFF
@ DEVICE CPD_OFF
@ DEVICE WDT_OFF
@ DEVICE BOD_OFF
@ DEVICE PWRT_OFF
@ DEVICE MCLR_OFF
@ DEVICE LVP_OFF
@ DEVICE HS_OSC

INCLUDE "modedefs.bas"
DEFINE   OSC 20

TRISA=$F0 'PORTA.0 ES ENTRADA
TRISB=0 'PORTB.0 ES SALIDA
CMCON=7 'DESACTIVA EL MODO COMPARADOR

CLK VAR PORTB.0
DS VAR PORTB.1
ST VAR PORTB.2 : ST = 0
DATO VAR WORD  : DATO = 1
CUENTA VAR BYTE
IND VAR BYTE : IND=14

BUCLE:
   
    SHIFTOUT DS,CLK,1,[DATO\14]
    ST=1 : PAUSE 1 : ST = 0
    DATO = DATO<<1
    CUENTA=CUENTA+1
    PAUSE 100
    IF CUENTA<IND THEN
        GOTO BUCLE
    ENDIF
   
RET:
   
    CUENTA=0
    IND=IND-1
    GOTO BUCLE  'esta orden GOTO BUCLE me parece que no funciona
   
Martin.