FAÇA SUA PLACA DE CONTROLE REMOTO PARA PORTÃO AUTOMÁTICO – COM PIC 12F629 (VERSÃO PARA CI HT6P20B)

Muitos ainda tem controles remotos (‘chaveirinhos’) que usam o circuito integrado HT6P20B. Gostaria de usa-los para acionar seu portão por controle remoto?

A ideia básica é simplesmente programar o PIC12F629 com o arquivo hex abaixo e aproveitar a mesma placa usada no projeto ‘PLACA RECEPTORA DE PORTÃO AUTOMÁTICO COM PIC 12F629 / HCS200..301 ROLLER CODE‘. Desta forma, obtemos duas opções para usarmos: transmissores (chaveirinhos) com chip HCS 200 A 301 COM ROLLER CODE ou chip HT6P20B com código fixo.
Também, excetuando o circuito integrado usado, todas as outras funções se aplicam também a esta versão.
A vantagem deste circuito integrado é que ele vem de fábrica programado com uma uma palavra código de 64 bits que pode ser recebida e armazenada na EEprom do microcontrolador. Portanto, voce não precisa se preocupar em ter de programador o HT6P20B. Basta acionar o controle e apertar a tecla ‘Learn’ da placa para realizar o aprendizado deste controle. A desvantagem é que, se alguém quiser, pode construir um equipamento (chupa cabra) para capturar a palavra código e em outra ocasião, usa-la para acionar o equipamento (portão).
Sobre o funcionamento do HT6P20 , veja o datasheet.
Nota importante: Em algumas regiões esta sendo vendido chaveirinhos clones com números sequências idênticos gravados no HT6P20B. Isto poderá ser um problema se um vizinho usar o mesmo sistema e tiver o mesmo número sequencial no chip do controle dele. Pessoalmente já tive problemas com isto. Procure montagens com circuito integrado da família HCS200…301.

Abaixo estão os arquivos postados com o programa do Pic. Use a versão mais atualizada:

Segue o arquivo Asm de 25-06-2012, com opção para 12f629 ou 675 (comentando/descomentando na opção de usuário):
PLACA_HT6P_V2.ASM

Segue o arquivo Hex de 25-06-2012, para Pic12f629:
PLACA_HT6P_V2_629_HEX

Segue o arquivo Hex de 25-06-2012, para Pic12f675:
PLACA_HT6P_V2_675_HEX

Abaixo, pasta com versão atualizada em 22-03-2016, em ASM:
PLACA_HT6P_V3_FILES

Abaixo, pasta zipada com versão atualizada em 12-10-2017 e hex compilado para 12f629:
PLACA_PORTAO_HT6P_V4

Para obter o esquema da placa, clique aqui.

Para obter o desenho da placa de circuito impresso, clique aqui.

Para obter o desenho da placa de circuito impresso com os componentes, clique aqui.

Obs. Caso deseje usar o ci Hcs200…301, veja este link aqui

Até o próximo artigo!!!

Curiosidades:
Cadê os Portões de Gaza?

Outros assuntos:
Aprenda a perdoar
Como lidar com sogros
Problemas financeiros e dividas
Ajuda para depressão
Porque há tantos desastres naturais?

69 comments on “FAÇA SUA PLACA DE CONTROLE REMOTO PARA PORTÃO AUTOMÁTICO – COM PIC 12F629 (VERSÃO PARA CI HT6P20B)

  1. Valeu Claudio…
    Gostaria muito de poder dedicar todo esse tempo aos programas mas minha vida é muito corrida tentando atender meus clientes correndo em centro cirurgico, concertando essa porcariada toda que(graças a Deus)vivem quebrando e tentando sobreviver nesse mundinho cibernetico que dividimos agora. Tenho 52 anos e pretendo parar daqui 3 anos e depois, sim, me dedicar às coisas que realmente gosto que é fazer meus projetos e construi-los e tenha ceteza que seguirei suas ideis e aprenderei assembler pois ja percebi que é o unico modo de conversar realmente com estes pestinhas dos pics, atms, e outros cerebros encapsulados que temos hoje em dia. O basic pra mim é fácil pois aprendi ja faz algum tempinho (coisa de uns 30 anos) e atualmente uso o PICSIMULATORIDE que me ajuda bastante pois alem de programar ele simula muitas das peças que usamos (menos o radinho que preciso agora)e isso facilita um bocado as coisas, alem de fazer um codigo final bem enxuto que cabe com facilidade nos meus preferidos (12f629/675/683).
    Grande abraço e peço a liberdade de poder incomoda-lo quando a coisa apertar por aqui.
    PS se for possivel gostaria que me mostrasse em seu codigo da placa do portao a parte referente somente á leitura do codigo do radio ou seja, como se voce quisesse simplesmente aprender o controle e guardar na memoria e mais nada.
    Mais uma vez muito obrigado por sua gentileza em me atender.

    1. Olá Fernando! Sei o que você quer dizer com ‘correria’. Muitas vezes queria acabar um projeto e levava meses para sobrar umas miseras horas. Parece que nunca acabaria a correria. Mas um dia, a ‘bonanza’ virá após a tempestade.
      Quanto a parte de recepção, ela está amarrada com variavéis, subrotinas e pedaços de código espalhado pelas linhas de código em todo o programa. Veja abaixo, que tentarei marcar com alguns comentarios estas regiões:

      ;**************************************************************************

      LIST P=12f629 , R=DEC ;aqui define o modelo e o ‘radix’ (os números são aceitos em decimal)
      INCLUDE “P12F629.INC” ; aqui pede o arquivo com as instruções relativas ao microcontrolador
      ;————————–
      ERRORLEVEL -302 ;aqui só elimina uma mensagem chata de mudança entre bancos após compilar
      __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _BODEN_ON & _MCLRE_OFF ;aqui é os fusebits (programar para oscilador interno ou esterno, usar watchdog,etc)

      #DEFINE BANK0 BCF STATUS,RP0 ;SETA BANK0 DE MEMORIA ; aqui tem uma facilidade para troca de bancos
      #DEFINE BANK1 BSF STATUS,RP0 ;SETA BANK1
      #DEFINE FLAG FLAGS,0 ;FLAG DE SITUAÇÃO
      #DEFINE FLAG1 FLAGS,1 ;FLAG DE NOVA LEITURA
      #DEFINE FLAGGR FLAGS,2 ;FLAG DE ‘LEARN’ APRENDER
      #DEFINE SIN GPIO,0 ;PINO 7 IN RF
      #DEFINE LRN GPIO,5 ;PINO 2 IN LEARN BOTTON
      #DEFINE LED GPIO,5 ;PINO 2 OUT LED (MESMO PINO DO ACIMA)
      #DEFINE S2 GPIO,4 ;PINO 3- ENTRADA DE S2 ,ACIONA COM NEGATIVO
      #DEFINE M1 GPIO,2 ;PINO 5- SAIDA DO RELE P/MOTOR
      #DEFINE M2 GPIO,1 ;PINO 6- SAIDA DO RELE P/MOTOR
      #DEFINE S1 GPIO,3 ;PINO 4- ENTRADA DE S1 ,ACIONA COM NEGATIVO
      ; aqui temos os registradores da memória ram a serem usados, começando do endereço 20h.
      CBLOCK 0X20
      RES3,RES2,RES1,RES0,AUX,C3,C2,C1,C0,WS,TEMP,BITCOUNTER,FLAGS,TL0,TL1,TL2,Z2,Z1
      LcdDelayCounter,LcdDelayCounter1,tmpLcdRegister,tmpLcdRegister1,SITUAÇÃO
      temp,SDATA,AUX2 ,LC,HC ,CONT,RES3A,RES2A,RES1A,RES0A,X,R0,R1,R2,TMP1,TMP2,TMP3,ADDRESS,TMP
      ENDC
      ;aqui temos variavéis com apelidos que facilitam na hora de alterar valores.
      WRCFG EQU B’00000000′ ; PORTB: EEPROM WRITE TRI-STATE VALUE
      YTRISA EQU B’111001′ ; PORTA: TRI-STATE VALUE GP5 LED/LRN COMO ENTRADA INICIALMENTE
      TMAX EQU .50 ;TEMPO MAXIMO DO SINAL LOW
      TMAX_MOTORLIGADO EQU 0X0A ; TEMPO MAXIMO DO RELE DO MOTOR LIGADO (33 SEG)
      QBYTE EQU .28 ;QUANTIDADE DE BYTES A SER RECEBIDO (22 ADRESS+2 DADO+ 4 ANTICODE)
      TGR EQU .255 ;TEMPO DE BOTÃO APERTADO PARA APAGAR GRAVAÇAO
      ORG H’2100′ ;vetor de eeprom

      ;aqui o inicio da flash
      ORG 0X00
      GOTO START
      ORG 0X04
      RETFIE

      START:
      MOVLW 0X07
      MOVWF CMCON ;DESLIGA COMPARADORES
      CLRF GPIO ; RESET PORT
      BANK1
      MOVLW YTRISA ; SETUP PORTA
      MOVWF TRISIO
      BSF WPU,4 ;LIGA PULLUP S2
      CLRF OPTION_REG
      BANK0
      CLRF FLAGS

      INICIO:
      MOVLW TGR
      MOVWF Z2
      CLRF Z1

      CLRF RES3
      CLRF RES2
      CLRF RES1
      CLRF RES0
      MOVLW QBYTE
      MOVWF BITCOUNTER

      ;aqui começa o loop para a recepção dos sinais de rf vinda do receptor de 433mhz

      L0
      BCF FLAG
      CLRF HC
      CLRF LC
      L1
      ;———————————

      BTFSS LRN
      GOTO TAPAGAMENTO

      L1H
      BTFSC M1
      GOTO L1B
      BTFSC M2
      GOTO L1C
      GOTO SS5

      TAPAGAMENTO
      DECFSZ Z1,F
      GOTO L1H
      DECFSZ Z2,F
      GOTO L1H
      BCF M1
      BCF M2
      ;==========================================================================================
      ; aqui começa a operação de apagamento dos controles quando o botão learn fica apertado por mais de 5 segundos
      CALL APAGAEEPROM
      BANK1
      BCF TRISIO,5 ;VIRA SAIDA
      BANK0
      BSF LED ;APAGA LED (UMA PISCADA)
      MOVLW .10
      CALL DELAYM
      BCF LED ;ACENDE LED
      MOVLW .10
      CALL DELAYM
      BSF LED ;APAGA LED (UMA PISCADA)
      MOVLW .10
      CALL DELAYM
      BCF LED ;ACENDE LED
      MOVLW .10
      CALL DELAYM
      BSF LED ;APAGA LED (UMA PISCADA)
      MOVLW .10
      CALL DELAYM
      BCF LED ;ACENDE LED
      MOVLW .10
      CALL DELAYM
      BANK1
      BSF TRISIO,5 ;VIRA ENTRADA
      BANK0

      BTFSS LRN ;AGUARDA SOLTAR BOTÃO ‘LEARN’
      GOTO $-1
      GOTO INICIO
      ;=============================================================================

      L1B

      BTFSS S1 ;TESTA FIM DE CURSO S1
      GOTO DESLM
      GOTO L1D
      L1C
      BTFSS S2 ;TESTA FIM DE CURSO S2
      GOTO DESLM
      L1D
      DECFSZ TL0,F ; REGISTRADORES DO TEMPO QUE RELES FICAM LIGADOS
      GOTO SS5
      DECFSZ TL1,F
      GOTO SS5
      DECFSZ TL2,F
      GOTO SS5
      BCF M1 ;TEMPO MAXIMO LIGADO ATINGIDO
      BCF M2
      INCF SITUAÇÃO,F ;EVITA UM PULSO A MAIS NO CONTROLE
      SS5:

      ; aqui começa a rotina principal de recepção do receptor de rf
      ;A
      BTFSS FLAG ;TESTA FLAG DE HUM/ZERO RECEBIDO
      GOTO L2 ;FLAG=0
      ;——————————–
      ;B
      BTFSS SIN ;SIN ? TESTA SINAL DE ENTRADA DO RECEPTOR DE RF
      GOTO M0 ; SIN=0
      ;———————————-
      L2
      ;C
      BTFSS SIN ;SIN ?
      GOTO LA1 ;SIN=0
      ;————————————-
      ;E
      BSF FLAG ;SIN=1
      INCF HC,F
      BTFSC STATUS,Z
      DECF HC,F
      GOTO LA2 ;VAI CONTAR TEMPO DE 50 MICRO SEGUNDOS
      ;———————————————————
      LA1
      ;D
      INCF LC,F ;INCREMENTA REGISTRADOR DE LOW SIGNAL NA ENTRADA RF
      BTFSC STATUS,Z
      DECF LC,F
      LA2

      MOVLW .11 ;.12 = 50 MICROSEG (ACERTA TEMPO ENTRE LEITURAS DA ENTRADA DE RF)
      MOVWF CONT
      DECFSZ CONT,F
      GOTO $-1
      GOTO L1

      M0
      ;———————————-
      ;F
      MOVFW LC ;TESTA SE NÃO PASSOU DO LIMITE MAXIMO DE TEMPO EM LOW NA ENTRADA DE RF
      SUBLW TMAX
      BTFSS STATUS,C
      GOTO INICIO ;C=0 (-) – LC>TMAX (REJEITAR DADO – PAUSA INICIAL)
      ;———————————–
      ;G
      MOVFW HC ;OBTEM O VALOR DE ‘CARRY'(HUM OU ZERO)
      SUBWF LC,W

      RRF RES3,F ;DESLOCA O BIT NOS REGISTRADORES DE RESULTADO
      RRF RES2,F
      RRF RES1,F
      RRF RES0,F
      ;————————————-
      ;H
      DECFSZ BITCOUNTER,F ;DECREMENTA O CONTADOR DE BITS A SER RECEBIDO
      GOTO L0 ;LE PROXIMO BIT

      MOVLW .4 ;DESPREZA OS BITS DE ‘ANTICODE’ 1010
      MOVWF BITCOUNTER
      ACERTA
      BCF STATUS,C
      RRF RES3,F
      RRF RES2,F
      RRF RES1,F
      RRF RES0,F ;RESULTADO FICA SOMENTE EM RES2 A RES0,DESPREZA RES3
      DECFSZ BITCOUNTER,F
      GOTO ACERTA

      BTFSC FLAG1 ;TESTA SE É A PRIMEIRA OU A SEGUNDA RECEPÇÃO
      GOTO PULA1
      MOVFW RES2 ;SALVA A PRIMEIRA LEITURA PARA COMPARAÇÃO COM UMA SEGUNDA
      MOVWF RES2A
      MOVFW RES1
      MOVWF RES1A
      MOVFW RES0
      MOVWF RES0A
      BSF FLAG1 ;SETA FLAG DE PRIMEIRA RECEPÇÃO

      GOTO INICIO
      PULA1
      BCF FLAG1 ;SEGUNDA RECEPÇÃO, COMPARA COM A PRIMEIRA
      MOVFW RES2
      XORWF RES2A,W
      BTFSS STATUS,Z
      GOTO RESETAC
      MOVFW RES1
      XORWF RES1A,W
      BTFSS STATUS,Z
      GOTO RESETAC
      MOVFW RES0
      XORWF RES0A,W
      BTFSS STATUS,Z
      GOTO RESETAC ;ERRO DE RECEPÇÁO
      GOTO AÇÃO ;OK – BOA RECEPÇÃO

      RESETAC
      CLRF RES3A ; APAGA RESULTADOS DE COMPARAÇÃO
      CLRF RES2A
      CLRF RES1A
      CLRF RES0A
      GOTO INICIO

      ;fim da rotina principal de recepção
      ;===================================================================
      ;aqui começa a rotina de ação após uma boa recepção que passará a procurar se está cadastrado ou para aprender o novo tx
      AÇÃO
      ;I
      BTFSS LRN ;BOTÃO ESTÁ APERTADO?
      BSF FLAGGR
      CALL PPT
      SUBLW .0
      BTFSC STATUS,Z ; É ‘0’?
      GOTO APRENDER ;NENHUM CONTROLE FOI GRAVADO
      MADDRESS
      MOVFW TMP
      MOVWF ADDRESS
      CALL EEREAD
      XORWF RES2,W ;COMPARA COM RES3
      BTFSS STATUS,Z
      GOTO PROXIMO
      DECF ADDRESS,F
      MOVFW ADDRESS
      CALL EEREAD
      XORWF RES1,W ;COMPARA COM RES3
      BTFSS STATUS,Z
      GOTO PROXIMO
      DECF ADDRESS,F
      MOVFW ADDRESS
      CALL EEREAD
      XORWF RES0,W ;COMPARA COM RES3
      BTFSC STATUS,Z
      GOTO ACIONAR ;ENCONTRADO CONTROLE NA MEMÓRIA

      PROXIMO

      MOVFW ADDRESS
      MOVWF TMP
      MOVLW .3
      SUBWF TMP,F ;ACERTA DE 3 EM 3 A POSIÇÃO DE BUSCA NA MEMÓRIA
      BTFSS STATUS,Z
      GOTO MADDRESS

      ;aqui começa a rotina para aprender um transmissor recebido
      APRENDER
      BTFSS FLAGGR ;TESTA SE BOTÃO ‘LEARN’ ESTÁ PRESSIONADO
      GOTO INICIO ;NÃO ESTÁ.
      CALL PPT ;ESTÁ, PEGA PONTEIRO
      MOVWF ADDRESS ;PEGA O ENDEREÇO APONTADO
      SUBLW 0X7E ;LIMITE MAXIMO DA EEPROM (128-1 /3= 42 aparelhos)
      BTFSS STATUS,C
      CLRF ADDRESS ;INICIA SOBREGRAVAÇÃO
      INCF ADDRESS,F ;SOMA 1
      MOVFW RES0
      MOVWF TMP ;COLOCA EM ‘TMP’
      MOVFW ADDRESS ;DA O POSIÇÃO DE MEMORIA A SER GRAVADO
      CALL EEWRITE ;ROTINA DE ESCRITA NA EEPROM
      INCF ADDRESS,F ;PROXIMA POSIÇÃO DE ESCRITA NA EEPROM
      MOVFW RES1
      MOVWF TMP
      MOVFW ADDRESS
      CALL EEWRITE
      INCF ADDRESS,F
      MOVFW RES2
      MOVWF TMP
      MOVFW ADDRESS
      CALL EEWRITE
      MOVFW ADDRESS
      MOVWF TMP
      MOVLW .0
      CALL EEWRITE ;GRAVA NOVO ENDEREÇO DE PONTEIRO
      BCF FLAGGR
      BTFSS LRN
      GOTO $-1
      MOVLW .10 ;TEMPO DE ATRASO
      CALL DELAYM
      BANK1
      BCF TRISIO,5 ;VIRA SAIDA
      BANK0
      BCF LED ;LIGA LED
      MOVLW .10 ;TEMPO DE ATRASO
      CALL DELAYM
      BANK1
      BSF TRISIO,5 ;VIRA ENTRADA
      BANK0
      GOTO ACIONAR
      ; aqui começa a operação de acionamento dos reles, quando encontra um tx cadastrado
      ACIONAR
      MOVFW SITUAÇÃO ; ACEITA A TRANSMISSÃO IRÁ LIGAR/DESLIGAR RELES DO MOTOR
      ANDLW 0X03 ;LIMITA A 4 BITS A CONTAGEM (0A 3)

      MOVWF SITUAÇÃO
      XORLW 0X00
      BTFSC STATUS,Z ;SE IGUAL A 1
      GOTO LIGAM1

      MOVFW SITUAÇÃO
      XORLW 0X01
      BTFSC STATUS,Z ;SE IGUAL A 1
      GOTO DESLM

      MOVFW SITUAÇÃO
      XORLW 0X02
      BTFSC STATUS,Z ;SE IGUAL A 2
      GOTO LIGAM2
      GOTO DESLM ;SE IGUAL A 3

      T7K
      MOVLW TMAX_MOTORLIGADO
      MOVWF TL2
      MOVLW 0XFF
      MOVWF TL1
      MOVLW 0XFF
      MOVWF TL0
      TG9
      MOVLW .10
      CALL DELAYM
      INCF SITUAÇÃO,F
      GOTO INICIO

      LIGAM1
      BSF M1
      BCF M2
      GOTO T7K
      LIGAM2
      BSF M2
      BCF M1
      GOTO T7K
      DESLM
      BCF M1
      BCF M2
      GOTO TG9

      ; aqui começa rotina de tempo de delay (atrasos)
      ;————————————————————–
      DELAYM
      MOVWF R0
      XC
      CALL AGUARDE
      DECFSZ R0,F
      GOTO XC
      RETURN

      ;****************************************************
      ;PEGA PONTEIRO NA EEPROM – ULTIMO ENDEREÇO
      PPT
      MOVLW .0
      CALL EEREAD ;LE PONTEIRO DA EEPROM
      RETURN

      AGUARDE ;ROTINA DE ATRASO ENTRE OPERAÇÕES DE EEPROM

      MOVLW .64
      MOVWF R1
      CG2
      CLRWDT
      MOVLW .255
      MOVWF R2

      DECFSZ R2,F
      GOTO $-1
      DECFSZ R1,F
      GOTO CG2
      RETURN

      ; aqui rotinas de escrita na eeprom dos dados do tx a aprender
      EEWRITE

      ; ******* EEPROM WRITE ENABLE ******************
      ;endereço esta em ADDRESS
      ;DADOS A ESCREVER ESTA EM TMP(MSB)

      BANK1
      movwf EEADR
      BANK0
      MOVFW TMP ;PEGA PRIMEIRO DADO
      BANK1
      movwf EEDATA
      bcf EECON1, EEIF
      bsf EECON1, WREN ; enable Write\par
      movlw 0x55
      movwf EECON2
      movlw 0xAA
      movwf EECON2
      bsf EECON1, WR
      WRITE_SN_A clrwdt
      btfsc EECON1, WR ; Write complete ?\par
      goto WRITE_SN_A
      bcf EECON1, WREN ; disable Write\par
      BANK0

      clrwdt

      ESPERA1 ;DELAY ENTRE APAGAMENTOS
      CALL AGUARDE
      RETURN

      ;aqui rotina de leitura de dados da eeprom
      EEREAD
      ;endereço esta em ADDRESS
      ;DADOS LIDOS SERÃO ESCRITOS EM TMP0

      clrwdt
      ; MOVFW ADDRESS

      BANK1
      movwf EEADR
      bsf EECON1, RD ; do a read\par
      clrwdt
      btfsc EECON1, RD ; Read done ?\par
      goto $-2
      movf EEDATA,W
      BANK0
      MOVWF TMP ;RECUPERA PRIMEIRO NUMERO DA EEPROM
      clrwdt

      RETURN

      ; aqui rotina para apagamento total de todas as posições da eeprom, apagando todos os controles
      ;——————————————————————————
      APAGAEEPROM ;OK TESTADA E APROVADA
      ; ROTINA PARA APAGAR TODAS AS POSIÇOES DA EEPROM DO 16F628

      MOVLW 0X80 ;TOTAL DE 128 + 1 BYTES DE EEPROM
      MOVWF AUX
      RET6
      CLRWDT
      MOVFW AUX
      MOVLW .1 ;ACERTA ENDEREÇO TIRANDO 1
      SUBWF AUX,W
      BANK1
      movwf EEADR
      MOVLW 0XFF
      movwf EEDATA
      bcf EECON1, EEIF
      bsf EECON1, WREN ; enable Write\par
      movlw 0x55
      movwf EECON2
      movlw 0xAA
      movwf EECON2
      bsf EECON1, WR
      WRITE_SN_C clrwdt
      btfsc EECON1, WR ; Write complete ?\par
      goto WRITE_SN_C
      bcf EECON1, WREN ; disable Write\par
      BANK0
      DECFSZ AUX,F
      GOTO ESPERA
      clrwdt
      RETLW 0H
      ESPERA ;DELAY ENTRE APAGAMENTOS
      MOVLW .8
      MOVWF R1
      CG1
      MOVLW .255
      MOVWF R2

      DECFSZ R2,F
      GOTO $-1
      DECFSZ R1,F
      GOTO CG1
      GOTO RET6

      ; aqui, na hora de gravar no chip, já grava a primeira posção da eeprom com ‘0’.
      ORG H’2100′
      DE .0

      end

      ;===========================================================================================

      Sugiro que você leia o artigo ‘Receptor Generico” que talvez você possa entender melhor as rotinas.

      Claudio

  2. Mais uma vez, obrigado por sua atenção. Dei uma olhada nos doc que vc sugeriu e deu uma clariadinha nas coisas, vou tentar aplicar isso no basic que programo desde 1980 quando comecei meus sofrimentos e minhas alegrias pois é muito bom escrever um codigo e ver quando a coisa funciona. preciso aprender melhor sobre pic mas com a ajuda de pessoas como vc a coisa fica mais fácil. Minha área é eletrônica e com enfase em equipamentos médicos e se puder ajudar é so falar.
    Grande abraço.
    Fernando Ricciardi
    fricciardiuk@yahoo.com.br

    1. Olá Fernando!
      Para iniciante, o basic é muito bom, pois já tem muitas rotinas prontas, bastando ‘chama-las’ . Mas se voce quer realmente entender o PIC, comece a programa-lo usando linguagem ASSEMBLER (o famoso ‘.asm’ da vida). Use o compilador gratuito fornecido pela Microchip chamado MPLAB_IDE , onde você poderá digitar programas com as instruções asm , compilar, rodar no debugador, ver o que
      acontece com cada registrador e se voce tiver um dos programadores alistados, enviar direto para o chip a ser programado. Uma verdadeira ‘mão na roda’ para quem quer realmente aprender PIC. Pegue exemplos simples e compile. Os comandos (instruções) de cada PIC você obtém nos datasheets respectivos. Com o tempo você se lembrará de cada um, mas no inicio tem que olhar a ‘listinha’. Com o tempo, passará a usar interrupções simples de timers, depois de mudança de estado, etc. Dicas:1)Tenha paciência com você mesmo. 2) Não quer funcionar, então voce para, vai fazer outra coisa, que, quando você voltar você, vai encontrar o motivo.3) Nunca desista.Apenas adie até ter mais informações (nem que seja um ano).4) Estude os programas com terminação .asm dos colegas ‘abnegados’ que postaram na internet. Tem aos milhares. Veja como foi conseguido o objetivo e que tipo de instruções foi usada. Note que existe muitos jeitos certos de fazer a mesma coisa, só que um poderá gastar muito código e outro pouco, um ser eficiente e outro não. 5) Ao iniciar um projeto, tente passar para o papel, um esquema com os componentes, incluindo o pic , reles, leds,etc (ou seja, o equipamento que quer fazer). Depois é que você fará o software, levantando em pinos determinado componente está ligado (faça uma listinha, por ex: porta,1 = led1 ; portb,5= saida para o transistor do rele, portb,0= entrada da chave,etc). 6) Após funcionar o projeto, pense onde poderia mexer para aperfeiçoar, eliminar bugs(malditos ‘bugs), reduzir código, mudar método de realizar a mesma função,etc. Lembre-se que um projeto NUNCA fica pronto definitivamente, sempre haverá um próxima versão a ser feita. Basta ter tempo.
      Quanto ao uso do MPLAB-IDE, existe varios tutoriais que lhe darão um bom começo. Veja este video e um exemplo de como compilar com pic 16f877 aqui e um exemplo asm para piscar um led aqui..
      As linguagens de alto nivel com C, basic , etc são boas para migrar programas de uma familia para outra, ou de,por exemplo, um Texas para um Atmel, com poucas mudanças de código. Elas tem o inconveniente de gerar muitas linhas de código (fica muito pesado o programa), sendo difícil trabalhar com pouca memória, como os 1k dos PIC 12f629.
      Mas, você NUNCA entenderá os microcontroladores usando somente estas linguagens. Sempre terá dificuldades em achar soluções que somente as linhas de código em assembler podem dar. Assim, PRIMEIRO aprenda assembler e depois as linguagens de alto nivel.
      Espero ter te ajudado.
      Claudio

  3. Ok, Claudio, te agradeço demais por sua atenção e vou continuar usando o 12f629/675 pois acho que são os melhores que existe dadas as suas limitações e pelo tamanho reduzido da placa final.
    vou tentar fazer alguma coisa para testes e qualquer coisa posto aqui pra trocar umas ideias.
    Precisava que voce, se puder me desse uma aula de como fazer o pic entender o sinal que vem do radio assim poderei quebrar minha cuca com modificações pois nao preciso usar os dois transistores pois posso usar um só rele duplo para fazer o que quero e assim sobrar um pino para as outras funções.
    Grande abraço e mais uma vez muito obrigado por sua atenção
    Fernando Ricciardi

    1. Olá Fernando!
      Voce está no caminho certo. Quanto mais voce entender como funciona, mais facil fica os futuros projetos. Leia mais como o microcontrolador interpreta o sinal vindo do receptor de radio lendo este datasheet aqui. e esta note application (sorry, only english).
      Claudio

  4. Caro claudio, obrigado por ter respondido.
    Estou usando o arquivo que esta nesse link “http://picsource.com.br/archives/1075”.
    É que estou usando um motor DC de 12V para acionar um mecanismo(isso não é o problema, uso os mesmos reles so que ligados de forma diferente). só que gostaria que tivesse um botao manual ligado ao pic do tipo Abre/para/fecha/para, que fizesse como o botao do controle faz mas manualmente. E um pino do pic que quando estivesse com nivel alto paralizasse todo o sistema, como uma chave de segurança e que um lede piscasse avisando este estado de paralização. Ja fiz o botão ativando cada transistor atraves de um fliflop (funciona mas usa mais peça) e usei um 3ºrele para desligar tudo e ligar um led que pisca sozinho. funciona mas gostaria disso tudo no proprio pic.
    Mais uma vez agradeço sua atenção.
    Grande abraço
    Fernando Ricciardi.

    1. Olá Fernando! Entendi! Mas o problema é que, com o pic 12F629, não temos mais pinos sobrando para estas funções adicionais. Teria que migrar para um pic 16F628a, ou memo um pic 16f676 , como exemplo, com mais pinos, para estas funções adicionais.
      Claudio

  5. boa noite Larios, encontrei seu blog e encontrei tambem a solução para um grande problema que tenho. seu projeto usando o pic 12f629/675/683(com pwm)é muito bom e estou usando ele em um projeto que estou desenvolvendo e so me falta é colocar mais duas funções. a primeira um botao de acionamento manual e a segunda um inibidor por tensão que impessa o sistema de operar. ja fiz alguma coisa por hardware mas gostaria de fazer por software mas infelizmente nao manjo nada de assemble. faço alguma coisa com basic no picsimulatoride. se voce puder me ajudar a dar essa incrementada te agradeço muito. fricciardiuk@yahoo.com.br
    Grande abraço
    Fernando

    1. Olá “fricciardiuk”! Fico feliz que os projetos lhe sejam utéis, de alguma forma. Eu não entendi exatamente qual projeto você se refere. Você esta montando uma placa de acionamento para portão automático? Botão de acionamento manual para acionar o portão? E inibidor com que objetivo? Uma chave liga desliga? Quando acionará?
      Por favor, tente descrever o que você está fazendo e quais são as suas necessidades, com mais clareza e mais ‘detalhes’. Talvez possa ajuda-lo.
      Cláudio

Comments are closed.

Back To Top