Ir ao conteúdo
  • Cadastre-se

vitorlr

Membro Júnior
  • Posts

    2
  • Cadastrado em

  • Última visita

Reputação

0
  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
  2. Eu preciso de um programa no pic16f628A de um relógio com ajuste. Então peguei um projeto, mas ele também tem um termômetro e data. Eu tentei tirar os 2 e ficar apenas com o relógio, mas não consegui. Alguém poderia me ajudar? Segue em anexo o projeto .ASM e .HEX. digital_cdtt_16f628_ds1631.zip

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...