LusoRobótica - Robótica em Português

Robótica => Iniciantes => Tópico iniciado por: LuísR.A. em 31 de Dezembro de 2012, 00:05

Título: tutorial de pwm em avr
Enviado por: LuísR.A. em 31 de Dezembro de 2012, 00:05
ainda na minha procura de como configurar os timers de pwm e entender mesmo como tudo funciona, pois não basta so saber aplicar senão temos problemas a adaptar, encontrei este tutorial que ainda não acabei de ler mas acho que é muito bom:

http://www.societyofrobots.com/member_tutorials/book/export/html/228 (http://www.societyofrobots.com/member_tutorials/book/export/html/228)

acho que ,para quem não tem ninguem para lhes ensinar sobre o tema, isto é mesmo muito bom.

Título: Re: tutorial de pwm em avr
Enviado por: rglove em 31 de Dezembro de 2012, 01:07
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=50106 (http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=50106)

Outro que tinha aqui nos favoritos e que me ajudou bastante.

Cumps.
Título: Re: tutorial de pwm em avr
Enviado por: LuísR.A. em 31 de Dezembro de 2012, 19:45
o tutorial ajudou muito a entender como funciona tudo. mas agora as notações a programar isso ja não entendo nada.
coisas como isto:

TCCR2A |= (1<<WGM20);

ta a dizer que nos 8 bits A do timer 2 que: o WGM0 do timer 2 é?
não entendo não devia ser WGM20=1?
e depois parece que isso configura logo o WGM21.

não posso configurar os 8 bits assim (números arbitrários)
00000001 (o ultimo é o WGMx0)

e depois passar para TCCRxA=0x21 (exemplo não sei se é mesmo isso a conversão)
 nesta notação que não tenho a certeza qual é, nunca tive aulas de binario nem nada

pode ser assim talvez?: TCCRxA=bx0000_0001

tou a pensar no esquema que ta nesta datasheet:http://www.atmel.com/Images/doc2586.pdf
façam CTRL+F: 11.9.2
Título: Re: tutorial de pwm em avr
Enviado por: senso em 31 de Dezembro de 2012, 22:19
Tens ai duvidas básicas..
E tambem tens tutoriais aqui no fórum, aconselho-te a ler isto:
http://lusorobotica.com/index.php?topic=2838.0 (http://lusorobotica.com/index.php?topic=2838.0)

Não podes escrever directamente por exemplo em WGM20 porque é um bit de um registo e não um registo por si, é claro que podes usar notação em binário ou hex, mas é muito mais legivel ter o nome dos bits que estás a ligar ou desligar do que olhar para um valor em hex e ter de ir abrir a datasheet e ver o que o código está a fazer.
Título: Re: tutorial de pwm em avr
Enviado por: LuísR.A. em 01 de Janeiro de 2013, 00:05
pois eu nunca trabalhei em C. so em basic. e pwm so no picaxe ainda por cima...pwm? basta escrever pwmout B.1 175,200 (arbitrario) e tinha logo configurado a frequencia e o duty no pin especifico.
e não tenho quem me ensine que o stor do clube não é de informatica e so sabe trabalhar em basic
Título: Re: tutorial de pwm em avr
Enviado por: senso em 01 de Janeiro de 2013, 00:13
Se usares um arduino fazes basicamente a mesma coisa com um analogWrite..
Mas lê esse link, mas lê tudo e com atenção.
Título: Re: tutorial de pwm em avr
Enviado por: LuísR.A. em 01 de Janeiro de 2013, 00:19
eu sei que faço o mesmo com o analogue write. mas o pwm é sempre uns 500hz, ou que é. com o analogue write só se pode alterar o duty.
eu quero configura-lo à vontade para controlar um motor. penso que 15khz era bom para para um timer de 8 bits

leio amanha quando tiver tempo e cabeça para ler tudo direitinho
Título: Re: tutorial de pwm em avr
Enviado por: rglove em 01 de Janeiro de 2013, 02:23
Sim, o senso tem uns tutoriais fixes aqui no fórum em que explica as operações binárias todas... O "|" significa "ou".
Imaginemos que tens 01001001 | 10001000.
Isto é igual a 11001001.
No tutorial do senso está muito bem explicado isto tudo... Lê com atenção.

Daí usar-se: Registo |= (1<<bit)
Isso significa que o registo=registo|(1<<bit)
O "<<" é uma operação chamado shifting (acho eu). No fundo é empurrar os bits x posições para a esquerda.

Imaginemos que tens 1<<5.
Estás a empurrar 00000001(1 em decimal) 5 posições para a esquerda, portanto fica: 00100000
Para meter o bit a 0, usa-se: registo &= ~(1<<bit)

Claro que podes configurar logo o registo todo de uma vez.

Mais uma vez, pesquisa no google também por bitwise operations e procura pelo forum avrfreaks, tem bons tutoriais.

Cumps e bom ano novo!
Título: Re: tutorial de pwm em avr
Enviado por: iyahdub em 01 de Janeiro de 2013, 07:45
o tutorial ajudou muito a entender como funciona tudo. mas agora as notações a programar isso ja não entendo nada.
coisas como isto:

TCCR2A |= (1<<WGM20);

ta a dizer que nos 8 bits A do timer 2 que: o WGM0 do timer 2 é?
não entendo não devia ser WGM20=1?
e depois parece que isso configura logo o WGM21.

não posso configurar os 8 bits assim (números arbitrários)
00000001 (o ultimo é o WGMx0)

e depois passar para TCCRxA=0x21 (exemplo não sei se é mesmo isso a conversão)
 nesta notação que não tenho a certeza qual é, nunca tive aulas de binario nem nada

pode ser assim talvez?: TCCRxA=bx0000_0001

tou a pensar no esquema que ta nesta datasheet:http://www.atmel.com/Images/doc2586.pdf
façam CTRL+F: 11.9.2

Em avr/iom328p.h ( para  o 328p, claro) encontras varias definicoes que podes usar, de forma a que seja mais pratico e mais legivel, facilitando a portabilidade do codigo, se vier a ser necessario.

por exemplo, parcialmente, diz
Código: [Seleccione]
#define TCCR2A _SFR_MEM8(0xB0)
#define WGM20 0
#define WGM21 1
#define COM2B0 4
#define COM2B1 5
#define COM2A0 6
#define COM2A1 7