Jump to content

PWM com interrupts


Recommended Posts

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.

Link to comment
Share on other 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

🙂

[ ]

Link to comment
Share on other 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

Link to comment
Share on other 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! 😛

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.