FAÇA UM RECEPTOR DE 4 CANAIS POR CONTROLE REMOTO INFRAVERMELHO – C/ PIC 12F675 – PROTOCOLO NEC (REF103)

Gostaria de controlar equipamentos a distâncias pequenas, usando um controle remoto infravermelho, destes de TV? Com capacidade de acionar até 4 aparelhos diferentes? então, veja este artigo…

Existem muitos circuitos interessantes na Internet, usando controles remotos. Um deles, oferece o recurso de controlar até 3 canais com um pic pequeno. Pensei também em montar algo desta natureza, mas usando uma maior capacidade que um pequeno pic 12f675 pode oferecer: 4 canais!

Veja o esquema abaixo:

Muitos hoje tem em suas salas, controles remotos para satélite, de protocolo geralmente ‘NEC’. Poderá usa-lo para controlar cargas no ambiente, como ventiladores, abajures, luminarias ou qualquer outro equipamento que deseje controlar.
Foi feito de maneira que possamos aprender até 4 teclas do controle remoto, de preferência, teclas não usadas, para que não ocorra o acionamento de mais de um equipamento.
Também, é igualmente possível escolher por programação, se o rele do canal escolhido atuará de forma ‘pulso’ ou ‘retenção’.

Vamos ver, então, como se procede a programação:

1) Aperte o botão ‘Prog’ por 2 segundos. Começará a piscar o led ‘Prog’ de forma normal. O led do canal 1 se acende.
2) Aperte uma tecla do controle, da sua escolha, que deseje gravar na Eeprom, para comandar o canal 1. Ao ser aceito, apagará o led do canal 1 e acenderá o led do canal 2.
3) Aperte um outra tecla do controle, para comandar o canal 2.
Ao ser aceito, apagará o led do canal 2 e acenderá o led do canal 3.
4) Novamente, aperte uma outra tecla do controle, para comandar o canal 3. Ao ser aceito, apagará o led do canal 3 e acenderá o led do canal 4.
5) E finalmente, aperte uma última tecla do controle, para comandar o canal 4. Ao ser aceito, apagará o led do canal 4 e o led ‘Prog’ começará a piscar de forma mais rápida. Isto indica que entrou na programação do ‘modo de operação’.

Siga os seguintes passos para escolher entre atuação por ‘Pulso’ ou ‘Retenção’:
1) Aperte uma das teclas do controle que foi gravada. A cada aperto, o led do canal correspondente acenderá ou apagará. Deixando aceso será modo ‘pulso’ e deixando apagado será modo ‘retenção’ para este canal.
2) Repita com as outras 3 teclas que foram gravadas.
3) Feito a gravação, aperte momentaneamente o botão ‘Prog’ para sair do modo de programação.
Caso programe uma tecla que não desejava, aperte qualquer tecla varias vezes, até começar a piscar rápido o led ‘Prog’.
Então, aperte brevemente o botão ‘Prog’ para sair de programação. Refaça os passos com as teclas corretas.
Atenção: Aprenda teclas diferentes. Se for aprendido 2 ou mais teclas iguais, somente a primeira que for aprendida é que funcionará.

Usando o receptor de 4 canais:
Ao apertar no controle remoto uma tecla previamente gravada, ela acionará uma das saídas, em modo pulso ou retenção, dependendo de como foi programado. Os reles devem ter condições de suportar as cargas de correntes em seus contatos. Poderá controlar 4 cargas diferentes, como ventiladores, abajures, luminárias em geral, bem como outros aparelhos eletrodomésticos.
Nada impede de controlar cargas DC também, visto que os contatos dos reles, nos canais, são isolados entre si.
Use controle remoto com protocolo ‘NEC’ apenas. Outros protocolos não irão funcionar.

Para a recepção do protocolo ‘NEC’ foi usado o timer 1 para medir os tempos e determinar se o bit recebido é 1 ou 0. Este protocolo tem como característica um cabeçalho de 9 milisegundos, seguido por um período de 4,5 milisegundos de pausa, antes do envio do primeiro bit. Temos 8 bits de endereços , seguidos de 8 bits de endereço invertidos, mais 8 bits de comandos e 8 bit de comandos invertidos. É a distancia entre pulsos que determina um ‘0’ ou ‘1’. Se a tecla for mantida apertada, será enviada a primeira transmissão completa, seguida de transmissões com apenas o cabeçalho e um bit ‘1’, repetindo a cada 110 milisegundos.
Já o timer 0, foi usado em modo de interrupção, para testar o botão ‘Prog’ a cada 65 mseg, acionar o led ‘Prog’ em piscadas, normais e rápidas, e atuar contadores de tempo.
A rotina foi mantida bem simples, com muitas repetições, mas facilmente compreensíveis. Apesar disto, ainda sobram muitas linhas de flash.
Com respeito alimentação de tensão para o circuito, providencie uma fonte com transformador de 12 volts, bem como diodos retificadores, capacitores de filtro e regulador 7805 para os 5 volts do PIC.

Obs. Este dispositivo é apenas didático, sendo montado apenas em protoboard e sendo sujeito a bugs não identificados. O hex gerado poderá ser usado para gravar também no Pic 12f629.

Segue o arquivo ASM (atualizado em 12/08/13):

rx_4c_infra_nec_v1_asm

Segue o arquivo HEX:

rx_4c_infra_nec_v1_hex

Veja também, esta versão que utiliza triacs na saída, mas com o mesmo Hex -> Esquema com triacs

Agora está também disponível em arquivo “C” para os que não são muito fãs do Assembly. Segue pasta zipada com os arquivos em “C”:

INFRA_NEC_4C_C

Segue o desenho da placa de circuito impresso, uma gentileza realizada pelo colaborador ‘FOXCONN’, a quem agradecemos:

CONTROLE 675 IR NEC disponivel

Segue abaixo, o esquema para acionamento de 2 motores de 12 volts (note que a tensão poderá ser alterada visto que estamos usando reles), com o objetivo didático de acionar uma persiana de janela. Após a carga do Hex no chip, deverá ser gravado 4 teclas de um controle remoto (padrão NEC), todas em modo ‘pulso’. Usa-se reed switch ou microchaves para fins de curso (proteção), os quais, ao acionar, cortam a polarização do transistor que aciona o respectivo rele:

CR_PERSIANA_ELET

Manuais:

Pic 12f675
Protocolo NEC

Curiosidades:
Petróleo — métodos de extração
Controle remoto e o gás de efeito estufa
Cirurgia robótica
Imitação das asas da gaivota
O passado e o presente dos brinquedos
Tortura à venda
“Ouro vermelho” do Mediterrâneo
Assista videos educativos

Outros assuntos:
Como criar filhos bondosos num mundo egoísta?
Como acabar com a tática do silêncio
Os milagres são possíveis – 3 objeções
Como enfrentar o bullying sem ter de partir para a briga (animação)
Como criar filhos responsáveis
Como administrar o seu dinheiro
Ensine valores morais a seus filhos
Ensine seus filhos bons principios com atividades de colorir
Como posso ter ânimo para exercitar
Como posso controlar meu peso?
Entrevista com um bioquímico
Adolescentes- O que fazer se estou sofrendo bullying?
Como evitar ferir com palavras?
Como tratar seu cônjuge com respeito?

Até o próximo artigo!!!

83 comments on “FAÇA UM RECEPTOR DE 4 CANAIS POR CONTROLE REMOTO INFRAVERMELHO – C/ PIC 12F675 – PROTOCOLO NEC (REF103)

  1. Boa tarde, gostaria de agradecer pelos projetos interessantes aqui disponibilizados e gostaria de deixar um comentário a respeito da placa de circuíto impresso postada pelo amigo foxconn: eu gostei do projeto e resolvi construir a pci, mas ao testar a “coisa” não funcionou como esperado, conferi as ligações e não havia nada de errado, então confrontei o desenho da pci com o desenho esquemático do projeto e pude perceber alguns erros;
    1: No desenho esquemático do projeto eletronico a entrada de sinal vinda do receptor ir é gp3 (pino 4 do pic), porém, no desenho da pci postada pelo foxconn a entrada de sinal vinda do receptor ir está em gp4 (pino 3 do pic), está invertido, utilizando como está na pci o programa não funciona, então basta corrigir pelo esquema do circíto e pronto.
    2: outra observação foi quanto aos resistores de 470R, um ligado no catodo do Led Prog e o outro aterrando um lado da chave Prog, ambos estão em um posicionamento diferente na placa de circuíto impresso, mas também observei que esta troca não ocasionou erros ao programar as teclas.

    Fazendo as alterações do 1 a placa funciona e é possivel efetuar a programação das saídas e faze-las atuar como programado.

  2. Olá Larios eu fiz uma modificação no teu código para simplesmente visualizar o comando no display e sem uso da eeprom,porém ele funcionou perfeitamente ,porém quando tento tratar cada botão apertado eu não consigo visualizar no display.EX aperto bt 1 acende led 1,bt 2 acende led 2 e por aí vai.Pode dar uma olhada no código e me ajudar.Obrigado

    LIST P=16f628A , R=DEC
    INCLUDE “P16F628A.INC”

    ;PALAVRA DE CONFIGURAÇÃO
    ERRORLEVEL -302
    __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC & _BODEN_ON & _MCLRE_OFF

    ;DEFINIÇÕES
    #DEFINE BANK0 BCF STATUS,RP0 ;SETA BANK0 DE MEMORIA
    #DEFINE BANK1 BSF STATUS,RP0 ;SETA BANK1

    #DEFINE FLAG FLAGS,0 ;FLAG DE SITUAÇÃO
    #DEFINE FLAG1 FLAGS,1 ;FLAG DE NOVA LEITURA
    #DEFINE FLAG_MR0 FLAGS,2 ;FLAG DE TRAVA
    #DEFINE FLAGGR FLAGS,3 ;FLAG DE ‘LEARN’ APRENDER
    #DEFINE FLAG_MR1 FLAGS,4 ;FLAG TRAVA
    #DEFINE FLAG_T FLAGS,5 ;FLAG T

    #DEFINE FLAG_PROG_ON FLAGS,6 ;FLAG DE MODO DE PROGRAMAÇÃO
    #DEFINE FLAG_3H FLAGS,7 ;FLAG PISCADA EM 3HZ OU 1HZ

    #DEFINE SIN PORTA,0
    #DEFINE LED0 PORTB,0
    #DEFINE LED1 PORTB,1
    #DEFINE LED2 PORTB,2

    ;DEFINIÇÕES DE PORTAS DE SAIDA

    ;RAM
    CBLOCK 0X20
    RES3,RES2,RES1,RES0,AUX,AUX1,AUX2,TEMP,QB,FLAGS,LcdDelayCounter,LcdDelayCounter1
    ADDRESS,TMP,R0,R1,R2,CONT_INT,CONT_INT1,T1_INT,STATUSTEMP,WTEMP,PASSO,ADDR_SALVO,d1,d2,d3,TECLA0,TECLA1,TECLA2,

    ENDC

    ;EQUATES

    TMAX EQU .50 ;TEMPO MAXIMO DO SINAL LOW
    QBYTE EQU .32 ;QUANTIDADE DE BYTES A SER RECEBIDO (8+8+8+8)
    T_PROG EQU .30 ;TEMPO DE BOTÃO APERTADO PARA ENTRAR EM MODO DE PROGRAMAÇÃO
    T_DELAY EQU .11 ;TEMPO DE DELAY .10
    T_DELAY1 EQU .2 ;TEMPO DE DELAY .10
    ;=========================================================================================================
    ; RESET
    ;=========================================================================================================
    ORG 0X00
    GOTO START
    ;=========================================================================================================
    ; INTERRUPÇÃO
    ;=========================================================================================================

    ORG 0X04
    GOTO START

    ;=========================================================================================================
    ; INICIO DO PROGRAMA
    ;=========================================================================================================

    START:

    BANK1

    MOVLW 0x01
    MOVWF TRISA
    MOVLW 0X00
    MOVWF TRISB

    MOVLW 0X00
    MOVWF INTCON
    BANK0

    MOVLW 0X07
    MOVWF CMCON ;DESLIGA COMPARADORES
    CLRF PORTA
    CLRF PORTB

    CLRF TMR0 ;ZERA TMR0
    CLRF PASSO ;GERENCIADOR DE PASSOS
    CLRF FLAGS ;APAGA REGISTRADOR DE FLAGS

    ;=========================================================================================================
    ; ROTINA PRINCIPAL
    ;=========================================================================================================
    INICIO:

    CLRF RES3
    CLRF RES2
    CLRF RES1
    CLRF RES0
    MOVLW QBYTE ;32 BITS PREPARA PARA A RECEPÇÃO COM NUMERO DE BITS A RECEBER
    MOVWF QB
    CLRF TMR1H
    CLRF TMR1L
    BCF PIR1,TMR1IF
    BSF T1CON,TMR1ON
    CLRF PORTB
    GOTO SS5

    ;=========================================================================================================
    ; ROTINA DE RECEPÇÃO DE SINAIS DO PROTOCOLO ‘NEC’
    ; OBS. RECEPTOR INFRAVERMELHO FORNECE SINAL INVERTIDO
    ;=========================================================================================================
    RECEIVE
    SS5:
    BTFSS SIN ; ‘S’ SIN ? TESTA SINAL DE ENTRADA DO RECEPTOR DE INFRAVERMELHO
    GOTO IN_1
    ;=========================================================================================================
    ;SIN=0
    BCF FLAG_MR1
    BTFSC FLAG_MR0
    GOTO SS5
    BSF FLAG_MR0
    BCF T1CON,TMR1ON ;DESLIGA TMR1
    BTFSC PIR1,TMR1IF ;TESTA FLAG DO TIMER 1
    GOTO RESETA_REC
    MOVFW TMR1H
    SUBLW 0X1F
    BTFSC STATUS,C
    GOTO CLR_TMR1
    ;——————————XXX
    SAI_TAD
    GOTO RESETA_REC ;RESETA RECEPÇÃO SE PULSO EM ‘1’ MAIOR QUE 8MS
    ;========================================================================================================
    ;ENTRADA SIN=1
    IN_1

    BCF FLAG_MR0
    BTFSC FLAG_MR1
    GOTO SS5
    BSF FLAG_MR1
    BCF T1CON,TMR1ON ;DESLIGA TMR1
    BTFSC PIR1,TMR1IF ;TESTA FLAG DO TIMER 1
    GOTO CLR_TMR1
    MOVFW TMR1H
    SUBLW 0X0F ;TESTA INTERVALO DE 4,5MS
    BTFSS STATUS,C
    GOTO CLR_TMR1 ;FOI INTERVALO DE 4,5MS

    ;=====================================================================TESTE
    MOVFW TMR1H
    SUBLW 0X05 ;TESTA POR INTERVALO DE 2,25 MS
    BTFSS STATUS,C
    CLRF CONT_INT1
    ;=====================================================================TESTE

    MOVFW TMR1H
    SUBLW 0X03 ;TESTA POR BIT ‘1’
    BTFSC STATUS,C
    GOTO SEGKW1
    BSF STATUS,C
    GOTO RODA_BYTE
    SEGKW1
    MOVFW TMR1H
    SUBLW 0X00 ;TESTA POR BIT ‘0’
    BTFSC STATUS,C
    GOTO CLR_TMR1
    BCF STATUS,C
    GOTO RODA_BYTE

    RESETA_REC
    MOVLW QBYTE ;SETUP INICIAL PARA NOVA RECEPÇÃO
    MOVWF QB
    CLRF RES3
    CLRF RES2
    CLRF RES1
    CLRF RES0

    CLR_TMR1

    ;CLRF CONT_INT1 ;ZERA CONTADOR DE TEMPO EM MODO PULSO

    CLRF TMR1L ;LIMPA TMR1
    CLRF TMR1H
    BCF PIR1,TMR1IF ;APAGA FLAG TMR1
    BSF T1CON,TMR1ON ;RELIGA TIMER1
    GOTO SS5 ;VOLTA AO LOOP

    RODA_BYTE
    RRF RES3,F ;DESLOCA BIT RECEBIDO
    RRF RES2,F
    RRF RES1,F
    RRF RES0,F
    DECFSZ QB,F ;VERIFICA SE JÁ RECEBEU TODOS OS BITS
    GOTO CLR_TMR1 ;AINDA NÃO

    ;=====================================================================
    ; RECEBEU CORRETAMENTE UM NÚMERO DE CONTROLE REMOTO ‘NEC’
    ;=====================================================================

    CLRF CONT_INT1 ;ZERA TEMPO MODO PULSO

    MOVF RES2, W
    GOTO TC0

    TC0
    MOVLW 0XA4
    MOVWF TECLA0
    MOVF RES2,W
    XORWF TECLA0,W
    BTFSS STATUS,Z
    GOTO TC1
    BSF LED0
    CALL TEMPO
    BCF LED0
    GOTO INICIO

    TC1

    MOVLW 0x68
    MOVWF TECLA1
    MOVF RES2,W
    XORWF TECLA1,W
    BTFSS STATUS,Z
    GOTO TC2
    BSF LED1
    CALL TEMPO
    BCF LED1
    GOTO INICIO
    TC2
    MOVLW 0X98
    MOVWF TECLA2
    MOVF RES2,W
    XORWF TECLA2,W
    BTFSS STATUS,Z
    GOTO INICIO
    BSF LED2
    CALL TEMPO
    BCF LED2
    GOTO INICIO

    TEMPO
    movlw 0x0D
    movwf d1
    movlw 0x46
    movwf d2
    movlw 0x04
    movwf d3
    Delay_0
    decfsz d1, f
    goto $+2
    decfsz d2, f
    goto $+2
    decfsz d3, f
    goto Delay_0
    RETURN
    END

    1. Olá Genilsonsa!
      Analisando a porção de código que você passou, notei que a temporização está sendo feita pelo método normal do ’empaca’, ou seja, você trava o programa por um tempo e depois libera para prosseguir a execução do resto do programa. Se você fizer isto, não vai visualizar nada, porque o programa está ’empacado’ no delay e não tem como enviar nada para o LCD. Você terá que fazer este tempo de uma forma que não trave o programa. Poderá usar um ou mais registradores em cascata, com carga inicial de tempo no momento que liga o led correspondente a saída, e dentro do loop principal, faze-los decrementar até chegar a zero, quando então desligaria o led que foi acionado. Outra possibilidade, é usar uma interrupção de um timer livre para depois de determinado número de interrupções, desligar o led que foi acionado.

      Por ex. no primeiro caso:

      Você fez assim:
      TC1

      MOVLW 0×68
      MOVWF TECLA1
      MOVF RES2,W
      XORWF TECLA1,W
      BTFSS STATUS,Z
      GOTO TC2
      BSF LED1
      CALL TEMPO
      BCF LED1
      GOTO INICIO
      TC2
      MOVLW 0X98
      MOVWF TECLA2
      MOVF RES2,W
      XORWF TECLA2,W
      BTFSS STATUS,Z
      GOTO INICIO
      BSF LED2
      CALL TEMPO
      BCF LED2
      GOTO INICIO

      Mas, ao invés de chamar a rotina de ‘call tempo’ fazer assim:

      TC1

      MOVLW 0×68
      MOVWF TECLA1
      MOVF RES2,W
      XORWF TECLA1,W
      BTFSS STATUS,Z
      GOTO TC2
      BSF LED1
      CALL carga_tempo_led1
      GOTO INICIO
      TC2
      MOVLW 0X98
      MOVWF TECLA2
      MOVF RES2,W
      XORWF TECLA2,W
      BTFSS STATUS,Z
      GOTO INICIO
      BSF LED2
      CALL carga_tempo_led2
      GOTO INICIO

      Carga_tempo_led1
      Movlw 0x60
      Movwf reg_tempo_led1a
      Movlw 0xff
      Movwf reg_tempo_led1b
      return

      Carga_tempo_led2
      Movlw 0x60
      Movwf reg_tempo_led2a
      Movlw 0xff
      Movwf reg_tempo_led2b
      return

      E no ínicio colocar os decrementos destes registradores ‘dinâmicos’ de tempo:

      INICIO:
      Decfsz reg_tempo_led1b
      Goto segue1
      Decfsz reg_tempo_led1a
      Goto segue 1
      Bcf led1
      Segue1
      Decfsz reg_tempo_led2b
      Goto segue2
      Decfsz reg_tempo_led2a
      Goto segue 2
      Bcf led2
      Segue2
      CLRF RES3
      CLRF RES2
      CLRF RES1
      CLRF RES0
      MOVLW QBYTE ;32 BITS PREPARA PARA A RECEPÇÃO COM NUMERO DE BITS A RECEBER
      MOVWF QB
      CLRF TMR1H
      CLRF TMR1L
      BCF PIR1,TMR1IF
      BSF T1CON,TMR1ON
      CLRF PORTB
      ………………………….segue o programa normal

      Fazendo desta forma, não travará o programa.

      Se o tempo for pequeno demais, poderá usar quantos registradores for necessário para o tempo desejado. Em geral, 2 são suficientes. Quanto a calcular o valor a ser carregado, poderá usar o mplab ( na função ‘stopwatch’ do debug) contando quanto foi o tempo por loop, ou fazer por tentativa e erro.

      Cláudio

    2. Ola Larios eu fiz adaptação do seu código para o pic 16f628a só que sem o uso da eeprom.Demorei.porém,achei o porque que não estava visualizando o valor das teclas.Controle que estava tentando decodificar é um chinês que vende acompanhado com arduino e no manual que arrumei ele vem com código HEX de cada tecla,porém os códigos vieram todos errados então por isso não estava conseguindo visualizar no display de 7 seg duplo quando fazia a comparação da tecla escolhidas e sem osciloscopio fica ainda mais dificil,porém me virei aqui e achei todos codigos das teclas.Muito Obrigado

  3. Muito obrigado por me responder ESTOU USANDO A VERSÃO ASM.Entendi a tua explicação do protocolo NEC muito clara e objetiva.No caso do teu código os endereço ficam armazenados no registradores RES0,RES1,RES2,RES3..

      1. Olá Genilsonsa!
        A recepção é conforme a porção do código abaixo:
        RODA_BYTE
        RRF RES3,F ;DESLOCA BIT RECEBIDO
        RRF RES2,F
        RRF RES1,F
        RRF RES0,F
        DECFSZ QB,F ;VERIFICA SE JÁ RECEBEU TODOS OS BITS
        GOTO CLR_TMR1 ;AINDA NÃO

        Notou que os bits recebidos são deslocados para direita até o pleno número recebido?
        No final do processo RES0 terá o Address, RES1 o Address invertido, RES2 terá o Command, e RES3 terá o Command invertido.
        Então sua conclusão está correta!
        Cláudio

    1. Larios muito obrigado pela tua resposta fico muito agradecido pelo teus esclarecimentos.Participo do teu blog já um tempo e gostaria de saber como eu posso lhe ajudar.Pois eu vejo aqui que vc ajuda muitas pessoas

  4. Minha dúvida maior é o protocolo NEC que estou tentando entender e não consigo o que me deixa muito triste.Gostaria apenas de reconhecer a tecla e fazer uma função para cada uma delas sem precisar de guardar na EEPROM.Me ajudar aí amigo.

  5. Ola Lários excelente projeto,porém gostaria de saber se vc pode me ajudar.Gostaria de alterar esse projeto tenho um controle padrão NEC que contém 20 teclas eu queria na verdade é decodifica-la sem precisa-la guardar na EEPROM,ou seja aperto tecla 1 executa uma função,Tecla 2 outra função e por aí vai,porém eu não consigo entender em que parte do teu programa que vem com a tecla já decodificada.Pode me ajudar adapta-lo?

    1. Olá Genilsonsa!
      Você esta usando a versão ASM ou C? Quanto ao protocolo NEC, pesquise na internet sob o tema ‘NEC Infrared Transmission Protocol’ que tem um farto material explicativo. Basicamente, uma transmissão se inicia com um cabeçalho de 9 ms transmitindo seguido por uma pausa de 4,5 ms. Em seguida começa a transmitir 4 bytes de informação, sendo um byte normal e o próximo invertido.
      Após a primeira transmissão mantendo a tecla apertada no controle remoto, não mais ocorrerá a transmissão total do cabeçalho mais os 4 bytes, mas apenas uma transmissão reduzida para indicar tecla apertada e uma pausa de 110 ms . Este é chamado de ‘repeat code’. O primeiro byte recebido é do ‘address’ ou seja, qual aparelho irá operar (tv, satélite, etc), o segundo é o ‘address’ invertido em seus bits para conferência , o terceiro é o ‘command’ ou seja , o comando ou tecla apertada (ligar, números de 0 a 9, canal, etc), e o quarto e último byte é o ‘command’ invertido para conferencia da transmissão, se o sinal não foi corrompido. Em uma aplicação simples, poderá apenas comparar o byte 3 com uma tabela que chamará a rotina desejada ao ser apertado tal tecla. Terá que pesquisar quais são estes comandos e montar esta tabela com eles. Creio que esta seja uma breve explicação e espero que tenha sido de ajuda.
      Claudio

Comments are closed.

Back To Top