Ir ao conteúdo

Posts recomendados

Postado

Olá a todos,

Estou a seguir esta playlist:

E pretendo fazer com que o PORTB do pic16f690 altere entre 1 e 15 valores, para assim acender os leds. Como ele faz no vídeo.

Acontece que não consegui colocar o PORTB a fazer isso. Por isso comecei a testar algumas soluções à medida que fui pesquisando na net. Para já tenho este trecho de código:

void main() {
     ANSEL = 0;
     ANSELH = 0;
     TRISB = 0b00000000;
     PORTB = 0;
     TRISC = 0b00000000;
     PORTC = 0b00000000;
     
     while(1){
       // Pinos do PortB
       //PORTB++; // PORTB = PORTB + 1; - Quanto todos tiverem em 1 volta a ser 0;
       PORTB.RB7 = 1;
       delay_ms(1000);
       PORTB.RB7 = 0;
       /*
       RB4_bit = 1;
       delay_ms(2000);
       RB4_bit = 0;
       */

       // Pinos do PortC
       RC0_bit = 1;
       delay_ms(1000);
       RC0_bit = 0;
       delay_ms(1000);
       PORTC++;
       delay_ms(5000);
     }
}

Estive a ler no datasheet sobre o ANSEL e ANSELH mas não percebi bem. Segundo alguns posts que encontrei na net, em inglês, devo configurar o ANSEL e ANSELH porque estou a lidar com um port onde tenho saída ou entradas analógicas. Para que consiga trabalhar com esses pinos em modo digital tenho que configurar estas duas configurações. Resumindo, estou à deriva nesta parte da matéria. Todas as luzes serão bem vindas. Por onde aconselham recomeçar?

Obrigado

 

  • 2 semanas depois...
Postado

Acho que não está funcionando, pois provavelmente você está usando a parte baixa da variável do PORTB e pelo que verifiquei no manual desse PIC (na página 67), os primeiros quatro bits do PORTB (os bits menos significativos) não estão implementados. Então se você atribuir o valor de, por exemplo 10 decimal ao PORTB, você estará setando 0b00001010. Isso significa que não vai acontecer nada mesmo, pois esses bits não tem função. Já para usar a parte alta do PORTB (bits mais significativos), você precisaria setar o valor 0b10100000 ou 0b10101111 para conseguir o mesmo "10 decimal" (tanto faz, pois os quatro primeiros bits não fazem nada como já disse).

Também não vi outros registradores relevantes para o que você precisa, que estejam relacionados com o PORTB (página 73);

 

Imagino que isso seja o que você precisa:

void main() {

    TRISB = 0x00; // ou 0b00000000
    PORTB = 0x00; // ou 0b00000000

    unsigned char MeuContador = 1;

    while (1) {
        // Mantém a contagem entre 1 e 15
        if (MeuContador >= 15) {
            MeuContador = 1;
        }

        // Seta os valores na parte alta de PORTB
        PORTB = MeuContador << 4;        

        MeuContador++;
        Delay_ms(1000);
    }
}

 

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!