Ir ao conteúdo
  • Cadastre-se
cavalodf

PIC - Iniciando pelo basico atraves do BASIC

Recommended Posts

A meses venho tentando fazer um programinha inicial para PIC atraves de ASM, porém pra quem muito pouco entende, mesmo lendo e relendo varios assuntos e apostilas puxadas na rede, tava faltando alguna coisa...

Decidir então tentar pelo BAS e percebi que na rede tem muito pouco assunto

relacionado, porém mesmo assim baixando o prog. mikrobasic e através de 01 arquivo "led blik..bas" entendi muita coisa a ponto de fazer um programa bem mais complexo para controle de contactoras...simulei testei multsim, e tudo vai indo muito bem. claro ainda é um pontinho no fim do tunel.

porém como o mikrobasic exporta o codigo em ASM fui aprendendo a entender tambem como funciona o ASM (Dar para entender quase tudo no sentido de, pra que serve aqueles comandos MOVLW etc e tal...como funcionam...

Aqui dar pra perceber que realmente estou apenas tentando começar

porém dar pra perceber pra quem ja sabe, e pra quem ja sabe Fica fácil ver que o outro nao sabe nada, porém pra quem ja sabe muito tentar ensinar quem nao sabe nada é difícil e tedioso.

Bom é aqui que estou propondo iniciarmos realmente um aprendizado completo em BASIC para PIC, por nós mesmos que não sabemos nada (mas vamos aprender)

Porque BASIC, simples é realmente mais fácil entender e através dele os outros. Bem como tambem podemos usar codigos em ASM inseridos no arquivo BAS. o que vai nos permitir familiarizar com ambos.

Ja comprei o programa mikrobasic (O demo só permite usar 8% da memoria) e inclusive a PCI-5 para teste. logo iniciarei alguns teste praticos. e tudo isto em apenas uma semana no BASIC.

porém é muito difícil achar apostilas e programas exemplos

Quem encontrar dados relacionados ao BASIC para PIC peço colocar a URL bem como exemplos praticos.

E antecipadamente fica nossos agradescimentos aos que ja estão bem acima, uma forcinha de vez em quando.

Link do Mickobasic demo:

http://www.mikroe.com/en/compilers/mikrobasic/pic/download.htm

Abaixo o codigo que usei inicialmente para ir entendendo...

program led

main:

TRISB.0=0

TRISB.1=0

TRISB.2=1

TRISB.3=0

led1 VAR PORTB.0

led2 VAR PORTB.1

loop:

Low led2

High led1

Pause 500

Low led1

High led2

Pause 500

GoTo loop

-Interresante que ele nao funcionou...:eek:

-então partir para o exemplo existente no mikrobasic

do led também, ai sim você começa a entender sozinho...^_^

logo colocarei o codigo ao qual iniciei com apenas um comando e fui acrescentando dificuldades e ...funcionou...

Compartilhar este post


Link para o post
Compartilhar em outros sites
em asm em faria assim bsf led 1 bcf led 2 call delay bcf led1 bsf led2 call delay

Pois sim, hoje pra mim ja faz sentido,apesar q ta faltando ai todas aquelas configuraçoes iniciais correto? .

Não sei se pelo basic vou mais adiante encontrar dificuldades que nao teram como serem resolvidas sem observação do ASM, mas isto é futuro...

Eu verifiquei varios topicos de pedido de ajuda em basic, maioria sem respostas.

Abaixo vou inserir o meu primeiro prog.

Copiar para o mikrobas

********************************************

'este simbolo inicial serve pra isto mesmo ou seja o compilador

'nao enxerga as besteiras que escrevemos e os comentarios.

'*

'* usando pic 18f884 40 pinos 28 i/o (escolhi este por ter muitas I/O

' ou seja I de in entradas e O de Out saidas

'

'

'

'

program fácil 'nome do programa ou codigo a gerar

'* by cavalo

main: ' tudo começa por aqui

adcon1=%01111111 'Configura os pinos para funcionar em modo digital (chaves 1-0) liga desliga etc e tal

trisa=%11111100 'Configura o porto A como entrada exceto .0 e .1 como saida da direita pra esquerda...

trisb=1 'Configura as portas do porto B como entrada

trisc=1 'Configura as portas do porto C como entrada

trisd=1 'Configura o porto D como entrada

'****************************************************************************************************************

if portb.0 = 1 then 'Se o botão S1 nao estiver pressionado...(=1)

goto NO 'Saltar

end if

if portb.0 = 0 then 'Se o botão S1 estiver pressionado...(=0)

goto YES 'Saltar

end if

YES:

if porta.0 = 0 then 'Se a saida estiver off...

porta.0=1 'liga a saída

delay_ms(1000) 'Aguarda 1 segundos

portb.0=1 'DEsliga botao S1

goto main 'va p inicio

end if

NO:

if porta.0 = 1 then 'Se a saida estiver on...

delay_ms(500) 'Aguarda 0,5 segundos

porta.0=0 ' DEsliga a saida e conta

delay_ms(500) 'Aguarda 0,5 segundos

portb.0=0 'liga a botao S1

end if

goto main 'Salta para começo

end.

'OBS: este prog nao faz nada apenas mostra as portas ligando e desligando...

'como ver inicia o build e depois run (f9) vai abrir a janela...inserir porta a e b

'pronto ja podemos ver a alternancia...

'você tem que alterar os estados das portas nesta janela ou seja mudando os estado delas enguanto RUN ativo...

**************************

Logo posto a sequencia do meu aprendizado...

aqui ja conheci os "port" e algunas variaveis...

Pessoal que iniciou, estar ou vai se iniciar pelo Basic, estou a esperar

comentarios e informações uteis!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

amigo,estas linguagem como basic ,c etc sao mais faceis porém o asm tem muito mais poder.Nao se faz com estas o q se faz com o asm,eu no comeco nao entendia nada ,agora ja consigo fazer alguns programas e entendo ja os opcodes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realmente, deve ser o programador...

Eu tentei pelo 'asm' mas tenho muito pouco conhecimento de programação seja ela que tipo for. Achei aqui no Basic o caminho.

Agora queria saber?

Se quando estou a gerar um codigo no basic e nescessitar de uma biblioteca ou seja la o que for em asm, basta chamar ela no proprio programa e ate alterar ou proseguir em asm, voltar para o basic etc...ou seja podemos gerar o codigo misto.

então estou a aprender 03 coisas...basic, asm, e programar o pic.

O unico incoveniente é este. Pouco material na net, e é exatamente isto que estou a propor aqui uma biblioteca e codigos para aprendizado para PIC em basic, sem esquecer que ao mesmo tempo estamos aprendendo asm.

Qualquer coisa achado na rede ja ajuda.

Continuando com meu aprendizado.

'* fácil -

'* basic for PIC

'* usando pic 18f884 40 pinos 28 i/o

'* by cavalo

'

'

program fácil

'variaveis ************************************************

'**********************

dim on_,off_ as byte 'Demorei horas até fazer isto funcionar...

'esta variavel dim achei no help depois de tentar outras rsrsrs

on_=0

off_=1

'**********************************************************

'configuraçoes dos port ou seja saidas 0 e entradas 1

adcon1=%01111111 'Configura os pinos para funcionar em modo digital

trisa=%11111000 'Configura o porto A como entrada exceto .0 e .1 .2 como saida

trisb=1 'Configura o porto b como entrada, todas de uma vez

trisc=1

trisd=1

if portb.0 = off_ then 'Se o botão S1 nao estiver pressionado...(=1)

goto NO 'Saltar para

end if

if portb.0 = on_ then 'Se o botão S1 estiver pressionado...(=0)

goto YES 'Saltar para

end if

YES: '(quando S1=ligada=0)

if porta.0 = 0 then 'Se a saida estiver off...

porta.0=1 'liga a saída 01

delay_ms(1000) 'Aguarda 1 segundos

porta.1=1 'liga a saída 02

portb.0=1 'DEsliga botao S1

end if

if (portb.0 = 1) and (porta.1= 1) then 'Se Botao S1 nao estiver pressionado...(=1) e se a saida estiver ligada...(1)

porta.2=1 'liga a saída 03

delay_ms(1000) 'Aguarda 1 segundos (ou seja tudo 1)

goto main 'va p inicio

end if

NO: '(quando S1=desligada=1)

if porta.0 = 1 then 'Se a saida estiver on...

delay_ms(500) 'Aguarda 0,5 segundos

porta.0=0 ' DEsliga a saida e conta

delay_ms(500) 'Aguarda 0,5 segundos

portb.0=0 'liga a botao S1

porta.1=0 'desliga a saída 02

porta.2=0 'desliga a saída 03 (ou seja tudo zero)

goto beleza 'va para o teste de retorno

end if

beleza:

if (porta.0 = 0) and (porta.1 = 0)and (porta.2 = 0) then 'se as 03 portas = 0

delay_ms(500) 'Aguarda 0,5 segundos

goto beleza 'Como a expresao é verdadeira ele vai retornar

'vai ficar aqui ate uma porta ser ligada (colocada a 1)

'ai a exp. sera falsa, vai pular goto beleza e ler a proxima...

goto main

end if

goto main 'Salta para começo

end.

agora vou tentar mudar o 'portb.0' para S_1

pois fica mais fácil lembrar da chave s_1 que portb.0

depois tentarei algo mais complicado.

Lembrando que apenas com isto ja é suficiente para criar um comando eletrico com sensor e temporizador por exemplo para acionar um motor em estrela-triangulo entre outros...

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim,concordo,porém a linguagem tbem influencia!O programa citado por você e bem simples mais pratico.Parabens continue assim,e o pessoal q puder ajudar por favor vamos nos unir.Falei!

Editado por jorgeletronico

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em ASM para vermos se um registrador é igual a uma literal fazemos o seguinte:

Vamos supor que:

0ch = .25

Codigo:

movlw .25_______________;Carrega o registrador "w" com 25 em decimal

xorwf 0ch,w_____________;Faz a lógica xou entre "w x 0ch",

btfss status,z____________;Testa o bit Z do registrador Status e salta se = a "1"

goto não________________;Se o bit for "0", executa essa linha e salta para "não" -> reg. diferente de 25

goto sim_________________;Se o bit for "1", executa essa linha e salta para "sim" -> reg. = 25

Agora para vermos se um registrador é igual a outro registrador:

Vamos supor que:

0ch = .25

0dh = .25

Codigo:

movf 0ch,w_____________; Carrega "w" com o valor do reg. 0ch

xorwf 0dh,w_____________; Faz a lógica xou entre "w x 0dh",

btfss status,z____________; Testa o bit Z do registrador Status

goto não________________; Se o bit for "0", executa essa linha e salta para "não" -> 0ch diferente 0dh

goto sim_________________; Se o bit for "1", executa essa linha e salta para "sim" -> 0ch = 0dh

obs: Só relembrando..... lógica xor:

XOR

0 . 0 = 0

0 . 1 = 1

1 . 0 = 1

1 . 1 = 0

Como ficaria essa rotina em "C"?

Editado por Moley

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em ASM para vermos se um registrador é igual a uma literal fazemos o seguinte:

"..."

Como ficaria essa rotina em "C"?

Onde foi parar o pessoal d "C" ????

Criei este estudo que utiliza logica xor, fica muito fácil em BAS

(Alquem ai que fazer = em ASM pra podermos comparar e ajudar nos estudos??? )

mesmo assim ainda acho muito código pra pouca coisa, estou tentando diminuir...alguna sugestão???

Reversor em BAS

'* Reversor, ascende o led azul e fica até que a chave S1 seja deslicada

'* quando a S1 for novemente ligada ascende o led verde e assim por diante...

'* usando pic 18f884 40 pinos 28 i/o

'* by cavalo , forum.clubedohardware.com.br

'

'

program reversor

'variaveis ************************************************

dim on_,off_,S_C,ledazul,ledverde as byte 'definindo as variaveis

on_=1 'estas variaveis vão ser usadas apenas nas saidas reais

off_=0

S_C =0 ' aqui uma var para memorizar a ultima porta acionada

ledazul ='porta.0' "considerando a saida .0 como ledazul

'nao inclui o led verde bem como a chave S1

'pois estourou o demo 8% rsrsrsr

'**********************************************************

'configuraçoes dos port ou seja saidas 0 e entradas 1

adcon1=%01111111 'Configura os pinos para funcionar em modo digital

trisa=%11111000 'Configura o porto A como entrada exceto .0 e .1 .2 como saida

trisb=1 'Configura o porto b como entrada, todas de uma vez

trisc=1

trisd=1

'******************************************************************************************

'aqui abaixo nossa chave S1

espera:

if portb.0 = 1 then 'Se o botão S1 nao estiver pressionado...(=1)

goto espera 'esperar ligar

end if

if portb.0 = 0 then 'Se o botão S1 estiver pressionado...(=0)

goto qual_led 'Saltar para

end if

'*****************************************************************************************

'aqui selecionamos o led nao acesso anteriormente...ou seja fazemos a reversao

qual_led: '(quando S1=ligada=0) (Nossas portas de saidas serao porta.0 e .1

'q ja estão configuradas como saidas lá no começo...

if (portb.0 =0)and (ledazul= off_) and (S_C=0) then 'se a chave s1 estiver ligada (0) Se a saida 1

'estiver off e counter em 0, faça

goto ledazul

end if

if (portb.0 =0)and (porta.1 = off_) and (S_C=1) then 'se a chave s1 estiver ligada (0) Se a saida 1

' estiver off e counter em 1, faça

goto ledverde

end if

'***************************************************************************************************************

ledazul: 'ligando o ledazul

if portb.0 =0 then 'se a chave s1 ainda estiver ligada,faça

ledazul=on_ 'liga o led azul

S_C =S_C + 1 'soma 1 a S_C

goto ledazuloff

end if

ledazuloff:

if portb.0 = 0 then ' Se a chave s1 esta ligada aguarde

goto ledazuloff

end if

if portb.0 = 1 then ' Se a chave s1 esta desligada

ledazul=off_'Desliga ledazul e volta a esperar S1

goto espera

end if

'********************************************************************************************************************

ledverde:

if (portb.0 =0) then 'se a chave s1 ainda estiver ligada,faça

porta.1 =on_ 'liga o led verde

S_C =S_C - 1

goto ledverdeoff

end if

ledverdeoff:

if portb.0 = 0 then ' Se a chave s1 esta ligada aguarde

goto ledverdeoff

end if

if portb.0 = 1 then' Se a chave s1 esta desligada

porta.1 =off_'Desliga led verde e espera S1

goto espera

end if

goto main

end.

LINK com muita informação BASIC, em inglês...

http://www.mikroe.com/en/books/picbasicbook/00.htm#table_of_contents

http://www.oshonsoft.com/picbasiccompiler.html

Editado por cavalodf
inclusao dos links

Compartilhar este post


Link para o post
Compartilhar em outros sites

pelo que entendi do codigo do amigo cavalodf ,ao pressionar o botao acende o led azul e ao solta lo ele apaga,ao pressionar novamente acende o verde e ao soltar apaga e assim vai,estou certo??

Eis logo em baixo o codigo q desenvolvi em asm ,para tal efeito,e ja testado no proteus.

INCLUDE<P16F84A.INC>

#DEFINE BANK0 BCF STATUS,RP0

#DEFINE BANK1 BSF STATUS,RP0

#DEFINE LED_BLUE PORTB,0

#DEFINE LED_GREEN PORTB,1

#DEFINE BOTAO PORTA,0

CBLOCK

FLAGS

ENDC

BANK1

CLRF TRISB

BANK0

CLRF PORTB

TESTA

BTFSC BOTAO ;botao pressionado?

GOTO $-1 ;nao

BSF LED_BLUE sim,acende led azul

BTFSS BOTAO ;botao solto?

GOTO $-1 ;nao

BCF LED_BLUE ;sim,apaga led azul

BSF FLAGS,0 ;seta flags

BTFSC BOTAO ;botao pressionado novamente?

GOTO $-1 ;nao

BTFSS FLAGS,0 ;sim,flags setado?

GOTO TESTA ;nao

BSF LED_GREEN ;sim ,então acende led verde

BTFSS BOTAO ;botao solto

GOTO $-1 ;nao

BCF LED_GREEN ;sim,apaga led verde

BCF FLAGS,0 ;limpa flags

GOTO TESTA ;volta ao inicio do teste

END

OBS:Faltou fazer um filtro para o botao,mais isso e coisa simples.Isso foi a maneira q eu pensei,porém pode ter um jeito mais simples.

Editado por jorgeletronico

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá pessoal, há muito tempo estou querendo aprender sobre PICs mas assembler é muito chato e é (quase) linguagem de máquina e C tem pouca documentação, quando foi que eu mu deparei com esse tópico.

Pesquizando pelo google achei o seguinte projeto em que o autor escreve o preograma em basic, espero que ajude.

http://www.cerne-tec.com.br/Artigo_10.pdf

Bom é isso! Vou aproveitar as férias para aprender microcontroladores!

Já aadquiri um PIC 16F84A e vái lá fazer projetos.

Compartilhar este post


Link para o post
Compartilhar em outros sites
pelo que entendi do codigo do amigo cavalodf ,ao pressionar o botao acende o led azul e ao solta lo ele apaga,ao pressionar novamente acende o verde e ao soltar apaga e assim vai,estou certo??

Eis logo em baixo o codigo q desenvolvi em asm ,para tal efeito,e ja testado no proteus.

OBS:Faltou fazer um filtro para o botao,mais isso e coisa simples.Isso foi a maneira q eu pensei,porém pode ter um jeito mais simples.

Perfeito, jorgeletronico...Agradecemos...

Comparando-se um codigo com o outro percebe-se a função dos opcodes

e como sao utilizados.

E é ai que rola, aprender os dois.

Eu nao sei em ASM, mais BAS tem muita forma de fazer a mesma coisa, sendo umas mais simples que outras...:mellow:

Estou a procura de + material com qualidade em basic, assim que os tiver posto aqui.

Link para os pdf's das pinagens dos PIC

http://melabs.picbasic.com/Scripts/perl/picsearch.pl

link para exemplos de programas em Basic

http://www.melabs.com/resources/samples.htm

Editado por cavalodf
links

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caros colegas eu tb estou aprendendo a progamar pic com o basic atraves do mplab adicionado com um compilador .bas para .hex , tambem nao to achando pouco material na web YouTube - 1. PIC 16F628A: ENCENDER Y APAGAR UN LED vejam tb os outros videos dele, aprendi bastante com eles .. :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estranho esta mensagem do amigo sandrodasilva, porém cliquei assim mesmo.

Realmente ensina alguna coisa.

Meu mpbab nao aceita .BAS deve ser antigo.

Ja fiz meu primeiro projeto grande com PIC (grande leia-se q serve realmente a algo)

Infelizmente para este nao posso ainda postar dados pois se trata de projeto comercial

real.

Estou a criar agora (tentando) um rele de sequencia e amplitude de fase RST (conhecido por oscilografia )

Este sim vai dar muita dor de cabeça. Vou ter ajuda? acho que não.

Logo posto os resultados.

Boas festas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nao, jorge .

O pic so vai analisar os aspectros e com eles decidir o que fazer.

Por enquanto este vai ser meu principio de ideia...

interfase + sample and hold + pic.

Vou iniciar na real pelo mais simples ,Sequencia e falta de fase RST.

Editado por cavalodf

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok amigo,estive pesquisando,você pretende fazer um rele q identifique a mudanca da sequencia da rede trifasica ,ou a falta de uma das fases certo???O principio e testar L1 L2 L3,e caso falte alguma fase ou mude de sequencia,tipo L1 L3 L2 ou L2 L1 L3,então o pic desativa o rele de saida ,seria mais ou menos isso???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi, pelo que entendí, este projeto é para identificar quais são os fios R, S e T utilizando um PIC, e também sinalizar uma possível falta de fase, estou correto ?

Só não entendí direito para que servirá o relé ....

Explique melhor, eu tenho um circuito muito simples que identifica a sequência RST utilizando alguns CIS bem comuns. Se for para usar um PIC, eu entendo que você está planejando bem mais do que isto certo ?

Compartilhar este post


Link para o post
Compartilhar em outros sites
Oi, pelo que entendí, este projeto é para identificar quais são os fios R, S e T utilizando um PIC, e também sinalizar uma possível falta de fase, estou correto ?

Só não entendí direito para que servirá o relé ....

Explique melhor, eu tenho um circuito muito simples que identifica a sequência RST utilizando alguns CIS bem comuns. Se for para usar um PIC, eu entendo que você está planejando bem mais do que isto certo ?

você esta certo,amigo aphawk

Nao desejo criar (por enquanto) a identificação das fases no pic e sim retirar o sinal (1/0) do circuito e com isto o pic vai decidir o que fazer.

Este tipo de analise serve entre outras coisas em qualquer equipamento que utilize a sequencia correta das fases para trabalhar ,e são muitos .

Se puder postar o circuito de analise ja adianta muito.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Arre... após 2 horas e meia de procura achei o bendito circuito do detetor de fases para trifásico.

Detalhe : o ponto B tem um sinal que indica que a ligação das fases está em sequência correta ok ? Basta ligar um Led nele e já teriamos a indicação das fases corretas.

Todo o restante do circuito após os pontos A e B servem apenas para fazer a indicação dos Leds girando na direção horária e anti-horária.

Para quem quiser saber mais, este circuito tem 3 LEDS, que serão disponibilizados em forma de triângulo, com os nomes R, S e T, e quando eles estão girando na direção horária, a ligação das fases está correta.

O circuito é auto-alimentado.

Cuidado se interligar este circuito em outro, pois ele não tem nenhuma isolação da rede elétrica.

Boa sorte !

Paulo

Compartilhar este post


Link para o post
Compartilhar em outros sites
Arre... após 2 horas e meia de procura achei o bendito circuito do detetor de fases para trifásico.

Detalhe : o ponto B tem um sinal que indica que a ligação das fases está em sequência correta ok ? Basta ligar um Led nele e já teriamos a indicação das fases corretas.

Todo o restante do circuito após os pontos A e B servem apenas para fazer a indicação dos Leds girando na direção horária e anti-horária.

Paulo

Analizando,ou temos ou temos nao as fases, e depois a sequencia nao das fases e sim a rotação que ela proporciona.(minha analise) Mas ja é alguna coisa.

Na real estou atras de um detector de maxima e minima tensão (Vamos esquecer a sequencia, nao serve pra quase nada mesmo) Ja consegui criar este abaixo, porém somente em 220V e ainda nescessita de trafo.

To pensando em usar 02 assim analizo 2X380V(RS)+2X380V(ST)

jogo num AND e tenho o sinal 1/0.

porém teria que ter o trafo. Vou ver se dar para fazer uma fonte trifasica

a capacitor e depois isolar o sinal com opto.

Assim que resolver estas coisitas :D posto o circuito completo e o arquivo BAS do pic.

Ideias sao bem vindas.

PS: também ainda não estou consequindo salvar os comando do pic na eeprom, caso falte energia zera tudo! alquem ai tem dica (Em basic pic 18f4220) mas pode ser em asm tambem.

post-86802-13884949743449_thumb.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estamos de volta.

Estava indo muito bem até que resolvi substituir tudo por um circuito

que analise as 3 fases com diferencial de 12% individual ou

queda total (380V ou 220V trifasico) .

Retirar qualquer tipo de trafo e analisar pelo PIC.

Ai esta um resultado satisfatorio.

Se algum amigo quiser palpitar sinta-se a vontade.

O arquivo: (mikrobasic)

**********************************************

ppprogram ad

dim ref1 as byte

dim ref2 as byte

dim ref3 as byte

dim volt1 as word

dim volt10 as dword

dim volt100 as dword

dim volt2 as word

dim volt20 as dword

dim volt200 as dword

dim volt3 as word

dim volt30 as dword

dim volt300 as dword

ref1=0

ref2=0

ref3=0

'REFERENCIA DE tensão considerada como interna 0V 5V

ADCON0 = %00000000

'inicialisacao em zero

portc=%00000000

portb=%00000000

portd=%00000000

'main:

ADCON1 = $80 ' Configure analog inputs and Vref

TRISA = $FF ' PORTA is input

TRISB = $0 ' portb output

TRISC = $0 ' portC output

TRISD = $0 ' PORTD is output

delay_ms(2000) ' esperar 2 segundo para as tensoes se estabilizarem

INICIO:

while TRUE

volt1 = Adc_Read(0) ' porta de entrada = AN0

DELAY_MS(30)

VOLT10 = dword(volt1) * 5000 ' convert adc reading to mV

delay_ms(10)

VOLT100 = dword(volt10) div 1023 ' achando a milhar exata adc reading no watch

delay_ms(10)

'Volt2= adc= 1023 - para 1 volt (1000)

'***************************************************************

volt2 = Adc_Read(1) ' porta de entrada = AN1

DELAY_MS(30)

VOLT20 = dword(volt2) * 5000 ' convert adc reading to mV

delay_ms(10)

VOLT200 = dword(volt20) div 1023 ' achando a milhar exata adc reading no watch

delay_ms(10)

'Volt2= adc= 1023 - para 1 volt (1000)

'****************************************************************

volt3 = Adc_Read(2) ' porta de entrada = AN2

DELAY_MS(30)

VOLT30 = dword(volt3) * 5000 ' convert adc reading to mV

delay_ms(10)

VOLT300 = dword(volt30) div 1023 ' achando a milhar exata adc reading no watch

delay_ms(10)

'Volt2= adc= 1023 - para 1 volt (1000)

IF (volt100>3050) and (volt100<4000) THEN 'estas referencias vem da tensão no foto acoplador.

ref1=1

else ref1=0

end if

IF (volt200>3050) and (volt200<4000) THEN 'estas referencias vem da tensão no foto acoplador.

ref2=1

else ref2=0

end if

IF (volt300>3050) and (volt300<4000) THEN 'estas referencias vem da tensão no foto acoplador.

ref3=1

else ref3=0

end if

if (ref1 + ref2 + ref3 = 3) then

SETBIT(PORTC, 1)

END IF

delay_ms(10)

IF (ref1 + ref2 + ref3 <= 2) THEN

SETBIT(PORTC, 1)

delay_ms(300)

CLEARBIT (PORTC, 1)

delay_ms(300)

END IF

wend

GOTO INICIO

end.

***********************************************

O esquema:

post-86802-13884950217932_thumb.jpg

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

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





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

×