Guia CNC Brasil - Tudo sobre CNC, Router, Laser, Torno e 3D Print
ELETRÔNICA / ELÉTRICA => Eletrônica => Tópico iniciado por: liniker em 19 de Julho de 2012, 19:37
-
Boa noite pessoal,
Estou querendo saber alguem componente que incrementa horas no pic mesmo que o circuito esteja desligado
tipo, bateria, capacitor, mas que nao ocupe muita energia e seja exclusivo para nao deixar as horas desatualizar
obrigado!
-
Liniker,
Desistiu do projeto do display?
-
naaaao, jamais
estou fazendo oque voce me aconselhou e vou postar um video para voces veerem como ele esta,
dai resolvi inclementar algo a mais nele, que seria sobre a pergunta acima
mesmo o pic estando desligando tipo um cmos continuaria a contar o relogio.
tem alguma idea de como farei isto?
-
Como não existe almoço de graça, o PIC deve ser alimentado, porém, como pode ficar hibernando, o consumo é baixo, da ordem de microamperes. Para fazer a função de relógio, pode uma interrupção a cada segundo e o próprio PIC é o relógio. Ou então vóce pode usar um CI dedicado com essa função conectado ao PIC. É necessário determinar a autonomia do circuito para calcular a bateria, mas, também é necessário fazer um projeto do sistema a ser alimentado.
-
certo, ate ai entendi.
se por ocasiao usasse um capacitor de valor elevado (1 Faraday ) ou uma bateria 5v
para hibernar o pic, como seria o circuito e qual comando usarei ?
-
É necessário uma bateria, um capacitor apenas armazena energia. O comando de hibernação é o sleep. O circuito depende muito do que vai fazer, acionar display, ajuste da hora, ...
-
intendi, eu quero apenas para nao deixar desatualizar as horas isto seria possivel?
-
RTC: http://pdfserv.maxim-ic.com/en/ds/DS3231.pdf (http://pdfserv.maxim-ic.com/en/ds/DS3231.pdf)
Cristal interno TCXO e consumo na casa dos nA. Uma bateria CR2032 alimentando ele, dura anos.
-
intendi, eu quero apenas para nao deixar desatualizar as horas isto seria possivel?
Sim, é possível, a cada segundo calcula os segundos, minutos, horas, dias, meses e anos.
-
certo, colocarei apenas uma bateria para alimentar o Pic em modo sleep, a duvida é:
como seria esta configuracao para chamar esta instrucao?
-
certo, colocarei apenas uma bateria para alimentar o Pic em modo sleep, a duvida é:
como seria esta configuracao para chamar esta instrucao?
Basta colocar a instrução "sleep" no programa e o PIC entra em hibernação.
-
AAA Bom compreendo, poderia usar desta maneira?
void Modo_sleep (void)
{
while (true)
{
GIE = 1;// habilita todas inter
sleep();
delay_us (5);
if (port_a1== 1) sleep(); // se botao for 1 , volta a dormir
}
}
-
Liniker,
Não é bem assim. Ao executar sleep, o PIC para e é acordado por uma interrupção de relógio. Ao ocorrer a interrupção o PIC calcula os segundos, minutos, ... e no final volta a dormir, usando sleep. Sugiro você dar uma estudada no datasheet de um PIC e de application notes da Microchip. Há muito material a respeito desse assunto no site da Microchip.
-
Apenas alguns exemplos sobre hibernação (modo "sleep") e economia de bateria:
http://ww1.microchip.com/downloads/en/devicedoc/01146b_chapter%202.pdf (http://ww1.microchip.com/downloads/en/devicedoc/01146b_chapter%202.pdf)
http://ww1.microchip.com/downloads/en/DeviceDoc/40040c.pdf (http://ww1.microchip.com/downloads/en/DeviceDoc/40040c.pdf)
http://ww1.microchip.com/downloads/en/DeviceDoc/41200c.pdf (http://ww1.microchip.com/downloads/en/DeviceDoc/41200c.pdf)
Alimentação em 3V ou 5V: http://www.newark.com/pdfs/techarticles/microchip/3_3vto5vAnalogTipsnTricksBrchr.pdf (http://www.newark.com/pdfs/techarticles/microchip/3_3vto5vAnalogTipsnTricksBrchr.pdf)
Há outros....
-
olá minilathe...
Desculpa minha ingenuidade, mas passei a tarde inteira tentando usar a instrucao sleep do pic mas nao obtive nenhum exito
entende que ela pode ser desativada por wdt,interrupcao,mclr, mas nao sei como usar estes comandos
peco se porventura teria como me der um exemplo sobre isto
eu quero fazer o seguinte:
ligando o circuito
funcione normalmente meu programa
caso eu aperto PORTA_RA2
ele entra em modo sleep.
-
Linker,
Dê uma lida nesse exemplo, mostra claramente um circuito bem simples e o comando "sleep" sendo aplicado com a linguagem C e alguma coisa em assembly.
http://embedded-lab.com/blog/?p=3237 (http://embedded-lab.com/blog/?p=3237)
-
Ola,
Eu usaria o CI DS1302 ou DS1307 e uma bateria CR2032 no qual o ci ja tem um pino para esta funçao,tenho aqui um display relogio e temperatura alternando hora e temp.ja desliguei a alimentacao 3 dias para ver se o hora nao estaria certa,que nada,funcionando certinho.
Projeto relogio/temp.com 4 display 7seg de 4 polegadas, programado em picbasic pro.
ismaelsc
-
Obrigado pela dica ismaelsc,
porém ja estou com o projeto encaminhado
e com a pci feita, por isso penso em usar o pic para me ajudar nesta opcao
mas ainda nao consegui compreender o comando.
este projeto que minilathe me enviou observei analisei mas nao conseguir criar uma logica para incrementar no meu projeto
este comando sim esta me causando bastante dor de cabeca srsrsr.
Nao irei desistir e peco a paciencia de todos para concluir este projeto!!
obrigado.
-
Obrigado pela dica ismaelsc,
porém ja estou com o projeto encaminhado
e com a pci feita, por isso penso em usar o pic para me ajudar nesta opcao
mas ainda nao consegui compreender o comando.
este projeto que minilathe me enviou observei analisei mas nao conseguir criar uma logica para incrementar no meu projeto
este comando sim esta me causando bastante dor de cabeca srsrsr.
Nao irei desistir e peco a paciencia de todos para concluir este projeto!!
obrigado.
Não entendeu o exemplo que eu mandei?
-
entendi pouca coisa:
void main() {
TRISB = 0b00000000;
TRISA = 0b00100000;
LED = 0;
OPTION_REG = 0b00001111; // Assign 1:128 prescaler to WDT
do { //*********** aqui que iniciaria a rotina para hibernar?*************
asm sleep; // Sleep mode, WDT is cleared,
//poderia usar uma condicao do tipo // and time out occurs at Approx. 2.3 Sec
// if(input(pin_a2)) { // Current is minimum in Sleep mode
// seria tipo um botao liga,desliga
LED = 1; // After wake-up the LED is turned on
Delay_ms(500);
LED = 0;
asm CLRWDT; // Clear WDT
Delay_ms(2000); // Measure current here and compare with Sleep mode
}//************ e terminaria aqui certo?*************
while(1); // current
}
nao quero usar o wdt, tenho um botao determinado na minha placa para esta funcao.
Realmente nao sei como realizar uma logica para o meu programa e a cada vez esta so me confundindo. :/
-
Liniker,
entendi pouca coisa:
void main() {
TRISB = 0b00000000;
TRISA = 0b00100000;
LED = 0;
OPTION_REG = 0b00001111; // Assign 1:128 prescaler to WDT
do { //*********** aqui que iniciaria a rotina para hibernar?*************
asm sleep; // Sleep mode, WDT is cleared,
//poderia usar uma condicao do tipo // and time out occurs at Approx. 2.3 Sec
// if(input(pin_a2)) { // Current is minimum in Sleep mode
// seria tipo um botao liga,desliga
LED = 1; // After wake-up the LED is turned on
Delay_ms(500);
LED = 0;
asm CLRWDT; // Clear WDT
Delay_ms(2000); // Measure current here and compare with Sleep mode
}//************ e terminaria aqui certo?*************
while(1); // current
}
nao quero usar o wdt, tenho um botao determinado na minha placa para esta funcao.
Realmente nao sei como realizar uma logica para o meu programa e a cada vez esta so me confundindo. :/
Quem não está entendendo sou eu....
Você queria fazer um relógio, contar segundos, horas, etc, e deu este nome a este tópico. Agora quer acionar um botão para uma função que eu ainda não entendi o que é (colocar para dormir??)....
-
Desculpe se nao fui bem claro!
irei tentar explicar detalhadamente.
Estou com o projeto propeller clock em funcionamento,
(contando horas, data), tudo atraves de leds smd,o circuito de alimentacao esta sendo por uma fonte chaveada 12v,
como se desligar esta fonte da tomada,o circuito ira que por sua vez tambem se desligara.Sendo assim as horas ira desatualizar juntamente com a data.A minha intencao de criar este topico foi a seguinte: se tivesse algum comando ou componente que mesmo que a fonte fosse retirada da tomara o circuito ainda manteria as horas,data atualizada.
e foi dado a idea de um CI e o comando SLEEP pelo pic, optei pelo "sleep".
Só que quero fazer com que o pic entrasse em modo de hibernacao apenas quando eu apertasse um botao, e voltando o circuito em seu funcionamento normal assim que resetasse pelo master clear.
Fui bem claro? deu para entender desta vez?
-
Liniker,
Desculpe se nao fui bem claro!
irei tentar explicar detalhadamente.
Estou com o projeto propeller clock em funcionamento,
(contando horas, data), tudo atraves de leds smd,o circuito de alimentacao esta sendo por uma fonte chaveada 12v,
como se desligar esta fonte da tomada,o circuito ira que por sua vez tambem se desligara.Sendo assim as horas ira desatualizar juntamente com a data.A minha intencao de criar este topico foi a seguinte: se tivesse algum comando ou componente que mesmo que a fonte fosse retirada da tomara o circuito ainda manteria as horas,data atualizada.
e foi dado a idea de um CI e o comando SLEEP pelo pic, optei pelo "sleep".
Só que quero fazer com que o pic entrasse em modo de hibernacao apenas quando eu apertasse um botao, e voltando o circuito em seu funcionamento normal assim que resetasse pelo master clear.
Fui bem claro? deu para entender desta vez?
Ok, mais claro agora. Vamos por partes...
(1) O propeller necessita de um relógio (uma base de tempo). O relógio pode ser do próprio PIC do propeller, outro PIC ou um CI específico de relógio.
(2) Se o propeller usa uma fonte de 12V, quando a mesma for desligada, pode-se usar um capacitor de 1F, ou uma bateria, para manter o relógio funcionando (um dos exemplificados acima).
(3) O modo sleep me parece compatível com a opção do PIC (do propeller ou um dedicado) ser um relógio. Nesse caso, o mesmo entraria em hibernação ao desligar-se a fonte e não ao acionar um botão.
Correto??
-
sim, correto :D !
o relogio do propeller esta sendo usado atraves do timer1,
poderia sim por C=1F ou uma bateria,
o modo sleep poderia sim entra assim que desliga-se a fonte mas como estou usando um meio por " transformador rotativo" para alimentar o meu circuito,(pois a minha placa esta ficada em cima do rotor do cooler) sendo assim a transferencia de energia esta sendo por meio de inducao eletromagnetica, dai optei tambem por apertar esse botao. certo?
creio agora que ja sabe minha duvida e espero que me ajudem a resolve-las!
rsrsrr
-
Liniker,
o relogio do propeller esta sendo usado atraves do timer1,
Então não é necessário um relógio externo?
o modo sleep poderia sim entra assim que desliga-se a fonte mas como estou usando um meio por " transformador rotativo" para alimentar o meu circuito,(pois a minha placa esta ficada em cima do rotor do cooler) sendo assim a transferencia de energia esta sendo por meio de inducao eletromagnetica, dai optei tambem por apertar esse botao. certo?
creio agora que ja sabe minha duvida e espero que me ajudem a resolve-las!
rsrsrr
A alimentação é através do movimento de rotação de um ventilador?
Então, se o ventilador parar a alimentação passa a ser a alternativa? E o PIC passa a operar hibernando para manter a hora (data, segundos, dia, mês, ....) atualizada.
Para que o botão?
-
SIM, fiz um video rapido aqui para que voces possam analizar e verem se me compreendem
desculpem em meus erros na fala estava meio apressado em fazer.
propeller clock (http://www.youtube.com/watch?v=APb0HcB7AV8#)
-
Ok, mais claro ainda após o filme....
(1) O relógio pode será do próprio PIC do propeller? Ou vai usar um CI específico de relógio?
(2) O propeller é alimentado indutivamente através de uma fonte chaveada. Se essa energia faltar, pode-se usar um capacitor de 1F, ou uma bateria, para manter o relógio (PIC) funcionando.
(3) O modo sleep deve ser utilizado para que o PIC (do propeller) seja um relógio.
Seria isso??
Mas, para que o botão que coloca em sleep??
-
Ok, mais claro ainda após o filme....
(1) O relógio pode será do próprio PIC do propeller? Ou vai usar um CI específico de relógio?
sim, do proprio pic.
(2) O propeller é alimentado indutivamente através de uma fonte chaveada. Se essa energia faltar, pode-se usar um capacitor de 1F, ou uma bateria, para manter o relógio (PIC) funcionando.
certo.
(3) O modo sleep deve ser utilizado para que o PIC (do propeller) seja um relógio.
Seria isso??
seria sim!
Mas, para que o botão que coloca em sleep??
para fazer uma demonstracao mais rapida no dia do projeto ou ate mesmo por comodidade
mas se ficar dificil podera ser assim que desligar a fonte mesmo!
-
Então o PIC deve monitorar a tensão da fonte, se cair deve entrar em modo sleep e apenas atualizar o relógio. Se a fonte cair, entra o capacitor de 1F ou a bateria.
-
Certo entendi!
entao como vou criar essa rotina
para esta condicao?
-
-Deve ser habilitada a interrupção de Brown Out (queda da tensão de alimentação), que vai colocar o PIC em sleep. Se a tensão aumentar inibe o modo sleep e atualiza os leds.
-A interrupção do timer acorda o PIC (se estiver dormindo), atualiza o relógio e volta a "dormir" (só dorme se a tensão for baixa).
-
huum entendi,
teria como voce colocar um trecho ?
para ver os comando é porque nunca usei estas instrucoes e nao sei como mecher nelas
-
huum entendi,
teria como voce colocar um trecho ?
para ver os comando é porque nunca usei estas instrucoes e nao sei como mecher nelas
Os comandos e as opções disponíveis depende do PIC que você está usando.
-
estou usando o pic 16f627A
-
Leia o manual do PIC16F627A, na seção 14.4.4 explica detalhadamente o Reset devido ao Brownout (baixa tensão), algumas dicas:
(1) Habilitar o bit 6 (BOREN = Brownout Enable) do Registrador de Configuração do PIC, para usar essa função.
(2) Após o Reset, testar o bit 0 do Registrador PCON para verificar se ocorreu um Brownout.
(3) Se ocorreu o Brownout, executar o comando sleep (modo baixo consumo), senão roda o programa no modo display.
(4) Usar a interrupção do Timer1 para acordar o PIC, se estiver hibernando, atualizar a hora e voltar a hibernar apenas se estiver no modo baixo consumo.
LER E ESTUDAR O MANUAL!!!
-
Confesso que esta realmente dificil entender algo que me parece ser tao facil de se decifrar!
-
olá liniker
Como vc seta as horas ?
Com equipamento em movimento ou parado?
-
Confesso que esta realmente dificil entender algo que me parece ser tao facil de se decifrar!
O que exatamente não está entendendo? Saber formular o problema é meio caminho para a solução.
-
olá liniker
Como vc seta as horas ?
Com equipamento em movimento ou parado?
Ola Paulo_lumens!
crei uma condicao if and else com botoes incrementando e decrementando
com o motor parado!
-
(1) Habilitar o bit 6 (BOREN = Brownout Enable) do Registrador de Configuração do PIC, para usar essa função.
(2) Após o Reset, testar o bit 0 do Registrador PCON para verificar se ocorreu um Brownout.
(3) Se ocorreu o Brownout, executar o comando sleep (modo baixo consumo), senão roda o programa no modo display.
(4) Usar a interrupção do Timer1 para acordar o PIC, se estiver hibernando, atualizar a hora e voltar a hibernar apenas se estiver no modo baixo consumo.
LER E ESTUDAR O MANUAL!!!
(1) devo apenas habilitar BOREN
(2)nao entendi como irei testar se ocorreu a queda de tensao!
ipoderia testar usando condicao if tb?
(3)muitas duvidas nesta parte.
quando voce diz executar o comando sleep seria apenas :?
If(BOREN==1)
{
sleep():
}
else if {
modo normal();
}
}
(4) nao poderia cordalo assi que colocasse a fonte de tensao?
qual rotina deveria ser criada para atualizar a hora e voltar a hibernar apenas se estiver no modo baixo consumo.?
eu cheguei a ver o exemplo dado na pagina do PICC wakep.c entendi mais um pouco porem as duvidas sao muitas
mas irei descobrir com ajuda de voces
-
Como parece que você não leu ou não entendeu o manual do PIC, entenda o Brownout primeiro.
(1) devo apenas habilitar BOREN
Sim..., fazer BOREN=1
Para que a interrupção por Brownout seja habilitada.
(2)nao entendi como irei testar se ocorreu a queda de tensao!
Usando uma fonte variável e um voltímetro, a tensão de alimentação do PIC deverá ser reduzida (de 5V para menos) até que o Brownout ocorra. Ao ocorrer o Brownout uma interrupção será gerada, pode testar ligando um LED quando isso ocorrer.
Para detectar, verifique o bit 0 do registrador PCON é 1 logo após o Reset. Ok??
-
sim, eu li sim mas nao entendi muito bem, irei fazer isto
mas a parte
(3) seria conforme o exemplo?
(4)...
?
-
sim, eu li sim mas nao entendi muito bem, irei fazer isto
mas a parte
(3) seria conforme o exemplo?
(4)...
?
O seu exemplo está errado.... Uma coisa de cada vez, primeiro entenda o Bronwout. Senão vai confundir tudo aí fica muito complicado.
-
Boa noite!
fiz o teste habilitei o Brownout, porém assim que o circuito e ligado meu programa nao funciona normal apenas metade da circunferencia acende rodando o programa ou seja acho que o reset ja esta sendo executado com a tensao de 5v no pic
aumentei a tensao para +- 5.5 da funcionou um pouc melhor porem sem existo.
-
Oque posso fazer diante desta situacao? Alguem tem um idea?
-
Boa noite!
fiz o teste habilitei o Brownout, porém assim que o circuito e ligado meu programa nao funciona normal apenas metade da circunferencia acende rodando o programa ou seja acho que o reset ja esta sendo executado com a tensao de 5v no pic
aumentei a tensao para +- 5.5 da funcionou um pouc melhor porem sem existo.
Não basta habilitar o brownout, tem que testar o bit 0 de PCON, se for 1
ocorreu brownout. Se for 0 foi um Reset e executa normalmente.
Além disso tem que habilitar o Timer 1 e a respectiva interrupção para atualizar a hora.
-
Liniker,
Você escreveu o seu programa do zero ou baixou de algum lugar?
-
Pois entao, Comecei do zero so que tive a ajuda de um amigo que ja criou um semelhante a este, como aprendi pouco de C nao sei muito sobre registradores e como manipular dai oque estou aprendendo é com voces e apostilas na internet.
-
:'( Bom dia amigos , estou com a mesma ideia do nosso amigo ai do modo sleep
pois tambem estou montando um propeller clock da uma olhada no video ai !
Propeller Clock (http://www.youtube.com/watch?v=_iepID22arQ#)
Propeller clock (http://www.youtube.com/watch?v=0s3Zr5s3GYQ#)
Obg
-
Boa noite a todos!!
Depois de um bom tempo e com meu projeto quase todo concluido estou de volta, porem com mais duvidas hehe
descartei a possibilidade de usar o comando sleep pois estava dando conflito com meu programa e decidir colocar o ds1307 indicado por muitos, porem quando estou inicializando ele e dando o get_timer ele nao esta atualizando as horas com cirucito desligado e sempre inicia com 00:00 pois nao deveria ja que no meu programa eu jogo um determinado valor para iniciar espero que vcs ainda possam me ajudar
agradecido
-
algueeem???
DESESPERADO :xXXX