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

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

×