Ir ao conteúdo
  • Cadastre-se

vitorlr

Membro Júnior
  • Posts

    2
  • Cadastrado em

  • Última visita

posts postados por vitorlr

  1. Eu estou fazendo um projeto de conclusão de curso e preciso de uma ajuda urgente! Estou fazendo um pwm ajustavel no pic 16f877a,ele ajusta o duty cicle atraves de 2 botões,eu executei ele no proteus eu funciono perfeitamente mas quando passo pro projeto fisico acontece 2 problemas: o primeiro é q quando eu aperto e seguro o botao de incrementar ele dispara e o outro é q quando eu aperto o botao de decrementar ele vai direto pro valor minimo ! Por favor me ajudem!

    Ai o programa em assembly! Eu uso o MBLAB v8.91 pra copilar

     

    ;*****************************************************
    ;*                   PWM VARIABLE                    *
    ;*   VERSÃO 2.0                    DATA;14/11/2014   *
    ;*                        *
    ;*****************************************************
     
    ;*****************************************************
    ;*                  DESCRIÇÃO GERAL                  *
    ;*****************************************************
    ; ESTE PROGRAMA ESTA PREPARADO PARA CRIAR UM PWM E
    ; LER 2 botões PARA VARIAR ESTE PWM UM PARA AUMENTAR
    ; E OUTRO PARA DIMINUIR O DUTY CICLE DO MESMO.
    ; PERIODO(PWM)->(PR2+1)*4*Tosc*PRESCALER(TMR2)
    ;               (61+1) * 4 * 100ns * 4
    ;                       96us~=10Khz
    ; DUTY CICLE(PWN)->[CCPR;CCP1CON<5;4>]*Tosc*PRESCALER(TMR2)
    ;             MAX->[240] * 100ns * 4 = 96us   __ 100%
    ;             MIN->[12]  * 100ns * 4 = 4.8us  __ 5%
    ;*****************************************************
    ;*            CONFIGURAÇÕES PARA A GRAVAÇÃO          *
    ;*****************************************************
     
     
    ;*****************************************************
    ;*     DEFINIÇÕES DAS VARIAVEIS INTERNAS DO PIC      *
    ;*****************************************************
     
    #INCLUDE <P16F877A.INC>
    __CONFIG  _BODEN_OFF & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _HS_OSC;
     
    ;*****************************************************
    ;*        DEFINIÇÃO DOS BANCOS DE MEMORIA            *
    ;*****************************************************
    ;DEFINIÇÃO DE COMANDOS DE USUÁRIO PARA ALTERAÇÃO DA PÁGINA DE MEMÓRIA
     
    #DEFINE BANK0 BCF STATUS,RP0 ;SETA BANK 0 DE MEMÓRIA
    #DEFINE BANK1 BSF STATUS,RP0 ;SETA BANK 1 DE MAMÓRIA
     
    ;*****************************************************
    ;*              DEFINIÇÃO DE VARIAVEIS               *
    ;*****************************************************
     
    CBLOCK 0X20
    FILTRO
    ENDC
     
    ;*****************************************************
    ;*                  FLAGS INTERNOS                   *
    ;*****************************************************
    ; DEFINIÇÃO DE TODOS OS FLAGS UTILIZADOS PELO SISTEMA
     
    ;*****************************************************
    ;*              DEFINIÇÃO DE CONSTANTES              *
    ;*****************************************************
    ; DEFINIÇÃO DE TODAS AS CONSTANTES UTILIZADAS PELO SISTEMA
    MIN         EQU     .3   ;MINIMO DUTY CICLE (0,05)
    MAX         EQU     .60  ;MAXIMO DUTY CICLE   (1)
    T_FILTRO    EQU     .250 ;TEMPO DO FILTRA BOTAO
    ;*****************************************************
    ;*                      ENTRADAS                     *
    ;*****************************************************
     
    #DEFINE BTAUMENTA   PORTB,1 ;AUMENTA O PWM
                                ;1->PRESSIONADO
                                ;0->LIBERADO
    #DEFINE BTDIMINUI   PORTB,2 ;DIMINUI O PWM
                                ;1->PRESSIONADO
                                ;0->LIBERADO
     
    ;*****************************************************
    ;*                      SAIDAS                       *
    ;*****************************************************
     
    ;*****************************************************
    ;*                   VETOR RESET                     *
    ;*****************************************************
     
    ORG 0x0000 ;ENDEREÇO INICIAL DE PROCESSAMENTO
    GOTO INICIO
     
    ;*****************************************************
    ;*               INICIO DA INTERRUPÇÃO               *
    ;*****************************************************
    ; AS INTERRUPÇÕES NÃO SERÃO UTILIZADAS, POR ISSO PODEMOS SUBSTITUIR
    ; TODO O SISTEMA EXISTENTE NO ARQUIVO MODELO PELO APRESENTADO ABAIXO
    ; ESTE SISTEMA NÃO É OBRIGATÓRIO, MAS PODE EVITAR PROBLEMAS FUTUROS
     
    ORG 0x0004 ;ENDEREÇO INICIAL DA INTERRUPÇÃO
    RETFIE ;RETORNA DA INTERRUPÇÃO
     
    ;*****************************************************
    ;*                 INCIO DO PROGRAMA                 *
    ;*****************************************************
    INICIO
        BANK1 ;ALTERA PARA O BANCO 1
    MOVLW B'00000000' ;PORTA TODOS I/O SAIDAS
    MOVWF TRISA
        MOVLW B'00000110' ;PORTB<2:1> DEFINIDOS COMO
    MOVWF TRISB       ;ENTRADA (BTAUMENTA E BTDIMINUI)
        MOVLW B'00000000' ;PORTC TODOS I/O SAIDAS
    MOVWF TRISC       ;PORTC<2> = CCP1 |SAIDA PWM
        MOVLW B'00000000' ;PORTD TODOS I/O SAIDAS
    MOVWF TRISD
        MOVLW B'00000000' ;PORTE TODOS I/O SAIDAS
    MOVWF TRISE
        MOVLW B'10000111' ;opções
    MOVWF OPTION_REG  ;DESABILITA PULL-UPs
                            ;TMR0 PRESCALER = 1:256
        MOVLW B'00000000' ;DESABILITA TODAS AS INTER.
    MOVWF INTCON
        MOVLW B'00000000' ;DESABILITA AS INTER. DE TMR1E2
    MOVWF PIE1
        MOVLW B'00000111' ;DESABILITA OS COMPARADORES
    MOVWF CMCON
        MOVLW .61         ;COLOCA O VALOR 61 NO PR2
    MOVWF PR2         ;O QUE RESULTA NUM PERIODO DE
                            ;100us E UMA FREQUENCIA DE 10kHz
        BANK0
        MOVLW B'00001100' ;ATIVA O PWM E OS COLOCA OS
                            ;BITS MENOS SIGNIFICATIVOS
                            ;EM 0.
    MOVWF CCP1CON
        MOVLW B'00000101' ;ATIVA O TMR2 E REGULA O
                            ;PRESCALER = 4
    MOVWF T2CON
        MOVLW .30         ;COLOCA O VALOR 31 NO CCPR1L
                            ;RESULTANDO NUM DUTYCICLE DE 0,5
    MOVWF CCPR1L      ;CCP1RL INCIA NA METADE
     
    ;*****************************************************
    ;*           INCIALIZAÇÃO DAS VARIAVEIS              *
    ;*****************************************************
        CLRF PORTA ;LIMPA O PORTA
    CLRF PORTB ;LIMPA O PORTB
        CLRF PORTC ;LIMPA O PORTC
    CLRF PORTD ;LIMPA O PORTD
    CLRF PORTE ;LIMPA O PORTE
    ;*****************************************************
    ;*                ROTINA PRINCIPAL                   *
    ;*****************************************************
     
    MAIN
    MOVLW T_FILTRO
    MOVWF FILTRO ;INICIALIZA FILTRO = T_FILTRO
     
    CHECABTA
    BTFSS BTAUMENTA ;O BOTÃO ESTÁ PRESSIONADO?
    GOTO CHECA ;NÃO, ENTÃO CONTINUA ESPERANDO
                            ;SIM
    DECFSZ FILTRO,F ;DECREMENTA O FILTRO DO BOTÃO
                            ;TERMINOU?
    GOTO CHECABTA ;NÃO, CONTINUA ESPERANDO
                            ;SIM
    TESTABTA
    ;AUMENTAR O DUTYCICLE ?
        BTFSS   BTAUMENTA   ;BT PRESCIONADO?
        GOTO    CHECA       ;NAO, TESTA OUTRO BT
        GOTO    AUMENTA     ;SIM, AUMENTA DC
    CHECA
    MOVLW T_FILTRO
    MOVWF FILTRO ;INICIALIZA FILTRO = T_FILTRO
     
    CHECABTD
    BTFSS BTDIMINUI ;O BOTÃO ESTÁ PRESSIONADO?
    GOTO MAIN ;NÃO, ENTÃO CONTINUA ESPERANDO
    ;SIM
    DECFSZ FILTRO,F ;DECREMENTA O FILTRO DO BOTÃO
    ;TERMINOU?
    GOTO CHECABTD ;NÃO, CONTINUA ESPERANDO
    ;SIM
    TESTABTD
    ;DIMINUIR O DUTYCICLE ?
        BTFSS   BTDIMINUI   ;BT PRESCIONADO?
        GOTO    MAIN        ;NÃO, TESTA OUTRO BT
        GOTO    DIMINUI     ;SIM, DIMINUI DC
     
    AUMENTA
    ;AUMENTA DUTYCICLE
        INCF    CCPR1L  ;INCREMENTA O CCPR1L AUMENTANDO O
                        ;VALOR EM 4 E AUMENTANDO O DC EM
                        ;0,016
        MOVLW   MAX
        SUBWF   CCPR1L,W    ;MAXIMO VALOR DE DC?
        BTFSS STATUS,C ;TESTA CARRY. RESULTADO NEGATIVO?
    GOTO CONTINUAA ;SIM, ENTÃO CONTA < MAX
    ;NÃO, ENTÃO CONTA >= MAX
        MOVLW MAX
    MOVWF CCPR1L    ;ACERTA CONTADOR NO MÁXIMO, POIS
                            ;PASSOU DO VALOR
    CONTINUAA
    ;TRAVA BT SE CONTINUA APERTADO
        BTFSS   BTAUMENTA   ;BT CONTINUA APERTADO?
        GOTO    MAIN        ;NAO,VOLTA PRO LOOP PRINCIPAL
        GOTO    $-2         ;SIM, TRAVA NO LOOP CONTINUA
     
    DIMINUI
    ;DIMINUI DUTYCICLE
        DECF    CCPR1L  ;DIMINUI O CCPR1L DIMINUINDO O
                        ;VALOR EM 4 E DIMINUINDO O DC EM
                        ;0,016
        MOVLW   MIN
        SUBWF   CCPR1L,W    ;MINIMO VALOR DE DC?
        BTFSC STATUS,C ;TESTA CARRY. RESULTADO NEGATIVO?
    GOTO CONTINUAD ;NAO, ENTÃO CONTA >= MIN
    ;SIM, ENTÃO CONTA < MIN
        MOVLW MIN
    MOVWF CCPR1L    ;ACERTA CONTADOR NO MINIMO, POIS
                            ;PASSOU DO VALOR
    CONTINUAD
    ;TRAVA BT SE CONTINUA APERTADO
        BTFSS   BTDIMINUI   ;BT CONTINUA APERTADO?
        GOTO    MAIN        ;NAO,VOLTA PRO LOOP PRINCIPAL
        GOTO    $-2         ;SIM, TRAVA NO LOOP CONTINUA
    ;*****************************************************
    ;*                FIM DO PROGRAMA                    *
    ;*****************************************************
    END ;FIM

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!