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