Controle de temperatura por PWM

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Mensagempor ze » 21 Mar 2011 10:21

que tal criar 8 canais pwm por sw em RB7...0 via interrupção...
Código: Selecionar todos
unsigned char d7,d6,d5,d4,d3,d2,d1,d0,tmp;
static void interrupt
timer1_int(void)
{
TMR1IF=0;
TMR1H=tm1h;     //reload
TMR1L=tm1l;
if (d7<tmp) RB7=0;else RB7=1;
//...
if (d0<tmp) RB0=0;else RB0=1;
tmp++;
}
e no main voce controla os valores de d7..0=duty
algo como:
d7=readadc(x);
e otras cositas más

simule-se. mas na prática a teoria é outra
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor itamar » 21 Mar 2011 11:09

jack sparrow escreveu:Oi Itamar,

Não entendi porque você usou um PIC com 2 PWM's se precisava de 3,
dá uma olhada no datasheet do PIC16F1936.
.
Moro em teresina! logo, não tem loja de eletrônica decente. esse PIC eu adquiri em uma compra no ML só pra aproveitar o frete rsrs. E no inicio só ia precisar de 2 PWM, por isso abri o tópico no forum.No momento não compensa mudar o projeto. ok. mas valew a dica
itamar
Nibble
 
Mensagens: 61
Registrado em: 24 Dez 2010 10:21

Mensagempor itamar » 21 Mar 2011 11:11

jack sparrow escreveu:Oi Itamar,

Não entendi porque você usou um PIC com 2 PWM's se precisava de 3,
dá uma olhada no datasheet do PIC16F1936.
.
Moro em teresina! logo, não tem loja de eletrônica decente. esse PIC eu adquiri em uma compra no ML só pra aproveitar o frete rsrs. E no inicio só ia precisar de 2 PWM, por isso abri o tópico no forum.No momento não compensa mudar o projeto. ok. mas valew a dica
itamar
Nibble
 
Mensagens: 61
Registrado em: 24 Dez 2010 10:21

Mensagempor itamar » 22 Mar 2011 09:08

lellis escreveu:outra vez post duplicado de novo duas vezes mais uma vez novamente
(apague-se)
.
Vc sabe onde está a resposta para o problema \o/ ? me mostre por favor.
please.
Só pra refrescar: gerar 3 PWM com PIC 16f877A
itamar
Nibble
 
Mensagens: 61
Registrado em: 24 Dez 2010 10:21

Alguém

Mensagempor itamar » 22 Mar 2011 17:33

Caras, ainda tô com problemas pois a ideia de comutar o pwm ainda não funcionou na simulação e eu tô sem osciloscópio pra ver se a comutação de sinais tá correta.
vejam lá os resultados que postei antes
HELP
itamar
Nibble
 
Mensagens: 61
Registrado em: 24 Dez 2010 10:21

Re: Alguém

Mensagempor andre_luis » 22 Mar 2011 22:26

O seu problema agora é de simulação.
O conceito de implementar o seletor com as NANDs parece estar correto.

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor ze » 23 Mar 2011 08:00

"bug do forum! +_+"

itamar escreveu:
lellis escreveu:outra vez post duplicado de novo duas vezes mais uma vez novamente
(apague-se)
.
Vc sabe onde está a resposta para o problema \o/ ? me mostre por favor.
please.
Só pra refrescar: gerar 3 PWM com PIC 16f877A

tente ler isso e substitua 8 por 3
lellis escreveu:que tal criar 8 canais pwm por sw em RB7...0 via interrupção...
Código: Selecionar todos
unsigned char d7,d6,d5,d4,d3,d2,d1,d0,tmp;
static void interrupt
timer1_int(void)
{
TMR1IF=0;
TMR1H=tm1h;     //reload
TMR1L=tm1l;
if (d7<tmp) RB7=0;else RB7=1;
//...
if (d0<tmp) RB0=0;else RB0=1;
tmp++;
}
e no main voce controla os valores de d7..0=duty
algo como:
d7=readadc(x);
e otras cositas más

simule-se. mas na prática a teoria é outra

ou ...
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor luisf.rossi » 28 Mar 2011 01:28

itamar escreveu:
Desculpe mas não entendi o que vc disse.
E também acho que vc não me entendeu... fazer com o pic faça testes "if bla bla bla" vai desviar a "atenção" dele pq ele deve esperar que algum dos sensores informe que ele deve tomar uma decisão, pois este é o firm. que já está implementado e FUNCIONA perfeitamente, novamente repito o problema é adicionar o PWM 3 .
Quanto aos 100ms acho que não gostaria de esperar esse tempo pra que o PIC decida se meu dedo é ou não importante rsrsrsr.
mas de qualqer forma Valew pela idéia


Itamar, você esta precisando rever alguns conceitos serio...

Você utilizar essa tecnica de chavear a saida PWM provavlmente vai gastar tantas instruções quanto se você utilizasse o seu timer.

Se você utilizar o timer, você ira gastar pouquissimas insturções a cada vez que o timer for disparado. De no resto do tempo o seu programa ira rodar norlamente, como se o timer nem existisse. Por exemplo. Dentro de uma instrução o que você ira colocar é

Código: Selecionar todos
If(state = OFF_STATE)
{
//configura o timer para rodar o tempo que ele deve ficar ligado
state = ON_STATE
}
else
{
//configura o timer para rodar o tempo que ele deve ficar desligado
state = OFF_STATE
}

//zera a flag


De modo geral se o seu PWM estiver rodando a 20Hz, a interrupção ira estourar duas vezes por ciclo, logo.. a cada 40Hz. Digamos que no total sejam gatos 10 instruções para tudo isso... e que seu clock seja de 4Mhz, o tempo de cada instrução é de 1uS. Logo você ira gastar 10us a cada 25ms. Ou seja 0.04% do tempo você ira cuidar do PWM por firmware!!!

Se você erroneamente colocar qualquer debounce de botão por delay de instruções não via timer (que eu vejo em muitos codigos), o seu codigo ja é MUITO mais afetado do que isso. DIga-se de passagem, qualquer delay via instrução , ira ter um impacto ordens de grandeza maior do que esse PWM via timer...
luisf.rossi
Byte
 
Mensagens: 109
Registrado em: 28 Nov 2010 12:48
Localização: São Paulo, SP

Mensagempor itamar » 28 Mar 2011 09:42

luisf.rossi escreveu:
itamar escreveu:
Desculpe mas não entendi o que vc disse.
E também acho que vc não me entendeu... fazer com o pic faça testes "if bla bla bla" vai desviar a "atenção" dele pq ele deve esperar que algum dos sensores informe que ele deve tomar uma decisão, pois este é o firm. que já está implementado e FUNCIONA perfeitamente, novamente repito o problema é adicionar o PWM 3 .
Quanto aos 100ms acho que não gostaria de esperar esse tempo pra que o PIC decida se meu dedo é ou não importante rsrsrsr.
mas de qualqer forma Valew pela idéia


Itamar, você esta precisando rever alguns conceitos serio...

Você utilizar essa tecnica de chavear a saida PWM provavlmente vai gastar tantas instruções quanto se você utilizasse o seu timer.

Se você utilizar o timer, você ira gastar pouquissimas insturções a cada vez que o timer for disparado. De no resto do tempo o seu programa ira rodar norlamente, como se o timer nem existisse. Por exemplo. Dentro de uma instrução o que você ira colocar é

Código: Selecionar todos
If(state = OFF_STATE)
{
//configura o timer para rodar o tempo que ele deve ficar ligado
state = ON_STATE
}
else
{
//configura o timer para rodar o tempo que ele deve ficar desligado
state = OFF_STATE
}

//zera a flag


De modo geral se o seu PWM estiver rodando a 20Hz, a interrupção ira estourar duas vezes por ciclo, logo.. a cada 40Hz. Digamos que no total sejam gatos 10 instruções para tudo isso... e que seu clock seja de 4Mhz, o tempo de cada instrução é de 1uS. Logo você ira gastar 10us a cada 25ms. Ou seja 0.04% do tempo você ira cuidar do PWM por firmware!!!

Se você erroneamente colocar qualquer debounce de botão por delay de instruções não via timer (que eu vejo em muitos codigos), o seu codigo ja é MUITO mais afetado do que isso. DIga-se de passagem, qualquer delay via instrução , ira ter um impacto ordens de grandeza maior do que esse PWM via timer...


fiz um teste preliminar e aparentemente não há problema com a interrupção... só quero agora uma dica pra fazer o controle do ciclo ativo utilizando a leitura do adc. por exemplo carregar T_alto = x e T_baixo = 255 - x onde x = read_adc(). Acho que tenho que fazer alguma conversão de tipo de variável que não to sabendo.

Valew pelas dicas e desculpa pela ironia anterior... o problema real não era só dedo(rsrsrs) mas uma fita encoder que passa por um sensor óptico e a cada passagem o PIC necessita tomar decisões antes que a proxima marcação chegue ao sensor, medi os tempos e deu tudo certo.
itamar
Nibble
 
Mensagens: 61
Registrado em: 24 Dez 2010 10:21

Controle temperatura

Mensagempor malereis » 30 Abr 2012 23:32

Olá Itamar...

Se vc vai controlar o PIC via PC, posso te ajudar.

Vc vai usar as entradas analógicas para ler os sensores de temperatura e estabelecer um "gap" onde quer que ligue e desligue (isso no PC).
Quando atingir a temperatura máxima que setou no PC, a saída do pic é desligada e com isso derruba um contator que esta ligado sua resistência.
Quando o valor for= ou< que o mínimo setado, liga de novo.

Mas aí vai ter que usar o pic já programado para isso e um PC com um software feito em Delphi, que vai controlar o PIC, via RS232.

Se for assim, aí posso ajudar.
Só sei fazer aplicações com o PIC, via PC.
Se não for isso, fico te devendo...

Boa sorte e se precisar.... tô por aqui.

Abraço
$$ não pode comprar a felicidade.
Mas pode comprar Bacon que é quase a mesma coisa.
malereis
Bit
 
Mensagens: 14
Registrado em: 14 Mar 2012 22:14

Anterior

Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x