Problema na hora de Gravar erro 0000h

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Problema na hora de Gravar erro 0000h

Mensagempor wgc » 02 Out 2007 13:15

Pessoal, to tentando compila esse exemplo do Livro Microcontroladores PIC uma abordagem pratica e objetiva PIC 16f628.

Segundo o exemplo proposto é para acender 4 leds conforme a frequencia do pino b3.


Mas ele da erro em 0000h.



Se eu tirar o CP_ON, compila e grava, mas o uC nao cumpre a funcao que foi programada.


alguma ideia?





;*********************************************************************************************
; PROGRAMA – DEFINE A FAIXA DE FREQUENCIA DO SINAL DE ENTRADA
; (0Hz A 35KHz)
; DESENVOLVIDO POR WAGNER DA SILVA ZANCO
; VERSAO 1.0
; 20/05/2004
;*********************************************************************************************
; ARQUIVOS DE DEFINICOES
;*********************************************************************************************
#INCLUDE <P16F628A.INC> ;ARQUIVO PADRAO MICROCHIP PARA PIC16F628A
;*********************************************************************************************
; BITS DE CONFIGURACAO
;*********************************************************************************************
__CONFIG _BOREN_ON&_PWRTE_ON&_CP_ON&_WDT_ON&_LVP_OFF&_DATA_CP_OFF&_MCLRE_ON&_XT_OSC
;*********************************************************************************************
; PAGINACAO DA MEMORIA
;*********************************************************************************************
;COMANDOS PARA ALTERACAO DE PAGINA DE MEMORIA

BANK0 MACRO ;MACRO PARA SELECIONAR BANCO 0
BCF STATUS,RP0
BCF STATUS,RP1
ENDM ;FIM DA MACRO BANK0

BANK1 MACRO ;MACRO PARA SELECIONAR BANCO 1
BSF STATUS,RP0
BCF STATUS,RP1
ENDM ;FIM DA MACRO BANK1

;*********************************************************************************************
; VARIAVEIS
;*********************************************************************************************
;VARIAVEIS COM ESPELHO EM TODOS OS BANCOS DE MEMORIA.
;RECONHECIDAS EM QUALQUER BANCO.

FLAGS EQU 0x70 ;BITS DE SINALIZACAO
W_TEMP EQU 0x71 ;SALVA REG WORK
STATUS_TEMP EQU 0x72 ;SALVA REG STATUS
NUM_A1 EQU 0x73 ;PARTE ALTA DE A
NUM_A0 EQU 0x74 ;PARTE BAIXA DE A
NUM_B1 EQU 0x75 ;PARTE ALTA DE B
NUM_B0 EQU 0x76 ;PARTE BAIXA DE B

;*********************************************************************************************
; CONSTANTES
;*********************************************************************************************
;CONSTANTES UTILIZADAS PELO SISTEMA.
;BIT DO REGISTRADOR FLAGS

EVENTO_1 EQU .0

;*********************************************************************************************
; FLAGS
;*********************************************************************************************
;REGISTRADOR FLAGS
;
;BIT # |7|6| 5|4| 3|2| 1|0|
; |X|X|X|X|X|X|X|Y| EVENTO_1
; |X|X|X|X|X|X|Y|X| RESERVADO
; |X|X|X|X|X|Y|X|X| RESERVADO
; |X|X|X|X|Y|X|X|X| RESERVADO
; |X|X|X|Y|X|X|X|X| RESERVADO
; |X|X|Y|X|X|X|X|X| RESERVADO
; |X|Y|X|X|X|X|X|X| RESERVADO
; |Y|X|X|X|X|X|X|X| RESERVADO

;X = DEFINIDO EM OUTRO LUGAR DA TABELA
;Y = DEFINIDO COMO MOSTRADO (0/1)

;*********************************************************************************************
; ENTRADAS
;*********************************************************************************************
;PINOS QUE SERAO UTILIZADOS COMO ENTRADA

;PINO RB3/CCP1 - ENTRADA DO SINAL (0Hz ATE 35KHz)

;*********************************************************************************************
; SAIDAS
;*********************************************************************************************
;PINOS UTILIZADOS COMO SAIDA

#DEFINE LED1 PORTA,0 ;0 --> APAGADO
;1 --> ACESO

#DEFINE LED2 PORTA,1 ;0 --> APAGADO
;1 --> ACESO

#DEFINE LED3 PORTA,2 ;0 --> APAGADO
;1 --> ACESO

#DEFINE LED4 PORTA,3 ;0 --> APAGADO
;1 --> ACESO

;*********************************************************************************************
; VETOR DE RESET
;*********************************************************************************************
ORG 0x00 ;ENDEREO INICIAL DE PROCESSAMENTO
GOTO INICIO

;*********************************************************************************************
; INTERRUPCAO
;*********************************************************************************************
;A INTERRUPCAO DO MODULO CCP SERA TRATADA

ORG 0x04 ;ENDERECO INICAL DA INTERRUPCAO

BTFSS PIR1,CCP1IF ;INTERRUPCAO DO MODULO CCP ?
RETFIE ;NAO, RETORNA
;SIM, CONTINUA
BCF PIR1,CCP1IF ;DESATIVA FLAG DE INTERRUPCAO DO MODULO CCP
MOVWF W_TEMP ;SALVA W EM W_TEMP
SWAPF STATUS,W
MOVWF STATUS_TEMP ;SALVA STATUS EM STATUS_TEMP

;*********************************************************************************************
; TRATAMENTO DA INTERRUPCAO DE ESTOURO DE TMR1
;*********************************************************************************************

BTFSS FLAGS,EVENTO_1 ;PRIMEIRA VEZ?
GOTO SALVA_TMR1 ;SIM, SALVA TIMER 1
;NAO, CONTINUA
MOVF CCPR1H,W
MOVWF NUM_A1 ;SALVA CONTEUDO, NUM_A1 RECEBE CCPR1H
MOVF CCPR1L,W
MOVWF NUM_A0 ;SALVA CONTEUDO, NUM_A0 RECEBE CCPR1L
CALL SUB_16 ;CHAMA SUB-ROTINA
CALL ACIONA_LED ;CHAMA SUB-ROTINA
GOTO SAI_INT ;DESVIA

;*********************************************************************************************
;ESTA SUB-ROTINA SALVA O CONTEUDO DO CPR1H:CCPR1L QUANDO OCORRE A PRIMEIRA
;BORDA NO PINO RB3/CCP1.

SALVA_TMR1

BSF FLAGS,EVENTO_1 ;INDICA QUE OCORREU O PRIMEIRO EVENTO NO PINO RB3/CCP1
MOVF CCPR1H,W
MOVWF NUM_B1 ;NUM_B1 RECEBE CONTEUDO DE CCPR1H
MOVF CCPR1L,W
MOVWF NUM_B0 ;NUM_B0 RECEBE CONTEUDO DE CCPR1H
GOTO SAI_INT ;DESVIA

;*********************************************************************************************
; SUB-ROTINA
;*********************************************************************************************
;ESTA SUB-ROTINA SUBTRAI DOIS NUMEROS DE 16 BITS, FORNECENDO, EM NUM_A1:NUM_A0,
;O MODULO DO RESULTADO SE ELE FOR POSITIVO E O COMPLEMENTO DE DOIS SE ELE FOR NEGATIVO.
SUB_16

;*********************************************************************************************
;ESTA SUB-ROTINA SUBTRAI A PARTE BAIXA DO TIMER 1
MOVF NUM_B0,W ;W RECEBE NUM_B0
SUBWF NUM_A0,F ;NUM_A0 = NUM_A0 - NUM_B0
BTFSS STATUS,C ;(NUM_A0 - W) E NEGATIVO?
GOTO RES_NEG_L ;SIM, DESVIA
GOTO RES_NAO_NEG_L ;NAO, DESVIA

;*********************************************************************************************
;ESTA SUB-ROTINA SUBTRAI MA PARTE ALTA DO TIMER 1 QUANDO O RESULTADO DA SUBTACAO DA
;PARTE BAIXA DER NEGATIVO.

RES_NEG_L

DECF NUM_A1,F ;DECREMENTA NUM_A1

;*********************************************************************************************
;ESTA SUB-ROTINA SUBTRAI MA PARTE ALTA DO VALOR CAPTURADO DO TMR1.

RES_NAO_NEG_L

MOVF NUM_B1,W ;W RECEBE NUM_B1
SUBWF NUM_A1,F ;NUM_A1 = NUM_A1 - NUM_B1
MOVF CCPR1H,W
MOVWF NUM_B1 ;SALVA CONTEUDO, NUM_B1 RECEBE CCPR1H
MOVF CCPR1L,W
MOVWF NUM_B0 ;SALVA CONTEUDO, NUM_B0 RECEBE CCPR1L
RETURN

;*********************************************************************************************
;ESTA SUB-ROTINA ACIONA UM DOS LEDs, DE ACORDO COM A FREQUENCIA DO SINAL APLICADO
;NO PINO RB3/CCP1. A FAIXA DE FREQUENCIA E OBTIDA A PARTIR DA DIFERENCA
;CALCULADA ENTRE OS CONTEUDOS DO PAR DE REGs TMR1H:TMR1L, NAS DUAS ULTIMAS BORDAS ;CAPTURADAS.

;LED1 - FREQ MENOR OU IGUAL A 5KHz
;LED2 - FREQ MAIOR QUE 5KHz E MENOR OU IGUAL A 10KHz
;LED3 - FREQ MAIOR QUE 10KHz EMENOR OU IGUAL A 20KHz
;LED4 - FREQ MAIOR QUE 20KHz

;SE NUM_A1 FOR DIFERENTE DE 0 SIGNIFICA QUE O RESULTADO E MAIOR QUE 255,
;OU SEJA, A FREQUENCIA E MENOR QUE 5KHz
ACIONA_LED

MOVF NUM_A1,W ;W RECEBE NUM_A1
BTFSC STATUS,Z ;NUM_A1 E ZERO?
GOTO A1_ZERO ;SIM, DESVIA
;NAO, CONTINUA

;FREQ MENOR QUE 5KHz
A1_NAO_ZERO

CLRF PORTA ;LIMPA PORTA
BSF LED1 ;ACENDE LED1
RETURN ;RETORNA

;NUM_A1 = 0, VERIFICAR FAIXA DE FREQUENCIA
A1_ZERO

MOVF NUM_A0,W ;W RECEBE NUM_A0
SUBLW .199 ;W=199-W
BTFSS STATUS,C ;RESULTADO NEGATIVO?
GOTO NAO_MENOR_200 ;SIM, DESVIA
;NAO, CONTINUA

MOVF NUM_A0,W ;W RECEBE NUM_A0
SUBLW .99 ;W=99-W
BTFSS STATUS,C ;RESULTADO NEGATIVO?
GOTO NAO_MENOR_100 ;SIM, DESVIA
;NAO, CONTINUA

MOVF NUM_A0,W ;W RECEBE NUM_A0
SUBLW .49 ;W=49-W
BTFSS STATUS,C ;RESULTADO NEGATIVO?
GOTO NAO_MENOR_50 ;SIM, DESVIA
GOTO MENOR_50 ;NAO,DESVIA


;FREQ MENOR OU IGUAL A 5KHz
NAO_MENOR_200

CLRF PORTA ;LIMPA PORTA
BSF LED1 ;ACENDE LED1
RETURN ;RETORNA

;FREQ MAIOR QUE 5KHz E MENOR OU IGUAL A 10KHz
NAO_MENOR_100

CLRF PORTA ;LIMPA PORTA
BSF LED2 ;ACENDE LED2
RETURN ;RETORNA

;FREQ MAIOR QUE 10KHz EMENOR OU IGUAL A 20KHz
NAO_MENOR_50

CLRF PORTA ;LIMPA PORTA
BSF LED3 ;ACENDE LED3
RETURN ;RETORNA


;FREQ MAIOR QUE 20KHz
MENOR_50

CLRF PORTA ;LIMPA PORTA
BSF LED4 ;ACENDE LED4
RETURN ;RETORNA

;*********************************************************************************************
;ESTA SUB-ROTINA RESGATA OS CONTEUDOS DE W E STATUS E RETORNA AO PROGRAMA.
SAI_INT

SWAPF STATUS_TEMP,W
MOVWF STATUS ;RECUPERA STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W ;RECUPERA W
RETFIE ;RETORNA DA INTERRUPCAO

;*********************************************************************************************
; INICIO
;*********************************************************************************************
INICIO

BANK1 ;ALTERA PARA BANCO1
MOVLW B'00000000'
MOVWF TRISA ;DEFINE PORTA COMO SAIDA
MOVLW B'00000000'
MOVWF TRISB ;DEFINE O PORTB COMO SAIDA

MOVLW B'10001110'
MOVWF OPTION_REG ;PULL_UPS DESABILIADOS <7>
;APLICA PRESCALER AO WDT <3>
;PRESCALER 1:64 NO WDT <2:0>
;DEMAIS BITS IRRELEVANTES
MOVLW B'00000000' ;CHAVE GERAL DE INTERRUPCAO DESLIGADA <7>
MOVWF INTCON ;INTERRUPCAO DE PERFERICOS DESATIVADAS <6>
;DEMAIS BITS IRRELEVANTES
BANK0 ;ALTERA PARA BANCO 0
MOVLW B'00000111' ;CONFIGURA RA3:RA0 COM I/O <2:0>
MOVWF CMCON

;*********************************************************************************************
; INICIALIZACAO DAS VARIAVEIS
;*********************************************************************************************

CLRF PORTA ;LIMPA PORTA
CLRF FLAGS ;LIMPA FLAGS
CLRF TMR1H ;INICIALIZA TMR1H:TMR1L COM 0
CLRF TMR1L

;*********************************************************************************************
; AGUARDA WDT ESTOURAR
;*********************************************************************************************
WDT_MAIN
BTFSC STATUS,NOT_TO ;ESTOURO DO WDT?
GOTO $-1 ;NAO, AGUARDA WDT ESTOURAR
;SIM, CONTINUA
BANK1 ;ALTERA PARA BANCO 1
MOVLW B'10001000'
MOVWF OPTION_REG ;DESABILITA PULL-UPs<7>
;DIRECIONA PRESCALER PARA O WDT<3>
;PRESCALER 1:1 NO WDT <2:0>
;DEMAIS IRRELEVANTES
BANK0 ;ALTERA PARA BANCO 0
MOVLW B'00000110' ;CAPTURA BORDA DE SUBIDA, PRESCALER 1:4 <3:0>
MOVWF CCP1CON
MOVLW B'00100001' ;PRESCALER 1:4 <5:4>
MOVWF T1CON ;TMR1 INCREMENTADO PELO CICLO DE INSTRUCAO <1>
;HABILITA TMR1 <0>
;DEMAIS IRRELEVANTES
BANK1 ;ALTERA PARA BANCO 1
MOVLW B'11000000' ;CHAVE GERAL DE INTERRUPCAO LIGADA <7>
MOVWF INTCON ;INTERRUPCAO DE PERFERICOS ATIVADA <6>
MOVLW B'00000100' ;INTERRUPCAO DDO MODULO CCP SERA TRATADA <2>
MOVWF PIE1
BSF TRISB,3 ;CONFIGURA PINO RB3/CCP1 COMO ENTRADA <3>
BANK0 ;ALTERA PARA BANCO 0

;*********************************************************************************************
; ROTINA PRINCIPAL
;*********************************************************************************************
MAIN
CLRWDT ;APAGA WDT
GOTO $-1 ;VOLTA UMA LINHA

;*********************************************************************************************
END ;FIM DO PROGRAMA
;*********************************************************************************************
wgc
Bit
 
Mensagens: 12
Registrado em: 18 Jul 2007 10:22

Mensagempor kyonak » 02 Out 2007 14:27

amigo, me parece que você está começando
se for isso mesmo, aconselho você usar uma linguagem de maior nível como a C
procure o CCS para poder compilar em C que se torna uma linguagem muito mais amigável.
kyonak
Bit
 
Mensagens: 9
Registrado em: 03 Dez 2006 20:53

Mensagempor LeandroPIC » 02 Out 2007 18:57

Em vez de colocar CP_ON coloque CP_OFF

CP -> Significa CODE PROTECT ai vai dar erro na leitura, vc tem que desligar esse FUSE.

Há mais uma coisa vc está na Linguagens de programação certa!!!!

Só mude quando vc conhecer melhor o pic seus registradores, timer,....

Para PIC16F não precisa de linguagem de alto nivel são só 35 intruções!!!!
Avatar do usuário
LeandroPIC
Byte
 
Mensagens: 163
Registrado em: 06 Jul 2007 12:19

Mensagempor wgc » 02 Out 2007 22:11

O Exemplo proposto no livro diz que o Port B3 deve ter a funcao de input do sinal que queremos medir a frequencia, mas


Esta faltando um -----#Define Evento_1 PortB,3--- no codigo abaixo Nao estA?


;*********************************************************************************************
; ENTRADAS
;*********************************************************************************************
;PINOS QUE SERAO UTILIZADOS COMO ENTRADA

;PINO RB3/CCP1 - ENTRADA DO SINAL (0Hz ATE 35KHz)

;*********************************************************************************************
; SAIDAS
;*********************************************************************************************
;PINOS UTILIZADOS COMO SAIDA

#DEFINE LED1 PORTA,0 ;0 --> APAGADO
;1 --> ACESO
wgc
Bit
 
Mensagens: 12
Registrado em: 18 Jul 2007 10:22

Mensagempor fabim » 03 Out 2007 09:22

kyonak escreveu:amigo, me parece que você está começando
se for isso mesmo, aconselho você usar uma linguagem de maior nível como a C
procure o CCS para poder compilar em C que se torna uma linguagem muito mais amigável.


pra lógica e outras coisas simples não precisa mesmo. Faço tudo em assembly... Mais na hora que entra float e calculo usando polinomios e constantes etc etc.. aí pascal é uma mão na roda... Foise a época do sofrimento..rsrs

abraços fabim
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor ze » 03 Out 2007 15:42

faço minhas as palavras de kyonak. "asm=linguagem de masoquista" vi isto em algum lugar - achei legal. Mesmo p piscar um led, use o C!!
Entenda as funções dos pinos, timers, periféricos, etc apenas. Se quiser, um mínimissíssimo de asm. E parta para o C.

Por favor, não precisa responder. Já conhecemos os argumentos dos "masoquistas". Além do mais, seria como discutir religião...

(nem precisamos lembrar que são apenas opniões pessoais)
:wink:
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor kyonak » 03 Out 2007 16:04

asm serve para se fazer aplicações críticas de tempo ou entao quando se deseja encaixar programas MUITO GRANDES em pics pequenos onde é mais fácil otimizar para se consumir um menor espaço na memória
fora isso
use C ou Basic e seja feliz
kyonak
Bit
 
Mensagens: 9
Registrado em: 03 Dez 2006 20:53

Mensagempor mastk » 03 Out 2007 17:00

Eu acredito que seu PIC já era, ou seu gravador está com algum problema...

Asm é muito na minha opnião, coisas como fazer jogos em tv em C eu considero impossivel, pelo simples fato de vc não ter controle absoluto do linker, exemplificando o que o kyonak disse.

Qual seu gravador e qual seu PIC wgc
Avatar do usuário
mastk
Dword
 
Mensagens: 4407
Registrado em: 14 Out 2006 20:43

Mensagempor wgc » 03 Out 2007 21:36

Pow pera ai, eu acredito mais em erro no codigo fonte do que no gravador ou no pic.

O tenho 3 pics e com os 3 o mesmo problema acontece.

Tenho outros programas para pic, maiores contento o mesmo tipo de instrucao e mais um pouco o pic grava e realiza as instrucoes.

Nao lembro o nome do gravador, mas é algum baseado no JDM.
wgc
Bit
 
Mensagens: 12
Registrado em: 18 Jul 2007 10:22

Mensagempor wgc » 03 Out 2007 22:04

Imagem

O pic é o 16f628A. Acabei de testar com um pic novo e da o mesmo erro. So verifica se remover o _CP_ON


Volto com a pergunta, nao deveria ter uma instrucao definindo o Portb,3???

;*********************************************************************************************
; ENTRADAS
;*********************************************************************************************
;PINOS QUE SERAO UTILIZADOS COMO ENTRADA

;PINO RB3/CCP1 - ENTRADA DO SINAL (0Hz ATE 35KHz)

;*********************************************************************************************
; SAIDAS
;*********************************************************************************************
;PINOS UTILIZADOS COMO SAIDA

#DEFINE LED1 PORTA,0 ;0 --> APAGADO[/img]
wgc
Bit
 
Mensagens: 12
Registrado em: 18 Jul 2007 10:22

Mensagempor wgc » 03 Out 2007 22:59

PElo exemplo do Livro o PORTB,3 é a entrada de sinal.

MAs na parte em negrito nao deveria ser dessa forma B´00001000 ?

Afinal pelo que esta escrito no livro para abilitar como entrada tem q ter bit 1.



MOVLW B'00000000'
MOVWF TRISB ;DEFINE O PORTB COMO SAIDA


MOVLW B'10001110'
MOVWF OPTION_REG ;PULL_UPS DESABILIADOS <7>
;APLICA PRESCALER AO WDT <3>
;PRESCALER 1:64 NO WDT <2:0>
;DEMAIS BITS IRRELEVANTES
MOVLW B'00000000' ;CHAVE GERAL DE INTERRUPCAO DESLIGADA <7>
MOVWF INTCON ;INTERRUPCAO DE PERFERICOS DESATIVADAS <6>
;DEMAIS BITS IRRELEVANTES
BANK0 ;ALTERA PARA BANCO 0
MOVLW B'00000111' ;CONFIGURA RA3:RA0 COM I/O <2:0>
MOVWF CMCON
wgc
Bit
 
Mensagens: 12
Registrado em: 18 Jul 2007 10:22

Mensagempor mastk » 04 Out 2007 10:25

Mas até ai que hex maldito é esse que zoa o algoritmo de gravação?

Colocou 12,5V no reset, o soft da mcu, não vai fazer diferença...
Avatar do usuário
mastk
Dword
 
Mensagens: 4407
Registrado em: 14 Out 2006 20:43


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x