Ir ao conteúdo
  • Cadastre-se

PIC12F629 Ativar portas em sequência


zeantonio2006

Posts recomendados

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);}} }
Link para o comentário
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

Link para o comentário
Compartilhar em outros sites

  • mês depois...

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;            }}
 
Link para o comentário
Compartilhar em outros sites

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.

Link para o comentário
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

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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