Duty-cycle
-
- Faça a sua apresentação
- Mensagens: 5
- Registado: 20 dez 2012, 20:38
Duty-cycle
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á
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á
-
- Técnico Dedicado
- Mensagens: 754
- Registado: 12 jan 2008, 00:53
- Localização: Funchal
- Has thanked: 17 times
- Been thanked: 14 times
- Contacto:
Re: Duty-cycle
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
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
Bruno
-------------------------------------------------------------------------------------------------------------------
M4I - Manutenção Industrial
e-mail: geral@m4i.pt
-
- Faça a sua apresentação
- Mensagens: 5
- Registado: 20 dez 2012, 20:38
Re: Duty-cycle
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
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
-
- Técnico Dedicado
- Mensagens: 754
- Registado: 12 jan 2008, 00:53
- Localização: Funchal
- Has thanked: 17 times
- Been thanked: 14 times
- Contacto:
Re: Duty-cycle
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
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
Bruno
-------------------------------------------------------------------------------------------------------------------
M4I - Manutenção Industrial
e-mail: geral@m4i.pt
-
- Faça a sua apresentação
- Mensagens: 5
- Registado: 20 dez 2012, 20:38
Re: Duty-cycle
Boas.
O meu colega de grupo já conseguiu fazer, mas eu ainda não vi. Amanhã digo como é que ele fez.
Obrigado
O meu colega de grupo já conseguiu fazer, mas eu ainda não vi. Amanhã digo como é que ele fez.
Obrigado
-
- Técnico Dedicado
- Mensagens: 754
- Registado: 12 jan 2008, 00:53
- Localização: Funchal
- Has thanked: 17 times
- Been thanked: 14 times
- Contacto:
Re: Duty-cycle
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
É 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
Bruno
-------------------------------------------------------------------------------------------------------------------
M4I - Manutenção Industrial
e-mail: geral@m4i.pt
-
- Faça a sua apresentação
- Mensagens: 5
- Registado: 20 dez 2012, 20:38
Re: Duty-cycle
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
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
-
- Técnico Dedicado
- Mensagens: 754
- Registado: 12 jan 2008, 00:53
- Localização: Funchal
- Has thanked: 17 times
- Been thanked: 14 times
- Contacto:
Re: Duty-cycle
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
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
Bruno
-------------------------------------------------------------------------------------------------------------------
M4I - Manutenção Industrial
e-mail: geral@m4i.pt
Re: Duty-cycle
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
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
Re: Duty-cycle
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.
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.