Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
ilovepic

PIC Incrementar no PORTB PIC16F690 no mikroC como configurar

Recommended Posts

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

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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);
    }
}

 

Editado por wBB
Editado para correção

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






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

×