Página 1 de 1
tecla

Enviado:
16 Out 2011 23:43
por likio
Bom dia Pessoal, fiz um programa para ler uma tecla, que ao ser pressionada, fará com que um led fique piscando na PORTB do PIC16F628A, que está com uma configuração em pull up. Mas o programa não tem funcionado da forma que foi programado, automaticamente ele entra na rotina de piscar o led. Será que alguem pode me dizer por que isto está acontecendo. Estou trabalhando com a placa Mclab da Mosaico, junto com seu programador. Segue o trecho do programa que está com problemas:
tempo
movlw D'7'
movwf A_t
movlw D'47'
movwf B_t
movlw D'3'
movwf C_t
nop
decfsz C_t
goto $-2
decfsz B_t
goto $-6
decfsz A_t
goto $-8
return
trata_tecla
movlw D'10'
movwf debouce
decfsz debouce
goto $-1
nop
btfss PORTA,1
goto led_on
return
tecla
btfss PORTA,1
call trata_tecla
goto tecla

Enviado:
17 Out 2011 07:17
por fabim
BHRÍMÃ, ai onte tu testa a tecra, e da um goto antes do return.
Veja que houve um CALL, e tu desviou em um goto led-on.
La dentro do led-on, voce colocou o return ? Ou deixou a pilha ficar sendo sobre escrita ?
Sobre o teste que ta fazendo, tu disse que que o programa ja entra tumaticamente dentro do led on.
Questões.
Tu configurou o pino do bt como entrada ?
Tu confirmou se não existe nenhuma outra função multiplexada com esse pino, e caso exista, tu desligou essa função e deixou o pino só como IO ?
La em baixo no loop, eu costumo fazer isso aqui, pra ter um ciclo sem nada antes de chamadas, ou reentrancias.
label tecla:
btfss PORTA,1; // o pino foi precionado ?
call trata_tecla;//Sim, ele foi a zero.
nop;//não, ainda é um fica em um loop
goto tecla;
tecla

Enviado:
17 Out 2011 18:31
por likio
Boa noite Fabio, acho que não fui muito claro no programa que passei, pois coloquei apenas parte do código. Mas vamos aos fatos, ja fiz esta programação em outras ocasiões e sempre funcionou, exceto nesta ocasião. mesmo que eu substitua os call por goto acontece o mesmo efeito, então o problema de sobrescrever a pilha não é o motivo. já configurei o PORTA, para entrada em todos os pinos, além disso não estou usando nenhuma outra configuração para o PIC em questão. Este programa ja utlizei para um pic16f84A, e apenas copiei para o novo pic, e não funcionou.
Re: tecla

Enviado:
17 Out 2011 20:22
por EvandrPic
likio escreveu:Boa noite Fabio, acho que não fui muito claro no programa que passei, pois coloquei apenas parte do código. Mas vamos aos fatos, ja fiz esta programação em outras ocasiões e sempre funcionou, exceto nesta ocasião. mesmo que eu substitua os call por goto acontece o mesmo efeito, então o problema de sobrescrever a pilha não é o motivo. já configurei o PORTA, para entrada em todos os pinos, além disso não estou usando nenhuma outra configuração para o PIC em questão. Este programa ja utlizei para um pic16f84A, e apenas copiei para o novo pic, e não funcionou.
As vezes fica difícil ajudar se você coloca as informações em doses homeopáticas, mas vamos lá...
Se você diz que apenas copiou para o novo PIC então você não fez as alterações necessárias para essa migração ne?
Se funciona no PIC 16F84A e não funciona no 16F628A, pode ser alguma configuração que você deveria alterar para essa migração e não alterou.
Você colocou o include do 16F628A né?
Em qual pino estão a tecla e o LED?
Porque você não coloca o programa inteiro? Se for só uma tecla e 1 LED, não deve ser grande.
- A memória RAM do 16F84 começa na posição 0Ch, no 16F628 começa em 20h.
- No 16f628 os comparadores vem habilitados, verificar se colocou CMCON 0x07 para entrada digitais.
- O 16F628A dispõe de 4 bancos de memória RAM, o 16F84 apenas 2.
http://www.microcontroladorespic.com/tu ... 6f628.html

Enviado:
17 Out 2011 20:37
por EvandrPic
Convertendo os Programas p/ a placa McLab1
Para que os programas desenvolvidos para o PIC16F84 possam ser utilizados na família PIC16F62x na placa McLab 1 é importante observar os seguintes pontos:
Gravar o microcontrolador com a opção Brown-Out Reset (bor) ligada.
Gravar o microcontrolador com a opção Power-on Reset (por) ligada.
Gravar o microcontrolador com a opção Watchdog Timer (WDT) desligada.
Nunca gravar o microcontrolador com a opção Low Voltage Programer (LVP) ligada, pois o pino de I/O RA5/MCLR será gravado com a opção de MCLR_ON. (tome cuidado com esta opção).
Utilize a seguinte linha de comando para o config.
_CONFIG_BODEN_ON &_CP_OFF &_PWRTE_ON &_WDT_OFF &_LVP_OFF &_MCLRE_ON & _XT _ OSC.
http://www.mosaico.com.br/Midias/Docume ... McLab1.pdf
tecla

Enviado:
19 Out 2011 19:32
por likio
Boa noite pessoal
Segue o programa completo que foi desenvolvido para realizar um pisca pisca com um led utilizando a placa MCLAB1 da Mosaico, após ser pressionada uma tecla. E ao pressionar outra tecla o led desliga.
list p=16f628A
#include <P16f628A.inc>
__CONFIG _BOREN_ON & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC
;
;********************************************************************************************
;* Definição da Memória Ram *
;********************************************************************************************
;
A_t equ H'20'
B_t equ H'21'
C_t equ H'22'
D_t equ H'23'
debouce equ H'24'
; equ 25
; equ 26
; equ 27
; equ 28
; equ 29
; equ 2A
; equ 2B
; equ 2C
; equ 2D
; equ 2E
; equ 2F
; equ 30
;
;********************************************************************************************
;* Início do Programa *
;********************************************************************************************
;
org 0 ; define que o programa irá começar no endereço 0
nop ; função sem operação
nop
nop
nop
nop
;********************************************************************************************
;* Parametrização dos Registradores *
;********************************************************************************************
start
clrf PORTA ; inicializa a porta A
clrf PORTB ; inicializa a porta C
bsf STATUS,RP0 ; seleciona o banco 1
movlw B'11111111' ; w=256
movwf OPTION_REG ; Pull-ups desabilitado, Prescaler 1:256
movlw B'00000000' ; w=0
movwf INTCON ; desabilita todas as interrupções
movlw B'00000000'
movwf TRISB ;
movlw B'11111111'
movwf TRISA
bcf STATUS,RP0
goto teclas
;********************************************************************************************
;* Programa Principal *
;********************************************************************************************
led_on
nop
bsf PORTB,1
nop
goto tempo
led_off
nop
bcf PORTB,1
nop
goto tempo
;********************************************************************************************
;* Rotina de Tempo *
;********************************************************************************************
tempo
movlw D'7'
movwf A_t
movlw D'47'
movwf B_t
movlw D'3'
movwf C_t
nop
decfsz C_t
goto $-2
decfsz B_t
goto $-6
decfsz A_t
goto $-8
return
;********************************************************************************************
;* Leitura das teclas *
;********************************************************************************************
trata_tecla1
movlw D'10'
movwf debouce
decfsz debouce
goto $-1
nop
btfsc PORTA,1
return
goto led_on
trata_tecla2
movlw D'10'
movwf debouce
decfsz debouce
goto $-1
nop
btfss PORTA,2
goto led_off
teclas
btfss PORTA,1
goto trata_tecla1
btfss PORTA,2
goto trata_tecla2
goto teclas
tempo1
movlw D'4'
movwf A_t
movlw D'10'
movwf B_t
movlw D'25'
movwf C_t
decfsz C_t
goto $-1
decfsz B_t
goto $-5
decfsz A_t
goto $-9
return
end

Enviado:
19 Out 2011 23:00
por EvandrPic
likio, você é novo no fórum então aquí vão algumas dicas:
- Coloque o código com a opção código... facilita a leitura, indentação... Isso fará com que mais pessoas se sintam motivadas a ler o teu código e tentar ajudá-lo.
- Procure usar letras maiúsculas nos Labels e nomes de variáveis. Facilita a leitura do código.
- Procure comentar o seu código. Se já é difícil pra você entender o que você queria fazer em determinada linha ou trecho do código, imagina pra quem está lendo o teu código. Tudo bem que esse é um programa simples mas se acostume mesmo no simples.
- Você está pedindo ajuda, então nada mais natural que você seja o mais claro possível quanto ao que você fez e quanto as suas dúvidas.
- Não ignore respostas às suas dúvidas. Eu respondi e você não fez nenhuma referência as dicas que eu te dei. Não disse se tinha feito ou não o que sugeri. Fica parecendo que você não leu ou simplesmente ignorou. Lembre-se que você tem um problema e está pedindo ajuda, então seja atencioso com os que estão te ajudando.
- Usuários que postam dúvidas e somem acabam desestimulando os outros usuários a ajudá-los. Não é o seu caso mas procure frequentar o tópico onde você postou sua dúvida algumas vezes ao dia. Tem usuários que postam uma dúvida e voltam 20 dias depois pra ver o que responderam. Se ele não foi claro na primeira postagem, provavelmente haverá um monte de perguntas sobre a dúvida dele e é sempre bom que as esclareça rapidamente, afinal o problema é dele (a pressa também).
Segue o código de uma forma mais legível.
- Código: Selecionar todos
list p=16f628A
#include <P16f628A.inc>
__CONFIG _BOREN_ON & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC
;
;********************************************************************************************
;* Definição da Memória Ram *
;********************************************************************************************
;
A_t equ H'20'
B_t equ H'21'
C_t equ H'22'
D_t equ H'23'
DEBOUNCE equ H'24'
;
;********************************************************************************************
;* Início do Programa *
;********************************************************************************************
;
org 0 ; define que o programa irá começar no endereço 0
nop ; função sem operação
nop
nop
nop
nop
;********************************************************************************************
;* Parametrização dos Registradores *
;********************************************************************************************
INÍCIO
clrf PORTA ; inicializa a porta A
clrf PORTB ; inicializa a porta C
bsf STATUS,RP0 ; seleciona o banco 1
movlw B'11111111' ; w=256
movwf OPTION_REG ; Pull-ups desabilitado, Prescaler 1:256
movlw B'00000000' ; w=0
movwf INTCON ; desabilita todas as interrupções
movlw B'00000000'
movwf TRISB ;
movlw B'11111111'
movwf TRISA
bcf STATUS,RP0
goto TECLAS
;********************************************************************************************
;* Programa Principal *
;********************************************************************************************
LED_ON
nop
bsf PORTB,1
nop
goto TEMPO
LED_OFF
nop
bcf PORTB,1
nop
goto TEMPO
;********************************************************************************************
;* Rotina de Tempo *
;********************************************************************************************
TEMPO
movlw D'7'
movwf A_t
movlw D'47'
movwf B_t
movlw D'3'
movwf C_t
nop
decfsz C_t
goto $-2
decfsz B_t
goto $-6
decfsz A_t
goto $-8
return
;********************************************************************************************
;* Leitura das teclas *
;********************************************************************************************
TRATA_TECLA 1
movlw D'10'
movwf DEBOUNCE
decfsz DEBOUNCE
goto $-1
nop
btfsc PORTA,1
return
goto LED_ON
TRATA_TECLA 2
movlw D'10'
movwf DEBOUNCE
decfsz DEBOUNCE
goto $-1
nop
btfss PORTA,2
goto LED_OFF
TECLAS
btfss PORTA,1
goto TRATA_TECLA 1
btfss PORTA,2
goto TRATA_TECLA 2
goto TECLAS
TEMPO 1
movlw D'4'
movwf A_t
movlw D'10'
movwf B_t
movlw D'25'
movwf C_t
decfsz C_t
goto $-1
decfsz B_t
goto $-5
decfsz A_t
goto $-9
return
end

Enviado:
20 Out 2011 16:47
por rona123
Likio
O colega Evandropic está coberto de razão.
A coisa começa a complicar quando se vai para processadores mais avançados e se usa compiladores C. Acho fundamental informar as ferramentas e revisões aplicadas. Muitas vezes se compila um codigo e aparecem avisos ou erros em versões diferentes pelas mudanças nas bibliotecas.
Em muitos códigos existem sutilezas, que se forem informadas, ajudam ao próprio programador a lembrar do que ele fez e se for o caso de manutenção de firmware, ajuda os colegas a ganhar tempo na análise e entendimento do código. Acho que as informações incluidas tem que ter curtas e objetivas e a aparencia estimula o trabalho - são detalhes que ajudam ...
A questão respostas e interação entre usuários é meio de fazer com que atividade do fórum seja produtiva e valorosa para todos. Existem muitos colegas que valorizam o forum e contam com respeito e admiração.
Abraço
rona123

Enviado:
20 Out 2011 17:52
por likio
Boa noite pessoal
Desculpe por não ter lhes respondido antes, é que so estou tendo tempo a noite ou durante o dia por volta das 6 horas até umas 6:30 quando é possível, quantas as alterações acabei fazendo. Mas não resultou no problema que estava tendo.
Ainda não consegui resolver o problema.
O programa ainda continua não funcionando indo diretamente para a função de pisca sem ser pressioando o botão.
Re: tecla

Enviado:
21 Out 2011 16:28
por chipselect
EvandrPic escreveu:- No 16f628 os comparadores vem habilitados, verificar se colocou CMCON 0x07 para entrada digitais.
Isso é muito importante e passei por isso no primeiro projeto que fiz com o 628 depois do 16f84 a alguns anos.

Enviado:
21 Out 2011 20:10
por likio
Boa noite, pessoal, vou fazer os testes e amanha coloco os resultados.

Enviado:
22 Out 2011 12:52
por likio
Boa tarde pessoal
Acabei de realizar os testes, e tudo funcionou corretamente. Gostaria de lhes agradecer a respeito da informação do CMCON.