Ir ao conteúdo
  • Cadastre-se

Problema de execução PIC 12F675


Posts recomendados

Olá pessoal, boa tarde. :cool:

Estou desenvolvendo um circuitinho com o PIC12F675 e estou enfrentando um problema que a princípio imagino que seja fácil resolver mas como nunca trabalhei com ele nem com o CSS compiler estou tendo esta dificuldade.

O problema é o seguinte: eu fiz um firmware pra testar o gravador para ter certeza de que está gravando e rodando tudo certinho.. o ICD2 conecta, e grava. tudo uma beleza. mas quando eu coloco o pic na placa ele não roda o programa, ou seja quando aperto o push boton nao acontece o que era pra acontecer.

Segue o software:


#include<12F675.h>


#define chave_teste PIN_A4
#define buzzer PIN_A2



#fuses INTRC_IO //Inernal RC Oscillator
#fuses NOWDT // no watch dog timer
#FUSES NOBROWNOUT //no Reset when brownout detected
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOCPD //No EE protection
#FUSES NOPUT //No Power Up Timer


//#use delay(clock=4000000)

unsigned char aux;



void main (void)
{
//SETUP_ADC_PORTS(NO_ANALOGS);
//SETUP_ADC_PORTS(ADC_OFF);
set_tris_a(0x38);
aux=0;
//ansel=0;
//cmcon=7;
//INTRC (IN) ;

for(;; )
{
aux=chave_teste;
if(aux==1)
OUTPUT_HIGH(buzzer);
}
}

.............................................................

ja tentei habilitar/desabilitar portas analogicas, fuses e tudo mais.. não roda :mad:.

se alguém puder me ajudar, desde já fico muito grato. :D

Link para o comentário
Compartilhar em outros sites

Cara, eu prefiro o MickroC PRO, acho melhor pra trabalhar... mas vem ca, suas definições não estão como comentarios ??

// SETUP_ADC_PORTS(NO_ANALOGS);

// SETUP_ADC_PORTS(ADC_OFF);

set_tris_a(0x38);

aux=0;

// ansel=0;

// cmcon=7;

// INTRC (IN) ;

Nunca usei a serio o CCS, so brincando mesmo pra ver se eu saberia trabalhar com ele, mas em termos da linguagem C, o " // " antecede um comentario, isso não e do CCS, ou é?? como disse, não tenho tanto costume com esse compilador

Link para o comentário
Compartilhar em outros sites

sim... essa parte eu sofri um pouco mas consegui resolver pelo datasheet e pela biblioteca do pic 12f675...

o código ta certo nessa parte:

#define chave_teste PIN_A4

#define buzzer PIN_A2

void main (void)

{

//SETUP_ADC_PORTS(NO_ANALOGS);

//SETUP_ADC_PORTS(ADC_OFF);

set_tris_a(0x38);

aux=0;

//ansel=0;

//cmcon=7;

//INTRC (IN) ;

for(;; )

{

aux=chave_teste;

if(aux==1)

OUTPUT_HIGH(buzzer);

}

}

o que acontece é que eu ja olhei varias duvidas com esse pic no css aqui mesmo no Clube do Hardware e tudo que os programadores habilitavam/desabilitavam, e eu fazia igual ( literalmente copiava), nada deu certo...

estou pensendo que talvez possa ser o ICD2 que eu estou usando que esteja meio zuado.

Link para o comentário
Compartilhar em outros sites

Então, fiz isso aqui com seu codigo agora e testei em protoboard...Toda vez que o botão for pressionado, saida 1 em GPIO.F2, e isso??? se for ficou assim:

#include<12F675.h>

#define chave_teste PIN_A4

#define buzzer PIN_A2

#fuses INTRC_IO //Inernal RC Oscillator

#fuses NOWDT // no watch dog timer

#FUSES NOBROWNOUT //no Reset when brownout detected

#FUSES NOPROTECT //Code not protected from reading

#FUSES NOCPD //No EE protection

#FUSES NOPUT //No Power Up Timer

#use delay(clock=4000000)

unsigned char aux;

void main (void)

{

SETUP_ADC_PORTS(NO_ANALOGS);

SETUP_ADC_PORTS(ADC_OFF);

set_tris_a(0x38);

aux=0;

for(;; )

{

aux=chave_teste;

if(aux==1){

OUTPUT_HIGH(buzzer);

}

}

}

Compila ai e testa se isso que pretende...

Link para o comentário
Compartilhar em outros sites

Poste o circuito montado.

Sua fonte está bem estabilizada?

Como está tocando o buzzer? Direto com o PIC?

Tente no lugar do Buzzer, um LED com resistor.

Falou

A fonte está ok.

O lance do buzzer e da chave é somente simbolico...

O meu circuito é outro. meu intuito com esse programinha ai é de certificar que o icd2 está gravando tudo ok e rodando o programa tudo ok.

Os meus testes são feitos com multímetro... Dps de gravar eu jogo "VIH" no pino o qual foi definido 'chave_teste' e com meu multímetro espero ler "VOH" no pino o qual foi definido 'buzzer'. O problema é que isso não acontece. Quando jogo "VIH" no pino da chave leio somente "VOL".

Então, fiz isso aqui com seu codigo agora e testei em protoboard...Toda vez que o botão for pressionado, saida 1 em GPIO.F2, e isso??? se for ficou assim:

#include<12F675.h>

#define chave_teste PIN_A4

#define buzzer PIN_A2

#fuses INTRC_IO //Inernal RC Oscillator

#fuses NOWDT // no watch dog timer

#FUSES NOBROWNOUT //no Reset when brownout detected

#FUSES NOPROTECT //Code not protected from reading

#FUSES NOCPD //No EE protection

#FUSES NOPUT //No Power Up Timer

#use delay(clock=4000000)

unsigned char aux;

void main (void)

{

SETUP_ADC_PORTS(NO_ANALOGS);

SETUP_ADC_PORTS(ADC_OFF);

set_tris_a(0x38);

aux=0;

for(;; )

{

aux=chave_teste;

if(aux==1){

OUTPUT_HIGH(buzzer);

}

}

}

Compila ai e testa se isso que pretende...

Cara, eu copiei e colei no mplab aqui.. gravei tudo certim. nao ta rodando mesmo. ja testei em 3 pics diferentes... to achando que é o gravador mesmo.

agora a tarde eu tiro uma foto do esquema elétrico e do protoboard pra postar aqui.

Link para o comentário
Compartilhar em outros sites

Beleza, vamos esperar as fotos dos circuitos... mas, não entendi o que seria "VIH" e "VOH", seria tensão de entrada e tensão de saida em nivel alto ??? mais uma coisa,o MCRL em GP3 esta ligado ? se estiver habilitado você deve saber que tem que por Vcc neste pino, certo??

Link para o comentário
Compartilhar em outros sites

Sim, tensão de entrada/saída em nível lógico alto/baixo.

Já com o mclr acredito que esteja habilitado sim...embora eu não tenha usado o #fuse MCLR ... de fato eu tinha me esquecido de colocá-lo para vcc.. mas eu coloquei aqui agora e não deu certo tb... talvez seja alguma configuração do css que eu não tenha feito.. ou do mplab não sei.

Circuitos:

- Esquema:

post-993250-13884963500445_thumb.jpg

- Protoboard:

post-993250-13884963499733_thumb.jpg

Link para o comentário
Compartilhar em outros sites

Boa tarde.

Na família 12f tem-se que ajustar aquele "Valor de Calibração", que pode variar de um chip para outro.

Trata-se de de um valor localizado no final da memória de programa que permite garantir a correta calibração do oscilador interno.

É necessário, portanto, recuperar este valor antes de programar o uC.

Você seleciona o modelo correto de PIC. Então, deve-se começar com uma leitura da memória flash do uC.

Ao finalizar a leitura do micro, você terá o conteúdo da memória. Mesmo que o uC não tenha sido utilizado, todas as posições de memória devem conter o valor 3FFF com exceção do último endereço (0x03FF). Este último endereço de memória contém o valor de calibração do uC.

Anote esse valor, que deverá estar em hexadecimal.

Carregue no seu gravador o arquivo .HEX que deseja programar o chip.

Provavelmente, ao realizar isto, o valor de calibração do uC foi substituído pelo valor hexadecimal por “default” $3FFF. Vá lá, onde deveria estar o valor de calibração, e edite, inserindo o valor que você anotou. No IC-PROG é só dar um duplo clique para isso.

No processo de gravação, o programador agora "verá" o valor de calibração lá com a finalidade de comparar o conteúdo do último endereço com o valor de calibração introduzido manualmente.

Espero que tenha ajudado.

Bons trabalhos.

Link para o comentário
Compartilhar em outros sites

Boa tarde.

Na família 12f tem-se que ajustar aquele "Valor de Calibração", que pode variar de um chip para outro.

Trata-se de de um valor localizado no final da memória de programa que permite garantir a correta calibração do oscilador interno.

É necessário, portanto, recuperar este valor antes de programar o uC.

Você seleciona o modelo correto de PIC. Então, deve-se começar com uma leitura da memória flash do uC.

Ao finalizar a leitura do micro, você terá o conteúdo da memória. Mesmo que o uC não tenha sido utilizado, todas as posições de memória devem conter o valor 3FFF com exceção do último endereço (0x03FF). Este último endereço de memória contém o valor de calibração do uC.

Anote esse valor, que deverá estar em hexadecimal.

Carregue no seu gravador o arquivo .HEX que deseja programar o chip.

Provavelmente, ao realizar isto, o valor de calibração do uC foi substituído pelo valor hexadecimal por “default” $3FFF. Vá lá, onde deveria estar o valor de calibração, e edite, inserindo o valor que você anotou. No IC-PROG é só dar um duplo clique para isso.

No processo de gravação, o programador agora "verá" o valor de calibração lá com a finalidade de comparar o conteúdo do último endereço com o valor de calibração introduzido manualmente.

Espero que tenha ajudado.

Bons trabalhos.

Olá, eu anotei o número nessa posição da memória e dps que gravei li o mesmo numero. O compilador nao substituiu por algum valor default...

Estava achando que era o icd2 que estou utilizando aqui, pois ele não estava gravando o pic 18f tb.. porém conseguimos gravar o 18f aqui e acho que o gravador não é o problema. Já tentei de tudo. Esse uC não roda nenhum programa que eu gravo.

Link para o comentário
Compartilhar em outros sites

  • 6 anos depois...
  • mês depois...
Boa tarde.

Na família 12f tem-se que ajustar aquele "Valor de Calibração", que pode variar de um chip para outro.

Trata-se de de um valor localizado no final da memória de programa que permite garantir a correta calibração do oscilador interno.

É necessário, portanto, recuperar este valor antes de programar o uC.

Você seleciona o modelo correto de PIC. Então, deve-se começar com uma leitura da memória flash do uC.

Ao finalizar a leitura do micro, você terá o conteúdo da memória. Mesmo que o uC não tenha sido utilizado, todas as posições de memória devem conter o valor 3FFF com exceção do último endereço (0x03FF). Este último endereço de memória contém o valor de calibração do uC.

Anote esse valor, que deverá estar em hexadecimal.

Carregue no seu gravador o arquivo .HEX que deseja programar o chip.

Provavelmente, ao realizar isto, o valor de calibração do uC foi substituído pelo valor hexadecimal por “default” $3FFF. Vá lá, onde deveria estar o valor de calibração, e edite, inserindo o valor que você anotou. No IC-PROG é só dar um duplo clique para isso.

No processo de gravação, o programador agora "verá" o valor de calibração lá com a finalidade de comparar o conteúdo do último endereço com o valor de calibração introduzido manualmente.

Espero que tenha ajudado.

Bons trabalhos.

 

nossa... andei tendo problemas com o chip mencionado... algumas leituras de gravação na eprom saíram meio zoadas...

será que pode ser isso? onde calibro isso no mikroC?

 

uso mikroC e pickit 3 para fazer gravação...

Link para o comentário
Compartilhar em outros sites

Em 03/08/2012 às 17:04, advtec disse:

Boa tarde.

Na família 12f tem-se que ajustar aquele "Valor de Calibração", que pode variar de um chip para outro.

Trata-se de de um valor localizado no final da memória de programa que permite garantir a correta calibração do oscilador interno.

É necessário, portanto, recuperar este valor antes de programar o uC.

Você seleciona o modelo correto de PIC. Então, deve-se começar com uma leitura da memória flash do uC.

Ao finalizar a leitura do micro, você terá o conteúdo da memória. Mesmo que o uC não tenha sido utilizado, todas as posições de memória devem conter o valor 3FFF com exceção do último endereço (0x03FF). Este último endereço de memória contém o valor de calibração do uC.

Anote esse valor, que deverá estar em hexadecimal.

Carregue no seu gravador o arquivo .HEX que deseja programar o chip.

Provavelmente, ao realizar isto, o valor de calibração do uC foi substituído pelo valor hexadecimal por “default” $3FFF. Vá lá, onde deveria estar o valor de calibração, e edite, inserindo o valor que você anotou. No IC-PROG é só dar um duplo clique para isso.

No processo de gravação, o programador agora "verá" o valor de calibração lá com a finalidade de comparar o conteúdo do último endereço com o valor de calibração introduzido manualmente.

Espero que tenha ajudado.

Bons trabalhos.

Andei fazendo umas pesquisas... mas pelo que percebi, se este valor estiver incorreto (mas o programa do pic estiver rodando de boa) o que acontecerá será somente diferenças dos tempos do delayms certo? se eu não necessitar de uma precisão correta do tempo então isso não me fará mal... certo?  obrigado.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
39 minutos atrás, BloodCeltics Lopes disse:

o que acontecerá será somente diferenças dos tempos do delayms certo? se eu não necessitar de uma precisão correta do tempo então isso não me fará mal... certo?  obrigado.

Maizomeno. Dependendo do compilador se tiver com 3FFF, vai dar pau. Coloque 0x3480. Veja este artigo... diz que é fácil recalibrar mas parece que tem que ter um frequencímetro.

este não precisa...

abç

 

 

Link para o comentário
Compartilhar em outros sites

Em 04/12/2018 às 09:39, Isadora Ferraz disse:

Maizomeno. Dependendo do compilador se tiver com 3FFF, vai dar pau. Coloque 0x3480. Veja este artigo... diz que é fácil recalibrar mas parece que tem que ter um frequencímetro.

este não precisa...

abç

 

 

Valeu... muito obrigado vou seguir os procedimentos.

 

a título de curiosidade, ontem fui fazer uns testes nos meus pics desta linha com meu pickit 3 (com programa original baixado direto do site de microchip)... quando comecei mexer com este pic, me orientei por um video do youtube que mandava dar o erase no chip antes de gravar... então fiz isso varias vezes... mas ontem quando fui conferir, os pic ainda mantinham o valor de fabrica... então suponho que o pickit 3 não apague este valor (a menos que o usuário assim o queira).

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!