collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: tutorial de pwm em avr  (Lida 4205 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline LuísR.A.

  • Mini Robot
  • *
  • Mensagens: 1.224
    • Clube de Robotica
tutorial de pwm em avr
« 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

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

« Última modificação: 31 de Dezembro de 2012, 00:13 por LuísR.A. »
Tiva MCU é que é.

Tutoriais Tiva+codigos exemplo:
https://sites.google.com/site/luiselectronicprojects/

Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: tutorial de pwm em avr
« Responder #1 em: 31 de Dezembro de 2012, 01:07 »
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=50106

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

Cumps.

Offline LuísR.A.

  • Mini Robot
  • *
  • Mensagens: 1.224
    • Clube de Robotica
Re: tutorial de pwm em avr
« Responder #2 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
« Última modificação: 31 de Dezembro de 2012, 20:01 por LuísR.A. »
Tiva MCU é que é.

Tutoriais Tiva+codigos exemplo:
https://sites.google.com/site/luiselectronicprojects/

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: tutorial de pwm em avr
« Responder #3 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

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.
Avr fanboy

Offline LuísR.A.

  • Mini Robot
  • *
  • Mensagens: 1.224
    • Clube de Robotica
Re: tutorial de pwm em avr
« Responder #4 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
Tiva MCU é que é.

Tutoriais Tiva+codigos exemplo:
https://sites.google.com/site/luiselectronicprojects/

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: tutorial de pwm em avr
« Responder #5 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.
Avr fanboy

Offline LuísR.A.

  • Mini Robot
  • *
  • Mensagens: 1.224
    • Clube de Robotica
Re: tutorial de pwm em avr
« Responder #6 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
« Última modificação: 01 de Janeiro de 2013, 00:24 por LuísR.A. »
Tiva MCU é que é.

Tutoriais Tiva+codigos exemplo:
https://sites.google.com/site/luiselectronicprojects/

Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: tutorial de pwm em avr
« Responder #7 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!
« Última modificação: 01 de Janeiro de 2013, 21:43 por rglove »

Offline iyahdub

  • Mini Robot
  • *
  • Mensagens: 280
Re: tutorial de pwm em avr
« Responder #8 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

ps-Desculpen a falta de pontuacao, mas vivo no estrangeiro e os teclados sao xenofobos !!