FAÇA UM CONTADOR DE VOLTAS PARA ENROLAMENTO DE BOBINAS – COM PIC 16F676 /PIC16F628A

Muitos hobistas preferem enrolar suas bobinas e transformadores, segundo suas necessidades. Gostaria de controlar melhor o número de voltas? Então veja mais…

A prática do enrolamento não é difícil, mas exige paciência e ter alguns truques práticos para ser bem sucedido. Não entraremos exatamente neste mérito, mas sim, na forma de controlar o número de voltas. Para isto faremos uso do seguinte esquema abaixo:

Ou se preferir, podemos usar a versão abaixo com pic 16f628a:

O que vemos aqui , nada mais é que um simples contador de 4 dígitos (0-9999 voltas) usando display de 7 seguimentos, com ânodo comum. O processo de contagem é feito pelo microcontrolador 16F676 (opcionalmente, com 16f628a), de apenas 14 pinos. Como sensor foi usado um reed switch (interruptor acionado por magnetismo), muito comum em aplicações de alarmes. Geralmente são vendidos aos pares com um imã, ficando fácil a sua obtenção e utilização. Nada impede de usar outro tipo de sensor, como por exemplo, foto-sensor ou mesmo um sensor Hall (daqueles que tem dentro dos pequenos motores de ventiladores de PC). Esta escolha ficará por conta do hobista. Em geral, temos um eixo com manivelas em um extremo, e no outro será preso a forma para enrolamento. Na própria manivela, podemos colar o ‘imã’ e o reed switch poderá ficar preso junto ao mancal de apoio do eixo, em uma posição que fique exposto ao campo magnético do imã e seja acionado por ele uma vez a cada volta (vide o esquema acima).

Abaixo, o formato de reeds comerciais e uma opção com foto-transistor. Poderá ser usado os reed pequenos em envólucro de vidro e pequenos imãs retirados de leitores de CD estragados.

USO DO CONTADOR

Após preparar a forma e separar o fio a ser usado, ligue o ‘conta_voltas’, ‘zere’ o mostrador e comece a enrolar. A cada volta na manivela será incrementado o contador, até atingir o número de voltas desejadas. Para nova bobina, repita o processo.

O ARQUIVO ASM

Os displays são multiplexados, sendo apresentados um por vez em um sequência continua, sendo tudo ‘orquestrado’ pela interrupção do timer 0 , a cada 4 milissegundos. O loop principal testa continuamente a entrada do sensor, e quando ocorre uma mudança de estado, irá incrementar o contador CONT0 e CONT1. Em seguida, irá converter o novo valor e colocar nos registradores de apresentação DIG0 A DIG3. A interrupção se encarrega de mostrar estes novos valores. Tudo muito simples!!!
Este contador, obviamente, pode ter outros usos, como por exemplos, controlar uma quantidade de peças que sai de uma linha de produção ( usando sensor de foto-sensível), controle de fluxo de pessoas (uma ‘catraca’ eletrônica) e muitos outros usos.
Obs. Este material foi montado apenas em breadboard, sujeito a bugs ainda não detectados, sendo fornecido o arquivo ASM. Este poderá ser alterado segundo as necessidades do hobista.

Segue o arquivo ASM:

CONTA_VOLTAS_ASM

Segue o arquivo HEX:

CONTA_VOLTAS_HEX

Segue o arquivo ASM para versão com pic 16f628a:

CONTA_VOLTAS_628_ASM

Segue o arquivo HEX para versão com pic 16f628a:

CONTA_VOLTAS_628_HEX

Também, em 15/08/2015 foi postado esta versão com 16f628a, usando câtodo comum. Abaixo segue a pasta com os arquivos desta versão:

CONTA_VOLTAS_628_CATODO_FILES

Também, em 16/03/2014, foi feito esta nova versão do contador de voltas, que conta tanto para frente (incrementa a contagem) como para trás (decrementa a contagem). Isto facilita quando temos que retroceder para arrumar o alinhamento do fio em uma bobina que esteja sendo enrolada na forma. Esta versão não foi realizada com 16f676, porque este tem apenas 14 pinos e se necessita de 16 pinos totais.
Utiliza dois foto-transistores e 2 leds, um disco opaco, tendo uma janela, preso ao eixo. Quando o disco interrompe a passagem de luz, gera os pulsos de contagem. É importante que a janela do disco permita que os dois foto-transistor sejam acionados ao mesmo tempo, uma vez por volta. O funcionamento é bem simples:
Quando giramos para um lado, encontramos primeiro o foto-transistor da entrada ‘trig’ (por ex.). A outra entrada ainda está em nivel ‘1’, pois não foi acionado o foto-transistor da entrada ‘dir’. Ocorrerá um decremento. Virando ao contrário, acionamos o foto-transistor da entrada ‘dir’ e continuando o giro, quando o disco permite iluminar o foto-transistor da entrada ‘trig’, ocorrerá um incremento na contagem, pois ‘dir’=0. Assim, a entrada ‘dir’ determinará se será incremento ou decremento. Pode-se usar outros tipos de sensores como reed_switch , sensor ‘hall’ , contatos mecânicos, etc. Foi inserido um delay de 50 ms para fins de ‘debouncing’ em caso de usar chaves mecânicas como sensores.
Segue o esquema:

Segue a pasta com os arquivos em “C” e “Hex”:

CONTADOR_UP_DOWN

Também, em 15/08/2015 foi alterado o arquivo acima para suportar tanto ânodo comum como cátodo comum. Segue a pasta com os arquivos abaixo:

CONTADOR_UP_DOWN_628_CAT

Ainda em 27/05/2016 foi alterado o arquivo em “C” para retirada de bug relacionado a rotação máxima e incremento pós reset. Segue pasta com os novos arquivos, com opção para displays de 7 seguimentos ânodo ou cátodo comum:

conta_voltas_628_v3_files

Em 17/11/2017 foi alterado o arquivo em “C” para salvar a contagem na EEprom interna do PIC em caso de falha no fornecimento da energia elétrica. Foi necessário alterar o esquema para usar mais um pino do PIC como sensor de tensão da rede. Segue a pasta zipada com esta versão:

conta_voltas_up_down_eep

Manuais:
Datasheet PIC16F676
Datasheet PIC16F628a

Preço de PIC

Curiosidades:
O eterno fascínio pelo ouro
O sistema de navegação das tartarugas
Os eficientes e versáteis escudos da Terra
Vespões constroem com imãs
O universo – cheio de surpresas
Um trem sem rodas
O que revela a visão do invisível
Monóxido de carbono – o assassino silencioso
O que é Artrite?
Bolor – Amigo ou inimigo?

Outros assuntos:
O que preciso saber sobre trocar mensagens de textos?
Quando um dos cônjuges tem necessidades especiais
Como ser um bom pai
Como lidar com dívidas
Como resolver diferenças no casamento
Como tratar o cônjuge com respeito
Como evitar ferir com palavras
Ensine seus filhos bons princípios com atividades de colorir
Como posso ter ânimo para exercitar
Como posso controlar meu peso?
Entrevista com um bioquímico

Até o próximo artigo!!!

66 comments on “FAÇA UM CONTADOR DE VOLTAS PARA ENROLAMENTO DE BOBINAS – COM PIC 16F676 /PIC16F628A

    1. Olá Alberis!
      Eu não entendi o que você quer dizer com ‘passar um nome’! Poderia explicar o que significa?
      Cláudio

        1. Olá Alberto!
          Estamos usando display de 7 seguimentos. Eles não permitem escrita de caracteres alfabético, exceto alguns como E, P, A, d, H, I, O, L, , S,b, C, U. Não tem como escrever R, k, t, V, X, m, n, z, etc.
          Cláudio

          1. Olá Alberis!

            Poderia fazer de um jeito simples. Coloque alguns “defines” com os valores das respectivas letras. Depois, na

            inicialização, faça que seja carregado os registradores de apresentação dos dígitos. Apague todos e depois

            coloque a letra ‘A’ no display ‘a0’ e de um delay de 100 Ms ou um pouco mais. Depois carregue a letra “A” no

            segundo display (a1) e a letra “b” no segundo. De mais um delay igual ao primeiro. Continuem fazendo isto até

            entrar todos os caracteres da frase.
            Veja a porção de código abaixo original:

            void main() {
            setup_comparator(NC_NC_NC_NC);
            setup_timer_0(RTCC_INTERNAL|RTCC_DIV_16);
            setup_timer_1(T1_DISABLED);
            porta=0xff;
            portb=0;
            trisb= 0b00000000; //sentido das portas
            trisa= 0b11110000;
            t0ie=1;//habilita interrupções tmr0
            gie=1; //habilita interrupções geral

            dig0=0; //zera contadores inicialmente
            dig1=0;
            dig2=0;
            dig3=0;
            delay_ms(500);

            Mude para:

            #define _a 0b10001000 //para anodo comum. Inverta os dígitos para catodo
            #define _l 0b11000111
            #define _b 0b10000011
            #define _e 0b10000110
            #define _r 0b11001110
            #define _i 0b11111001
            #define _s 0b10010010

            void main() {
            setup_comparator(NC_NC_NC_NC);
            setup_timer_0(RTCC_INTERNAL|RTCC_DIV_16);
            setup_timer_1(T1_DISABLED);
            porta=0xff;
            portb=0;
            trisb= 0b00000000; //sentido das portas
            trisa= 0b11110000;
            t0ie=1;//habilita interrupções tmr0
            gie=1; //habilita interrupções geral

            dig3=0xff;
            dig2=0xff;
            dig1=0xff;
            dig0=0xff;//apaga tudo
            delay_ms(100);
            dig0=_a;
            delay_ms(100);
            dig1=_a;
            dig0=_l;
            delay_ms(100);
            dig2=_a;
            dig1=_l;
            dig0=_b
            delay_ms(100);
            dig3=_a;
            dig2=_l;
            dig1=_b;
            dig0=_e;
            delay_ms(100);
            dig3=_l;
            dig2=_b;
            dig1=_e;
            dig0=_r;
            delay_ms(100);
            dig3=_b;
            dig2=_e;
            dig1=_r;
            dig0=_i;
            delay_ms(100);
            dig3=_e;
            dig2=_r;
            dig1=_i;
            dig0=_s;
            delay_ms(100);
            dig3=_r;
            dig2=_i;
            dig1=_s;
            dig0=0xff;//apaga
            delay_ms(100);
            dig3=_i;
            dig2=_s;
            dig1=0xff;
            dig0=0xff;//apaga
            delay_ms(100);
            dig3=_s;
            dig2=0xff;
            dig1=0xff;
            dig0=0xff;//apaga
            delay_ms(100);
            dig3=0xff;
            dig2=0xff;
            dig1=0xff;
            dig0=0xff;//apaga
            delay_ms(500);

            dig0=0; //zera contadores inicialmente
            dig1=0;
            dig2=0;
            dig3=0;

            Tente fazer isto e veja se é isto que você quer.

            Cláudio

  1. Bom dia Claudio.

    Fiz a PCB e já montei conforme as fotos e vídeo.
    Eu até tenho alguns displays de 4 dígitos Multiplexados, mas como eles sempre variam muito a pinagem e são difíceis de achar do mesmo modelo, preferi usar Displays comuns de 7 Seg., desses vendidos em qualquer loja de eletrônica.
    No vídeo estou utilizando displays Ânodo Comum e chaves ópticas diversas (uma eu retirei de uma impressora e o outra eu retirei daqueles mouses antigos “de esfera”).
    Em breve eu passo o layout da chave óptica “modelo comercial” pra facilitar pro pessoal.

    Segue Vídeo do teste final:
    https://youtu.be/lDgNcaG_DQs

    Fotos da montagem:
    http://s1121.photobucket.com/user/ricardoams/library/Contador%20Digital%20UP_DOWN%20-%20PIC16F628A

    PCBs, Arquivos Eagle e Raio-X das Duas Versões (Ânodo e Catódo Comum)
    https://drive.google.com/folderview?id=0B5HFSntIQ8OKeWpNYi1qbU1OcFk&usp=sharing

    Forte Abraço

      1. Bom dia. Que bom que a montagem ficou de agrado.
        Tem um pequeno detalhe (Pequeno mesmo) pra ficar perfeito:

        Notei que ao ligar o circuito, se os sensores estiverem tapados, ele faz uma contagem, sendo necessário que apertemos o botão do reset pra zerar.

        pelo que percebi isso acontece depois dos 500ms do delay. (O circuito liga, passa pouco menos de 1 segundo e faz uma contagem caso os sensores estejam tapados).

        Acredito que isso seja de fácil correção.

        Outra dúvida que eu tenho, é em relação ao brilho dos displays, sei que quando é feita a multiplexação, perdemos um pouco o brilho devido a frequência em que eles piscam para não ser perceptível aos olhos.
        Eu usei resistores 180r pra ganhar um pouquinho mais de brilho, mas mesmo assim ainda achei um pouco fraco. Já vi alguns projetos que os displays são ligados diretamente no PIC, poderia danificar o mesmo?

        1. Olá Ricardo!
          Experimente logo após o delay de 500 ms colocar o seguinte antes do loop principal:

          while(!trig) zera();//aguarda primeira mudança

          //LOOP PRINCIPAL
          Quanto a não usar resistores, os pic 16f628a tem saída max. de 25 mA por pino para uso direto no led. Somente que a somatória máxima de corrente passando pelo pino gnd não ultrapasse os 300 mA, e a dissipação térmica não ultrapasse os limites delineados no datasheet. Experimente fazer um teste por sua conta e risco. Verifique se não aquece o chip. Talvez dê certo!
          Cláudio

          1. Perfeito Claudio, Funcionou o cód. show de bola.
            Agora vou fazer os testes sobre o brilho dos displays rs.
            Forte Abraço.

          2. Olá Ricardo!
            Que bom que funcionou. Depois, por favor, retorne os resultados de seus testes com ligação direta.
            Claudio

          3. Boa tarde Claudio.
            Fiz o teste, soldei um Jumper em baixo de cada resistor. Realmente melhorou bastante o brilho, mas reparei que os números que tem menos segmentos EX:1,7 acendem um pouco mais forte do que os que tem mais segmentos ex: 8, 9, etc. Mas ficou muito bom. O Pic não esquenta nem um pouco.
            Já fiz a PCB com os dois sensores modelo comercial.
            Todos os arquivos Anodo e Catodo comum já foram atualizados lá no Link do Google Drive que enviei anteriormente.

            Abaixo fotos e vídeo do novo teste:

            https://drive.google.com/file/d/0B5HFSntIQ8OKd0dJZnhBN25CcDA/view?usp=sharing

            https://drive.google.com/file/d/0B5HFSntIQ8OKc1hNX21OM1UyTnM/view?usp=sharing

            https://drive.google.com/file/d/0B5HFSntIQ8OKVk11QWw0aXRxS00/view?usp=sharing

            https://drive.google.com/file/d/0B5HFSntIQ8OKaDllMldMandDZ0U/view?usp=sharing

            https://youtu.be/Bx5no3y_jBk

          4. Boa noite Claudio.
            To passando pra dar um feedback de um teste que eu fiz.
            Testei na protoboard usando uns displays novos que eu tinha aqui que sobraram de outros projetos e o brilho está perfeito, e olha que usei resistores um pouco maiores (330r). O problema de brilho era com aqueles outros displays mesmo, não tinha haver com os resistores. Segue Foto:

            http://s1121.photobucket.com/user/ricardoams/media/Contador%20Digital%20UP_DOWN%20-%20PIC16F628A/c7fa1cea-3f0b-4b58-b945-0e022a576ab1.jpg.html

          5. Olá Ricardo!
            Obrigado pelo retorno. Parece que os displays variam muito de luminosidade conforme o modelo e fabricante.
            Cláudio

  2. Bom dia Claudio. Ótimo projeto, parabéns. Eu montei aqui na protoboard e gostei muito do funcionamento. Gostaria de Tirar uma dúvida e dar uma sugestão: Eu usei no teste uma chave optica de passagem de luz e usei este esquema http://www.scielo.br/img/revistas/rbef/v30n1/a12fig06.gif Liguei diretamente na porta do pic funcionou perfeitamente, porem se eu aumento a rotação para mais de 8 voltas por segundo (Cerca de 500 rpm) ele começa a perder contagem. será que tenho que mudar algo no circuito ou pode ser algum delay no código que pode ser alterado? Agora minha sugestão, seria em caso de queda de energia, ele gravasse na eprom o último valor registrado.

    Olha este video-teste que eu fiz, nesta velocidade ele conta perfeitamente, em outros testes, cheguei a mandar o motor de passo dar 1000 voltas e contou exatamente as 1000 voltas.

    https://youtu.be/Kv2_x9lAWl0

    1. Olá Ricardo!
      Obrigado pela dica do fotoacoplador. Para mais rpm, tente reduzir o delay de 50 ms para 10 ms. Quanto a salvar na eeprom, creio que talvez seja melhor uma bateria no vcc. Quando acaba energia, o motor ainda dará muitas voltas que não serão registradas. Com a bateria não terá problemas.
      Cláudio

      1. Obrigado por responder. Qual compilador foi utilizado?
        Eu tentei compilar com o MikroC pro, que eu sempre utilizo pra compilar seus projetos, mas neste aqui não deu certo, deu um milhão de erros.
        Forte abraço.

        1. Já descobri, usei o Pic C Compiler e deu certo, mudei os delays para 10 e ficou perfeito, mesmo em alta rotação. Não cheguei a ver qual a velocidade máxima até perder a contagem, Mas a velocidade que eu testei já está de acordo com minhas necessidades. muito show. Essa semana eu já desenvolvo a PCB e compartilho aqui para o pessoal. Forte abraço

Comments are closed.

Back To Top