Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
fcobarcellos

Pic16f628A, iniciante em projetos com LED

Recommended Posts

ola!amigos

to precisando de uma orientação

to fazendo um projeto de pisca led, fazer um led piscar em intervalos utilizando o picF628A.

eu tenho o ASM, mas o que consegui foi pro 16F84, mas eu somente tenho o 16F628A.

como eu poderia ta fazendo pra trocar o ASM configurado pra F84 para o F628A?

abaixo ta o ASM eu tenho:

;#####################   TITULO DO SEU CODIGO FONTE   #######################
;# #
;# Rotina de delay (atraso) de 1s utilizando apenas instrucoes #
;# usado para um circuito de pisca led #
;############################################################################

;-----------------------DIRETIVAS AO COMPILADOR------------------------------

LIST P=16F84A
RADIX DEC
INCLUDE <P16F84A.INC>
__CONFIG _XT_OSC & _CP_OFF & _WDT_OFF & _PWRTE_ON


;-------------------VARIAVEIS E EQUIVALENCIAS---------------------------------


x equ 0ch ;variavel auxiliar no delay
milisegundo equ 0dh ;variavel auxiliar no delay
seg equ 0é ;variavel auxiliar no delay

;--------------------INICIALIZAÇÃO DO PROGRAMA---------------------------------

clrf portb ; Faz todos os bits de portb = zer0
bsf status,rp0 ; vai para o banco 1 da RAM
clrf trisb ; Faz portb todo saida
bcf status,rp0 ; volta ao banco 0 da RAM

;--------------------PROGRAMA PRINCIPAL-----------------------------------------

repete
bsf portb,7 ; Faz bit 7 do portb=1 (apaga o LED)
call s1 ; Chama a subrotina s1 (nosso delay de 1s)
bcf portb,7 ; Faz bit 7 do portb=0 ( acende o Led}
call s1 ; Chama a subrotina s1 (nosso delay de 1s)
goto repete ; Vai para o label repete

;-------------------------------- SUB ROTINAS ---------------------------------

;----- inicio da rotina de 1 segundo

s1
movlw 10
movwf seg ; Até aqui incluindo o call gastaram-se 4 us.

ms100
movlw 100 ; 1 us Carrega milisegundo com 100
movwf milisegundo ; 1 us

ms1
movlw 249 ; carrega x com o valor 249 (decimal)
movwf x ; 2 us ( 1 do movlw e 1 do movwf )
ms2
nop ; + 1 us
decfsz x ; + 1 us (no último é 2 e pula p/ decfsz seg)
goto ms2 ; + 2 us, total 4us.(no último não passa aqui)
; (4 us x 249)-1 totaliza 995 us
decfsz milisegundo ; +1 us (na última pasagem 2 us)
goto ms1 ; +2 us (na última passagem pula)
; total ms1 (1000 x 100)-1 = 99999
decfsz seg ; + 1 us (no último é 2 e pula p/ return)
goto ms100 ; +2 us (na última passagem pula)

; Total antes do return: 4us (inicio) +10 X 100004
; {(1 do movlw100 + 1 do movwf milisegundo + 99999 da
; rotina ms1 + 1 do decfsz seg + 2 do goto)}- 1 da
; última passagem Total = 1000043 us
return ; + 2 us retorna da sub-rotina apos 1.000.045 us
; aproximadamente 1 segundo
;-----fim da rotina de 1 segundo

;----------------------------- fim do programa ----------------------------------
end

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

muito obrigado desde ja

francisco

Editado por Goliathvv
Utilize a tag [code] para destacar o trecho de código e tornar o texto mais legível. Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acredito que basta trocar o include, o 16F627/16F628 são os sucessores do 16F84, portanto não tem muitas diferenças. Mas se eu fosse faria o programa em linguagem C!!! :cool:

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • valeu amigão!

    grato pela dica.

    mas ja vou seguir sua orientação em partir para o C.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    OLÁ MEU AMIGO , NOTE QUE EU MUDEI O CABEÇALHO P/ CONFIGURAÇÃO DE

    DIRETIVAS DO PIC16F84A P/ O PIC16F628 TENTA GRAVAR ESTE PROGRAMA MODIFICADO, ESPERO QUE DE CERTO valeu.

    ;#####################   TITULO DO SEU CODIGO FONTE   #######################
    ;# #
    ;# Rotina de delay (atraso) de 1s utilizando apenas instrucoes #
    ;# usado para um circuito de pisca led #
    ;############################################################################

    ;-----------------------DIRETIVAS AO COMPILADOR------------------------------


    RADIX DEC
    INCLUDE <P16F628.INC>
    __CONFIG _BODEN_ON & _XT_OSC & _CP_OFF & _WDT_OFF & _PWRTE_ON & _PWRTE_ON & _LVP_OFF & _MCLR_ON



    ;-------------------VARIAVEIS E EQUIVALENCIAS---------------------------------


    x equ 0ch ;variavel auxiliar no delay
    milisegundo equ 0dh ;variavel auxiliar no delay
    seg equ 0é ;variavel auxiliar no delay

    ;--------------------INICIALIZAÇÃO DO PROGRAMA---------------------------------

    clrf portb ; Faz todos os bits de portb = zer0
    bsf status,rp0 ; vai para o banco 1 da RAM
    clrf trisb ; Faz portb todo saida
    bcf status,rp0 ; volta ao banco 0 da RAM

    ;--------------------PROGRAMA PRINCIPAL-----------------------------------------

    repete
    bsf portb,7 ; Faz bit 7 do portb=1 (apaga o LED)
    call s1 ; Chama a subrotina s1 (nosso delay de 1s)
    bcf portb,7 ; Faz bit 7 do portb=0 ( acende o Led}
    call s1 ; Chama a subrotina s1 (nosso delay de 1s)
    goto repete ; Vai para o label repete

    ;-------------------------------- SUB ROTINAS ---------------------------------

    ;----- inicio da rotina de 1 segundo

    s1
    movlw 10
    movwf seg ; Até aqui incluindo o call gastaram-se 4 us.

    ms100
    movlw 100 ; 1 us Carrega milisegundo com 100
    movwf milisegundo ; 1 us

    ms1
    movlw 249 ; carrega x com o valor 249 (decimal)
    movwf x ; 2 us ( 1 do movlw e 1 do movwf )
    ms2
    nop ; + 1 us
    decfsz x ; + 1 us (no último é 2 e pula p/ decfsz seg)
    goto ms2 ; + 2 us, total 4us.(no último não passa aqui)
    ; (4 us x 249)-1 totaliza 995 us
    decfsz milisegundo ; +1 us (na última pasagem 2 us)
    goto ms1 ; +2 us (na última passagem pula)
    ; total ms1 (1000 x 100)-1 = 99999
    decfsz seg ; + 1 us (no último é 2 e pula p/ return)
    goto ms100 ; +2 us (na última passagem pula)

    ; Total antes do return: 4us (inicio) +10 X 100004
    ; {(1 do movlw100 + 1 do movwf milisegundo + 99999 da
    ; rotina ms1 + 1 do decfsz seg + 2 do goto)}- 1 da
    ; última passagem Total = 1000043 us
    return ; + 2 us retorna da sub-rotina apos 1.000.045 us
    ; aproximadamente 1 segundo
    ;-----fim da rotina de 1 segundo

    ;----------------------------- fim do programa ----------------------------------
    end

    Editado por Goliathvv
    Utilize a tag [code] para destacar o trecho de código e tornar o texto mais legível. Obrigado.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Caros amigos, estou procurando um curso de eletrônica digital e não estou conseguindo encontrar, o que devo fazer? Onde procurar? Ficarei muito grato pela orientação. MARCELO

    Editado por Goliathvv
    Correções ortográficas. Obrigado.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    velho tenho uma enorme duvida em relação a corrente do PIC16F628A, o seguinte é: estou usando o pic para contar em um display de 0 - 9 em ordem crescente, mas p isso acontecer o pic tem q ativar um relé, me parece que a corrente nao é suficiente. segue a foto do circuito, estou programando o pic com o Mikrobasic, e bem simples....

    fico grato se alguem poder me ajudar

    http://img262.imageshack.us/img262/9036/imagemdwr.jpg

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Cara to com um problema parecido, quero trocar de pic16f84 para 16f628a, alterei o cabeçalho mas ainda não deu certo,ai vai o codigo orig.

    talkingeletronics

    Start ORG 0x00 ;This sets up the ports
    BSF 03,5
    MOVLW 00h
    MOVWF 05h
    MOVWF 06h
    BCF 03,5
    GOTO Run1

    ;Table1 holds the hex values for each column of LEDs

    Table1 ADDWF 02h,1 ;Add W to Program Counter
    RETLW 00h
    RETLW 40h
    RETLW 40h
    RETLW 7Fh
    RETLW 40h
    RETLW 40h
    RETLW 00h
    RETLW 7Fh
    RETLW 49h
    RETLW 49h
    RETLW 41h
    RETLW 41h
    RETLW 00h
    RETLW 3Fh
    RETLW 40h
    RETLW 3Fh
    RETLW 40h
    RETLW 3Fh
    RETLW 00h
    RETLW 3é
    RETLW 41h
    RETLW 41h
    RETLW 41h
    RETLW 3é
    RETLW 00h
    RETLW 70h
    RETLW 0é
    RETLW 01h
    RETLW 0é
    RETLW 70h
    RETLW 00h
    RETLW 7Fh
    RETLW 00h
    RETLW 7Fh
    RETLW 10h
    RETLW 0Ch
    RETLW 02h
    RETLW 7Fh
    RETLW 00h
    RETLW 3é
    RETLW 41h
    RETLW 45h
    RETLW 45h
    RETLW 36h
    RETLW 00h
    RETLW 32h
    RETLW 49h
    RETLW 49h
    RETLW 49h
    RETLW 26h
    RETLW 00h
    RETLW 7Fh
    RETLW 00h
    RETLW 3é
    RETLW 41h
    RETLW 45h
    RETLW 45h
    RETLW 36h
    RETLW 00h
    RETLW 7Fh
    RETLW 10h
    RETLW 0Ch
    RETLW 02h
    RETLW 7Fh
    RETLW 00h
    RETLW 00h
    RETLW 00h
    RETLW 00h
    RETLW 0FFh

    Run1 CLRF 11h ;Clear the Ghost locations ready for starting
    CLRF 12h
    CLRF 13h
    CLRF 14h
    CLRF 15h
    MOVLW 00
    MOVWF 19h ;File 19h is the jump value for table
    Run2 MOVLW 40h
    MOVWF 18h ;File 18h counts the number of scans
    CALL Shift ; and controls the "run speed"
    INCF 19h,1
    MOVF 19h,0 ;Put jump value into W
    CALL Table1
    MOVWF 15h ;W contains table data - put it in 15h
    XORLW 0FFh ;If table value is FF,
    BTFSC 03,2 ; bit 2 of file 3 will be SET (=1)
    GOTO Run1 ;Start Table1 again
    Run3 DECFSZ 18h,1 ;Scan the display 40h times
    GOTO Run4
    GOTO Run2
    Run4 CALL Scan
    GOTO Run3

    Scan BSF 05,1 ;Reset 4017
    NOP
    BCF 05,1

    MOVF 11h,0 ;Output the data at the 5 Ghost
    MOVWF 06h ; locations to the display
    CALL DelD
    MOVF 12h,0
    MOVWF 06h
    CALL DelD
    MOVF 13h,0
    MOVWF 06h
    CALL DelD
    MOVF 14h,0
    MOVWF 06h
    CALL DelD
    MOVF 15h,0
    MOVWF 06h
    CALL DelD
    RETURN
    ;SHIFT moves the data one place to the left to give the "movement"
    ; effect on the screen

    Shift MOVF 12h,0 ;Move file 12h to W
    MOVWF 11h ;Move W to file 11h
    MOVF 13h,0 ;Move file 13h to W
    MOVWF 12h ;Move W to file 12h
    MOVF 14h,0 ;Move file 14h to W
    MOVWF 13h ;Move W to file 13h
    MOVF 15h,0 ;Move file 15h to W
    MOVWF 14h ;Move W to file 14h
    RETURN

    DelD DECFSZ 1Bh,1 ;Delay for viewing the
    GOTO DelD ; column of LEDs
    MOVLW 00h
    MOVWF 06
    Clk BSF 05,0 ;Clock the 4017 to
    NOP ; the next output
    BCF 05,0
    RETURN

    END

    Editado por Goliathvv
    Utilize a tag [code] para destacar o trecho de código e tornar o texto mais legível. Obrigado.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    ao amigo devifanta, cada port do pic pode fornecer no máximo 25mA.

    ao amigo dmmartins na parte start insira as seguintes linhas

    logo após org 0x00

    BANKSEL  PORTA
    CLRF PORTA
    CLRF PORTB
    BANKSEL CMCON
    MOVLW 07H
    MOVWF CMCON

    o mesmo vale para os amigos com problemas semelhantes insira essas linhas acima na rotina de configuração do PIC

    abs.

    Editado por Goliathvv
    Utilize a tag [code] para destacar o trecho de código e tornar o texto mais legível. Obrigado.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Oi pessoal beleza? estou com um problema sou novo em programação de pic, ja aprendi bastante coisa, mas em asm não consigo fazer uma comparaçõa! tipo tento assim:

    BTFSC PORTA,0

    GOTO MAIN

    IF(CONT<=10)

    BSF PORTB,0

    ELSE

    BCF PORTB,0

    ENDIF

    GOTO MAIN

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    grato felipe, resovi o problema

    fiz com que o PIC acionasse a base do transistor, que por sua vez (funcionando como chave) ativatia a bobina do relé

    o coletor do trasnsistor é alimentado por 12Vdc!!

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    oi algum amigo pode me ajudar

    infelizmente nao posso te ajudar, eu literalemente fugir de assembler, preferir outras formas de programacao, C++ ou ate mesmo Ladder

    na parte de C e mais fácil você achar apostilas

    boa sorte

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Por favor, preciso de um controle de pressionamento de tecla. Por exemplo, tenho que pressionar uma tecla 3 vezes durante o tempo de 5 segundos. Se não ocorrer, reseta a contagem.

    Existe a necessidade em ativar um Timer ?

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Por favor, preciso de um controle de pressionamento de tecla. Por exemplo, tenho que pressionar uma tecla 3 vezes durante o tempo de 5 segundos. Se não ocorrer, reseta a contagem.

    Existe a necessidade em ativar um Timer ?

    amigo, poderia informar a linguagem de programacao?

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Cuidado com a diferença entre letra maiúscula/minúscula.

    Testei, para corrigir o pequeno erro desse programinha basta escrever alguns comandos em maiúscula.

    ...

    ;--------------------INICIALIZAÇÃO DO PROGRAMA---------------------------------

    clrf PORTB ; Faz todos os bits de portb = zer0

    bsf STATUS,RP0 ; vai para o banco 1 da RAM

    clrf TRISB ; Faz portb todo saida

    bcf STATUS,RP0 ; volta ao banco 0 da RAM

    ;--------------------PROGRAMA PRINCIPAL-----------------------------------------

    ...

    Abraço a todos e sucesso.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×