Ir ao conteúdo
  • Cadastre-se
zeantonio2006

PIC12F629 Ativar portas em sequência

Recommended Posts

Boa tarde pessoal, estou utilizando o Mickroc para fazer o PIC12f629 ativar 4 portas em sequencia e ficarem ativas ,mas sem sucesso. Alguém poderia me ajudar? Segue o código abaixo, obrigado:

 

 

 

void init_ports(void) {TRISIO = 0;GPIO = 0;}void main(){int x;init_ports();while(1){if (GPIO.GP3 == 1){ GPIO.GP1 = 1; delay_ms(3000); GPIO.GP2 = 1; delay_ms(2000); GPIO.GP4 = 1; delay_ms(3000); GPIO.GP5 = 1; delay_ms(2000);}} }

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei se o seu compilador já prevê o detalhe do manual.

 

Note: The  ANSEL  (9Fh)  and  CMCON  (19h)
registers  (9Fh)  must  be  initialized  to
configure  an  analog  channel  as  a  digital
input. Pins configured as analog inputs will
read ‘0’. The ANSEL register is defined for
the PIC12F675.

 

Diz que o registro CMCON tem que ser inicializado para configurar um canal analógico como entrada digital.

Tem que fazer os bits 2, 1 e 0 do registro CMCON iguais a '1' lógico. Isso desconecta o comparador interno dos pinos GP0, GP1 e GP2 do chip.

Talvez este detalhe esteja faltando.

 

Em tempo: Como estes CIs possuem pouca memória e me informaram que a função delay_ms() do MikroC coloca um código grande em cada local que for chamada, talvez seja interessante colocar a função delay_ms() dentro de uma rotina  e chamá-la quando for necessário.

Experimente e verifique se apenas uma função delay_ms(1000), dentro de uma rotina, diminui a quantidade de código utilizado.

Para 2 segundos, chame a rotina 2 vezes e para 3 segundos chame a rotina 3 vezes.

Caso fizer isso, nos informe se o tamanho do código realmente diminui.

 

MOR_AL

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo MOR, obrigado por tentar me ajudar. Preciso fazer um projeto bem simples mas como sou iniciante estou apanhando muito. Preciso que seja assim: Ao acionar o PINO GP3 (high) o pino GP1 aguarda 5 segundos e é acionado (high) depois aguarda mais  5 segundos e o PINO GP2 é acionado (high). Porém eles ficam piscando (hora um hora outo), preciso que eles fiquem acessos direto teria como me ajudar mais uma vez? Desde já muito obrigado. O código que estou usando é esse:

 

void main(){CMCON = 7;              //desabilitar os comparadoresTRISIO = 0b000000;     //todos as portas são saidasGPIO = 0;          while(1){if (GPIO.B3 == 1)delay_ms(5000);GPIO.B1 = 1;delay_ms(5000);GPIO.B2 = 1;            }}
 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
zeantonio2006

 

 Estas duas linhas estão conflitantes:

TRISIO = 0b000000;     //todos as portas são saidas

e

if (GPIO.B3 == 1)

  Pois você não pode ler uma saída, tente assim:

void delay(int Tdelay){  int i;  for(i=0;i<Tdelay;i++)  {    delay_ms(1);   }}void main(){CMCON = 7;              //desabilitar os comparadoresTRISIO = 0b000000;     //todos as portas são saidasGPIO = 0;while(1){GPIO.B3=1;delay(5000);GPIO.B2 = 1;delay(5000);GPIO.B1 = 1;         }}

  Este código funcionou aqui, mas não se esqueça que o port GP3 é o do Master Clear/VPP para usa-lo como saída é necessário desabilitar-lo nos fuses, só que ao fazer isso não sera mais possível gravar o PIC, aqui eu teste sem desabilitar-lo e os outros dois leds acenderam normalmente, como programado...  Sugiro que mova o LED do GP3 para outro port...

Também criei uma rotina de delay que gera um delay de 1 milissegundo e repete ele usando um laço for, como nosso amigo MOR sugeriu, compare o tamanho final dos códigos...

 

 

  Espero ter ajudado.

Grato Luiz Gustavo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

obrigado amigo LuizGBarrio por tentar me ajudar. Compilei e testei seu código acima com o proteus, funcionou como eu queria. Porém ao gravar no PIC ele continua da mesma maneira aguarda 5s ativa GPIO.B2 aguarda mais 5s desliga o GPIO.B2 e ativa o GPIO.B1. Fica piscando os LED's. Coloquei uma imagem aqui pra você ver o que estou tentando fazer. E se puder mais uma vez tentar me ajudar ficarei muito grato.

 

w70v.jpg

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

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

×