Translate, Traductor

Mostrando entradas con la etiqueta secuenciador. Mostrar todas las entradas
Mostrando entradas con la etiqueta secuenciador. Mostrar todas las entradas

viernes, 6 de julio de 2012

Secuenciador con 6 modos

Este secuenciador tiene seis modos de secuencia diferentes, que se seleccionan con un pulsador. Para cambiar de secuencia se deja presionado el pulsador hasta que esta cambie.
El programa se hizo de dos formas diferentes, en la primera forma se usa en cada secuencia una rutina para mostrarla, lo que da como resultado un programa mas o menos largo y la segunda forma nos ahorra unas cuantas lineas de código (como 40 lineas) usamos una sola rutina para todas las secuencias.

Video del circuito:



Voy a publicar las dos formas para que se analicen las diferencias y se vea la ventaja de usar subrrutinas.


Primera forma:

  LIST P=16F886

    INCLUDE P16F886.INC
ERRORLEVEL -302

    __CONFIG _CONFIG1, _INTOSCIO & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_ON & _IESO_OFF & _FCMEN_OFF & _LVP_OFF & _DEBUG_OFF
    __CONFIG _CONFIG2, _BOR40V & _WRT_OFF


CBLOCK 0X20
CUENTA, VALORAD, d1, d2, MODO
ENDC


      ORG 0X00
      GOTO CONFIGURA
     
     
RET_300MS ;199998 cycles
movlw 0x3F
movwf d1
movlw 0x9D
movwf d2
Delay_0
decfsz d1, f
goto $+2
decfsz d2, f
goto Delay_0

;2 cycles
goto $+1
RETURN

SEC0 ADDWF PCL,F
RETLW B'10000000'
RETLW B'01000000'
RETLW B'00100000'
RETLW B'00010000'
RETLW B'00001000'
RETLW B'00000100'
RETLW B'00000010'
RETLW B'00000001'
RETLW B'00000010'
RETLW B'00000100'
RETLW B'00001000'
RETLW B'00010000'
RETLW B'00100000'
RETLW B'01000000'
RETLW B'10000000';14
     
SEC1 RETLW B'10000001'
RETLW B'01000010'
RETLW B'00100100'
RETLW B'00011000'
RETLW B'00100100'
RETLW B'01000010';20


SEC2 RETLW B'11000011'
RETLW B'11100111'
RETLW B'11111111'
RETLW B'01111110'
RETLW B'00111100'
RETLW B'00011000'
RETLW B'00100100'
RETLW B'01000010'
RETLW B'10000001';29


SEC3 RETLW B'10000000'
RETLW B'11000000'
RETLW B'11100000'
RETLW B'11110000'
RETLW B'11111000'
RETLW B'11111100'
RETLW B'11111110'
RETLW B'11111111'
RETLW B'01111111'
RETLW B'00111111'
RETLW B'00011111'
RETLW B'00001111'
RETLW B'00000111'
RETLW B'00000011'
RETLW B'00000001';44

SEC4 RETLW B'10000000'
RETLW B'10000001'
RETLW B'10000010'
RETLW B'10000100'
RETLW B'10001000'
RETLW B'10010000'
RETLW B'10100000'
RETLW B'11000001'
RETLW B'11000010'
RETLW B'11000100'
RETLW B'11001000'
RETLW B'11010000'
RETLW B'11100001'
RETLW B'11100010'
RETLW B'11100100'
RETLW B'11101000'
RETLW B'11110001'
RETLW B'11110010'
RETLW B'11110100'
RETLW B'11111001'
RETLW B'11111010'
RETLW B'11111101'
RETLW B'11111110'
RETLW B'11111111';68

SEC5 RETLW B'11111111'
RETLW B'11111101'
RETLW B'11111011'
RETLW B'11110111'
RETLW B'11101111'
RETLW B'11011111'
RETLW B'10111111'
RETLW B'01111110'
RETLW B'01111101'
RETLW B'01111011'
RETLW B'01110111'
RETLW B'01101111'
RETLW B'01011111'
RETLW B'00111110'
RETLW B'00111101'
RETLW B'00111011'
RETLW B'00110111'
RETLW B'00101111'
RETLW B'00011110'
RETLW B'00011101'
RETLW B'00011011'
RETLW B'00010111'
RETLW B'00001110'
RETLW B'00001101'
RETLW B'00001011'
RETLW B'00000110'
RETLW B'00000101'
RETLW B'00000010'
RETLW B'00000001'
RETLW B'00000000';98




CONFIGURA CLRF     PORTB
BANKSEL   OSCCON
      MOVLW B'01101100'
      MOVWF OSCCON
BANKSEL ANSEL
      CLRF ANSEL
CLRF     ANSELH
BANKSEL TRISB
MOVLW .1
MOVWF TRISA
CLRF     TRISB
CLRF     TRISC
      BANKSEL PORTB
CLRF PORTA
CLRF PORTB
CLRF PORTC
CLRF MODO
NUEVO CLRF CUENTA

INICIO BTFSS PORTA,0
GOTO SECUENCIAS

CALL RET_300MS
INCF MODO,F
MOVLW .6
XORWF MODO,W
BTFSS STATUS,Z
GOTO SECUENCIAS
CLRF MODO
;=================================================
SECUENCIAS CLRW
XORWF MODO,W
BTFSS STATUS,Z
GOTO UNO

CLRF CUENTA
OTRO MOVF CUENTA,W
CALL SEC0
MOVWF PORTB
CALL RET_300MS
INCF CUENTA,F
MOVLW .14
XORWF CUENTA,W
BTFSC STATUS,Z
GOTO INICIO
GOTO OTRO

;=================================================
UNO MOVLW .1
XORWF MODO,W
BTFSS STATUS,Z
GOTO DOS

MOVLW .15
MOVWF CUENTA
OTRO1 MOVF CUENTA,W
CALL SEC0
MOVWF PORTB
CALL RET_300MS
INCF CUENTA,F
MOVLW .21
XORWF CUENTA,W
BTFSC STATUS,Z
GOTO INICIO
GOTO OTRO1
;=================================================
DOS MOVLW .2
XORWF MODO,W
BTFSS STATUS,Z
GOTO TRES

MOVLW .21
MOVWF CUENTA
OTRO2 MOVF CUENTA,W
CALL SEC0
MOVWF PORTB
CALL RET_300MS
INCF CUENTA,F
MOVLW .30
XORWF CUENTA,W
BTFSC STATUS,Z
GOTO INICIO
GOTO OTRO2
;=================================================
TRES MOVLW .3
XORWF MODO,W
BTFSS STATUS,Z
GOTO CUATRO

MOVLW .30
MOVWF CUENTA
OTRO3 MOVF CUENTA,W
CALL SEC0
MOVWF PORTB
CALL RET_300MS
INCF CUENTA,F
MOVLW .45
XORWF CUENTA,W
BTFSC STATUS,Z
GOTO INICIO
GOTO OTRO3
;=================================================
CUATRO MOVLW .4
XORWF MODO,W
BTFSS STATUS,Z
GOTO CINCO

MOVLW .45
MOVWF CUENTA
OTRO4 MOVF CUENTA,W
CALL SEC0
MOVWF PORTB
CALL RET_300MS
INCF CUENTA,F
MOVLW .69
XORWF CUENTA,W
BTFSC STATUS,Z
GOTO INICIO
GOTO OTRO4
;=================================================
CINCO MOVLW .5
XORWF MODO,W
BTFSS STATUS,Z
GOTO INICIO

MOVLW .69
MOVWF CUENTA
OTRO5 MOVF CUENTA,W
CALL SEC0
MOVWF PORTB
CALL RET_300MS
INCF CUENTA,F
MOVLW .99
XORWF CUENTA,W
BTFSC STATUS,Z
GOTO INICIO
GOTO OTRO5
;=================================================
        END



Segunda forma:



  LIST P=16F886

    INCLUDE P16F886.INC
ERRORLEVEL -302

    __CONFIG _CONFIG1, _INTOSCIO & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_ON & _IESO_OFF & _FCMEN_OFF & _LVP_OFF & _DEBUG_OFF
    __CONFIG _CONFIG2, _BOR40V & _WRT_OFF


CBLOCK 0X20
CUENTA, VALORAD, d1, d2, MODO, OFFSET
ENDC


      ORG 0X00
      GOTO CONFIGURA
     
     
RET_300MS ;199998 cycles
movlw 0x02;0x3F
movwf d1
movlw 0x5D;0x9D
movwf d2
Delay_0
decfsz d1, f
goto $+2
decfsz d2, f
goto Delay_0

;2 cycles
goto $+1
RETURN

SEC0 ADDWF PCL,F
RETLW B'10000000'
RETLW B'01000000'
RETLW B'00100000'
RETLW B'00010000'
RETLW B'00001000'
RETLW B'00000100'
RETLW B'00000010'
RETLW B'00000001'
RETLW B'00000010'
RETLW B'00000100'
RETLW B'00001000'
RETLW B'00010000'
RETLW B'00100000'
RETLW B'01000000'
RETLW B'10000000';14
     
SEC1 RETLW B'10000001'
RETLW B'01000010'
RETLW B'00100100'
RETLW B'00011000'
RETLW B'00100100'
RETLW B'01000010';20


SEC2 RETLW B'11000011'
RETLW B'11100111'
RETLW B'11111111'
RETLW B'01111110'
RETLW B'00111100'
RETLW B'00011000'
RETLW B'00100100'
RETLW B'01000010'
RETLW B'10000001';29


SEC3 RETLW B'10000000'
RETLW B'11000000'
RETLW B'11100000'
RETLW B'11110000'
RETLW B'11111000'
RETLW B'11111100'
RETLW B'11111110'
RETLW B'11111111'
RETLW B'01111111'
RETLW B'00111111'
RETLW B'00011111'
RETLW B'00001111'
RETLW B'00000111'
RETLW B'00000011'
RETLW B'00000001';44

SEC4 RETLW B'10000000'
RETLW B'10000001'
RETLW B'10000010'
RETLW B'10000100'
RETLW B'10001000'
RETLW B'10010000'
RETLW B'10100000'
RETLW B'11000001'
RETLW B'11000010'
RETLW B'11000100'
RETLW B'11001000'
RETLW B'11010000'
RETLW B'11100001'
RETLW B'11100010'
RETLW B'11100100'
RETLW B'11101000'
RETLW B'11110001'
RETLW B'11110010'
RETLW B'11110100'
RETLW B'11111001'
RETLW B'11111010'
RETLW B'11111101'
RETLW B'11111110'
RETLW B'11111111';68

SEC5 RETLW B'11111111'
RETLW B'11111101'
RETLW B'11111011'
RETLW B'11110111'
RETLW B'11101111'
RETLW B'11011111'
RETLW B'10111111'
RETLW B'01111110'
RETLW B'01111101'
RETLW B'01111011'
RETLW B'01110111'
RETLW B'01101111'
RETLW B'01011111'
RETLW B'00111110'
RETLW B'00111101'
RETLW B'00111011'
RETLW B'00110111'
RETLW B'00101111'
RETLW B'00011110'
RETLW B'00011101'
RETLW B'00011011'
RETLW B'00010111'
RETLW B'00001110'
RETLW B'00001101'
RETLW B'00001011'
RETLW B'00000110'
RETLW B'00000101'
RETLW B'00000010'
RETLW B'00000001'
RETLW B'00000000';98

MOSTRAR MOVF CUENTA,W
CALL SEC0
MOVWF PORTB
CALL RET_300MS
INCF CUENTA,F
MOVF OFFSET,W
XORWF CUENTA,W
BTFSC STATUS,Z
RETURN
GOTO MOSTRAR


CONFIGURA CLRF     PORTB
BANKSEL   OSCCON
      MOVLW B'01101100'
      MOVWF OSCCON
BANKSEL ANSEL
      CLRF ANSEL
CLRF     ANSELH
BANKSEL TRISB
MOVLW .1
MOVWF TRISA
CLRF     TRISB
CLRF     TRISC
      BANKSEL PORTB
CLRF PORTA
CLRF PORTB
CLRF PORTC
CLRF MODO
NUEVO CLRF CUENTA

INICIO BTFSS PORTA,0
GOTO SECUENCIAS

CALL RET_300MS
INCF MODO,F
MOVLW .6
XORWF MODO,W
BTFSS STATUS,Z
GOTO SECUENCIAS
CLRF MODO
;=================================================
SECUENCIAS CLRW
XORWF MODO,W
BTFSS STATUS,Z
GOTO UNO

CLRF CUENTA
MOVLW .14
MOVWF OFFSET
CALL MOSTRAR
GOTO INICIO
;=================================================
UNO MOVLW .1
XORWF MODO,W
BTFSS STATUS,Z
GOTO DOS

MOVLW .15
MOVWF CUENTA
MOVLW .21
MOVWF OFFSET
CALL MOSTRAR
GOTO INICIO
;=================================================
DOS MOVLW .2
XORWF MODO,W
BTFSS STATUS,Z
GOTO TRES

MOVLW .21
MOVWF CUENTA
MOVLW .30
MOVWF OFFSET
CALL MOSTRAR
GOTO INICIO
;=================================================
TRES MOVLW .3
XORWF MODO,W
BTFSS STATUS,Z
GOTO CUATRO

MOVLW .30
MOVWF CUENTA
MOVLW .45
MOVWF OFFSET
CALL MOSTRAR
GOTO INICIO
;=================================================
CUATRO MOVLW .4
XORWF MODO,W
BTFSS STATUS,Z
GOTO CINCO

MOVLW .45
MOVWF CUENTA
MOVLW .69
MOVWF OFFSET
CALL MOSTRAR
GOTO INICIO
;=================================================
CINCO MOVLW .5
XORWF MODO,W
BTFSS STATUS,Z
GOTO INICIO

MOVLW .69
MOVWF CUENTA
MOVLW .99
MOVWF OFFSET
CALL MOSTRAR
GOTO INICIO
;=================================================

        END



Circuito:





Copyright 2012  edwtron
       
Este DOCUMENTO es un DOCUMENTO LIBRE, usted puede redistribuirlo y/o modificarlo bajo los terminos de la GNU FDL tal y como es publicada por la fundacion de software libre; bajo la version 1.3 de la licencia, o  una version superior.
     Leer la licencia GNU gpl para mas detalles. 

    Permission is granted to copy, distribute and/or modify this document
    under the terms of the GNU Free Documentation License, Version 1.3
    or any later version published by the Free Software Foundation;
    with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
    A copy of the license is included in the section entitled "GNU
    Free Documentation License".  


Secuenciador Variable usando el TMR0 y el AD

Secuenciador de 8 LED's usando el TMR0 y el conversor análogo a digital.
Por medio de un potenciometro conectado a uno de los canales del conversor análogo a digital, podemos variar la velocidad de los LED's conectados al PORTB, el valor en el potenciometro es leído por el AD y después almacenado en el TMR0.

Circuito



Código fuente


   LIST P=16F886

    INCLUDE P16F886.INC
ERRORLEVEL -302

    __CONFIG _CONFIG1, _INTOSCIO & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_ON & _IESO_OFF & _FCMEN_OFF & _LVP_OFF & _DEBUG_OFF
    __CONFIG _CONFIG2, _BOR40V & _WRT_OFF


CBLOCK 0X20
CUENTA, PDel0, VALORAD
ENDC


      ORG 0X00
      GOTO CONFIGURA
     
      ORG 0X04
      GOTO INTERRUPCION
      ORG 0X05

INTERRUPCION DECFSZ CUENTA,F
GOTO SALE
RLF PORTB
MOVLW .5
MOVWF CUENTA
SALE MOVF VALORAD,W
MOVWF TMR0
BCF INTCON,T0IF
RETFIE

RETAD  movlw     .123      ; 1 set number of repetitions
        movwf     PDel0     ; 1 |
PLoop0  clrwdt              ; 1 clear watchdog
        decfsz    PDel0, 1  ; 1 + (1) is the time over?
        goto      PLoop0    ; 2 no, loop
PDelL1  goto PDelL2         ; 2 cycles delay
PDelL2  clrwdt              ; 1 cycle delay
        return              ; 2+2 Done
 
   
CONFIGURA CLRF     PORTB
BANKSEL   OSCCON
      MOVLW B'01101100'
      MOVWF OSCCON
      BANKSEL ADCON1
  MOVLW B'00000000' ; 7 justifica a la izq, 5 Vss ref, 4 Vdd ref
  MOVWF ADCON1
BANKSEL ANSEL
MOVLW B'00000001'
      MOVWF ANSEL
CLRF     ANSELH
BANKSEL TRISB
MOVLW .1
MOVWF TRISA
CLRF     TRISB
CLRF     TRISC
BANKSEL OPTION_REG
MOVLW B'00000111'
MOVWF OPTION_REG
MOVLW B'10100000'
MOVWF INTCON

BANKSEL ADCON0
      MOVLW B'11000001' ;7:6 FCR clock, 5:2 canal, 1 go, 0 AD ON
      MOVWF ADCON0
      BANKSEL PORTB
CLRF PORTA
CLRF PORTC
CLRF TMR0
MOVLW .1
MOVWF PORTB
MOVLW .20
MOVWF CUENTA

CICLO   BSF ADCON0,GO
  CALL RETAD
END_AD BTFSC ADCON0,GO
  GOTO END_AD
  MOVF ADRESH,W
 
  MOVWF VALORAD
GOTO     CICLO

        END


Copyright 2012  edwtron
       
Este DOCUMENTO es un DOCUMENTO LIBRE, usted puede redistribuirlo y/o modificarlo bajo los terminos de la GNU FDL tal y como es publicada por la fundacion de software libre; bajo la version 1.3 de la licencia, o  una version superior.
     Leer la licencia GNU gpl para mas detalles. 

    Permission is granted to copy, distribute and/or modify this document
    under the terms of the GNU Free Documentation License, Version 1.3
    or any later version published by the Free Software Foundation;
    with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
    A copy of the license is included in the section entitled "GNU
    Free Documentation License".   



Secuenciador usando el TMR0 de los PIC's

En este programa controlamos una secuencia en 8 LED's manejando el retardo con el TMR0.

Circuito


Programa para el PIC


   LIST P=16F886

    INCLUDE P16F886.INC
ERRORLEVEL -302

    __CONFIG _CONFIG1, _INTOSCIO & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_ON & _IESO_OFF & _FCMEN_OFF & _LVP_OFF & _DEBUG_OFF
    __CONFIG _CONFIG2, _BOR40V & _WRT_OFF


CBLOCK 0X20
CUENTA
ENDC


      ORG 0X00
      GOTO CONFIGURA
     
      ORG 0X04
      GOTO INTERRUPCION
      ORG 0X05

INTERRUPCION DECFSZ CUENTA,F
GOTO SALE
RLF PORTB
MOVLW .3
MOVWF CUENTA
SALE MOVLW .60
MOVWF TMR0
BCF INTCON,T0IF
RETFIE
 
   
CONFIGURA CLRF     PORTB
BANKSEL ANSEL
CLRF     ANSEL
CLRF     ANSELH
BANKSEL TRISB
CLRF     TRISB
BANKSEL OPTION_REG
MOVLW B'00000111'
MOVWF OPTION_REG
MOVLW B'10100000'
MOVWF INTCON
BANKSEL PORTB

MOVLW .60
MOVWF TMR0
MOVLW .1
MOVWF PORTB
MOVLW .20
MOVWF CUENTA

CICLO   GOTO     CICLO

        END





Copyright 2012  edwtron
       
Este DOCUMENTO es un DOCUMENTO LIBRE, usted puede redistribuirlo y/o modificarlo bajo los terminos de la GNU FDL tal y como es publicada por la fundacion de software libre; bajo la version 1.3 de la licencia, o  una version superior.
     Leer la licencia GNU gpl para mas detalles. 

    Permission is granted to copy, distribute and/or modify this document
    under the terms of the GNU Free Documentation License, Version 1.3
    or any later version published by the Free Software Foundation;
    with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
    A copy of the license is included in the section entitled "GNU
    Free Documentation License".