• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

vitor_neves88

PWM com interrupts

7 mensagens neste tópico

Pessoal necessito de ajuda, estou a trabalhar com o pic 18f458 e a utilizar o software PICC para criar o codigo, e pretendo criar 2 sinais PWM para controlar servos, logo necessito de estar a reenviar o sinal PWM com um periocidade de 20ms!

Para isso estava a pensar utilizar os interrupts do pic mais propriamente o int_timer2 para enviar os sinais, mas não estou a conseguir criar com a periocidade correcta!!!

Outro problema é saber se é possivel passar variaveis para dentro da função da interrupção.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pelo que vi, esse pic tem 5 saídas pwm.

nao sei s tens experiência em pics e o pwm, mas funciona assim:

utilizas o timer2 como base-tempo (rergula portanto o prescaller)

o PR2 define a condição para fazer reset ao timer, e portanto, o numero PR2 * o período do prescaller (que é tempo de cada instrução * o valor do prescaller) menos 1

no final(tal como descrito na datasheet da uC,

o periodo=[(PR2) + 1] * 4 * 1/Fosc * (TMR2 Prescale Value)

consulta a datasheet k é bastante clara.

Quanto aos argumentos para o interrupt:

não compreendo o que keres fazer com isso.

um interrupt corresponde a um salto da execução,para um certo endereco da tabela de vectores (não sei se ja alguma vez brincaste com os ISR dos pcs) sem qualquer aviso.

Portanto quando dizes passar argumentos para um interrupt, referes-te ao cpu enviar argumentos para o interrupt?

isso nao é possivel.

se te referes a seres tu, numa outra rotina, a chamar o interrupt, o melhor é utilizares um endereço estático para troca de dados.

espero ter ajudado

:)

[ ]

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

no caso da passagem de argumentos para dentro do ISR, embora não seja mto correcto usa uma variável global...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

lol, em termos de programação não se deve usar usar as variaveis globais, mas nas interrupções deve-se usar variaveis globais. Pela simples razão de se realizar o minimo de instruções possiveis. Parece que não mas a passagem de uma variavel na função, ainda são umas quantas instruções, e como  vai à pilha ainda pior.

Abraço

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

epa, que eu saiba os pics de 8/16 bits nao têm stack para passagem de argumentos como na arquitectura x86 a que todos estamos habituados.

Têm stack,sim, mas apenas para os calls/returns

nunca programei pics em C,p isso nao faco a minima ideia de como é feita a passagem de argumentos.

em termos de variáveis globais e locais nos pics,é praticamente a mesma coisa.

num pc, uma variável local é uma variável alocada no stack, abaixo do endereço de regresso. ora nos pics nao existe stack, logo nao existe o mesmo conceito de variavel. qualquer menemónicas que o compilador inclua nesse sentido, será apenas p compatibilidade com o ansi, e p detectar erros (como utilizar variáveis declaradas localmente numa funcao, e utiliza-las numa outra por lapso) uma vez que os pics têm bancos de dados que podem ser acedidos a qualquer momento. O que pode acontecer é alguma optimizacao no sentido de dar preferencia a uma funcao utilizar endereços do mesmo banco,p n ter que o mudar.

saudacoes! :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Agora um pouco fora do tema da thread...

....nunca programei pics em C....

Então eu que programas os PIC's?

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Programo-os em assembly. Nos microcontroladores,ja k ha mt pouco espaço para o código,nada melhor k sermos nos a programar em assembly, do que escrever em C,k dpx pode não ter "aquela" combinação óptima de código,k é mais facil aproximarmo-nos em assembly.

[ ]

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora