Duty-cycle

Responder
Jorge_Gomes
Curioso
Curioso
Mensagens: 5
Registado: 20 dez 2012, 20:38

Duty-cycle

Mensagem por Jorge_Gomes » 20 dez 2012, 20:48

Boa noite.

Estou a fazer um trabalho com o PIC18F4520, que consiste na captação de um sinal digital e, posteriormente determinar a frequência e o duty-cycle. A frequência consigo determiná-la, o problema é o duty-cycle. Já tentei de várias maneiras mas sem sucesso, como por exemplo, configurar o registo para iniciar contagem no flanco ascendente e, quando tal acontecer mudar a configuração para o flanco descendente, mas neste caso o programa regista o período todo, ou seja, até haver um novo flanco, e não quando muda de flanco. Não pretendo que me façam o código, apenas que alguém me de uma ideia de como fazer.

Obrigado desde já

BLima
Técnico Dedicado
Técnico Dedicado
Mensagens: 749
Registado: 12 jan 2008, 00:53
Profissão: Engenheiro Mecânico
Localização: Funchal
Contacto:

Re: Duty-cycle

Mensagem por BLima » 21 dez 2012, 10:53

Viva,

Isso não pode ser feito com o registo ccp e o timer1? Tipo usar a entrada externa do timer e depois guardá-lo no ccp?

Estou a falar por alto, pois recordo-me que o ccp serve para "capturar" o valor do timer.

Ou então usar dois timers em que um captura na borda de subida e o outro na de descida e depois fazes a diferença entre os dois.

Cumps,
Bruno
Atentamente,
Bruno
-------------------------------------------------------------------------------------------------------------------
M4I - Manutenção Industrial
e-mail: geral@m4i.pt

Jorge_Gomes
Curioso
Curioso
Mensagens: 5
Registado: 20 dez 2012, 20:38

Re: Duty-cycle

Mensagem por Jorge_Gomes » 21 dez 2012, 11:49

Bom dia.

Isso foi o que eu tentei, mas o problema é que quando eu configuro para o flanco ascendente ele faz-me a captura mas conta-me o tempo até o próximo flanco ascendente, ou seja, o período todo, mesmo que eu configure imediatamente após o inicio da captura para o flanco descendente. O mesmo se passa se eu iniciar com o flanco descendente.



Obrigado

BLima
Técnico Dedicado
Técnico Dedicado
Mensagens: 749
Registado: 12 jan 2008, 00:53
Profissão: Engenheiro Mecânico
Localização: Funchal
Contacto:

Re: Duty-cycle

Mensagem por BLima » 21 dez 2012, 15:48

Viva,

E usar dois timers com interrupção externa, uma para o flanco ascende e outro para o ascendente. Ou seja, na rotina de interrupção, se for o timer para o flanco ascendente guardar o valor que tem numa variável e se for a interrupção do flanco descente ver o valor em que está a variável e subtrair o valor inicial. Penso que o melhor será usar sempre dois timers.

Cumps,
Bruno
Atentamente,
Bruno
-------------------------------------------------------------------------------------------------------------------
M4I - Manutenção Industrial
e-mail: geral@m4i.pt

Jorge_Gomes
Curioso
Curioso
Mensagens: 5
Registado: 20 dez 2012, 20:38

Re: Duty-cycle

Mensagem por Jorge_Gomes » 21 dez 2012, 17:56

Boas.

O meu colega de grupo já conseguiu fazer, mas eu ainda não vi. Amanhã digo como é que ele fez.

Obrigado

BLima
Técnico Dedicado
Técnico Dedicado
Mensagens: 749
Registado: 12 jan 2008, 00:53
Profissão: Engenheiro Mecânico
Localização: Funchal
Contacto:

Re: Duty-cycle

Mensagem por BLima » 21 dez 2012, 23:52

Viva,

É sempre bom partilhar as ideias. Qual é o software que estão a usar? O que usaram como manual de estudo?

Eu uso o MikroC e estou bastante satisfeito.

Cumps,
Bruno
Atentamente,
Bruno
-------------------------------------------------------------------------------------------------------------------
M4I - Manutenção Industrial
e-mail: geral@m4i.pt

Jorge_Gomes
Curioso
Curioso
Mensagens: 5
Registado: 20 dez 2012, 20:38

Re: Duty-cycle

Mensagem por Jorge_Gomes » 23 dez 2012, 11:44

Boas,

Nós estamos a usar o MPlab e o Proteus. Como nunca usei outro não posso fazer comparações, mas estes parecem-me bem. Quanto a manuais usamos essencialmente o datasheet do PIC em questão, e os diapositivos das aulas teóricas.

Em relação ao cálculo do duty-cycle conseguimos fazê-lo apenas como uma interrupção mas, usamos uma variável para calcular o flanco descendente ou ascendente alternadamente. Usamos também um timer para que a captação tenha um tempo limite.


Cumprimentos


Jorge

BLima
Técnico Dedicado
Técnico Dedicado
Mensagens: 749
Registado: 12 jan 2008, 00:53
Profissão: Engenheiro Mecânico
Localização: Funchal
Contacto:

Re: Duty-cycle

Mensagem por BLima » 23 dez 2012, 13:33

Viva,

Ainda bem que está resolvido! Seria interessante ver os diapositivos das aulas teóricas a ver-se se aprende mais qq coisa!

Bom Natal,
Bruno
Atentamente,
Bruno
-------------------------------------------------------------------------------------------------------------------
M4I - Manutenção Industrial
e-mail: geral@m4i.pt

justme
Velha Guarda
Velha Guarda
Mensagens: 521
Registado: 26 mai 2007, 21:17

Re: Duty-cycle

Mensagem por justme » 06 jun 2013, 10:57

Decidi desenterrar este topico (apesar de o autor já ter encontrado solução) porque penso que posso contribuir para a uma alternativa á soluçao já encontrada.
Primeiro devo dizer que nunca estudei os Pic´s, conheço o 8051.

Ao verificaro o datasheet do PIC18F4520 verifiquei que este permite configurar os disparos da interrupção externa quer para o flanco ascendente quer para o descendente.
Dado isto podemos usar o seguinte mecanismo:

Apos uma interrupção pelo flanco escolhido inicialmente, digamos ascedente, dentro da ISR chamada arrancarmos um timmer para contagem do tempo e configuramos o disparo agora para o flanco oposto i.e. descendente. Quando ocurrer o segundo disparo bastara fazer a paragem do timmer e realizar o calculo do tempo decorrido.

Seguidamente teriamos a opção de calcular o tempo do outro nivel (meio ciclo)l por um processo identico ou realizar a contagem do periodo e dai subtrair o tempo do meio ciclo anterior.

Espero ter sido util.

Um abraço

chaveiro
Curioso
Curioso
Mensagens: 6
Registado: 21 abr 2013, 01:56

Re: Duty-cycle

Mensagem por chaveiro » 13 jun 2013, 01:27

O justme disse quase tudo, usar o timer.
A minha abordagem seria detetar a mudança de estado com o comparador configurado como: 'Comparator Interrupt on Output Toggle' e fazer calculos ao valor do timer no momento da interrupção do comparador.

Responder

Voltar para “Microcontroladores”