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: Gerar sinal com Arduino  (Lida 12873 vezes)

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

Offline SJD22

  • Mini Robot
  • *
  • Mensagens: 660
Gerar sinal com Arduino
« em: 04 de Abril de 2011, 20:40 »
Boa noite,

Com um arduino, é possível gerar um sinal com frequência de 1 MHz, correcto?

O que eu queria era gerar um conjunto de impulsos (110011001100110011 por exemplo) onde cada bit dura 1us (1 microsegundo).

Uso a saida de PWM do arduino, certo? Mas consigo essa duração de impulso?

Obrigado

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Gerar sinal com Arduino
« Responder #1 em: 04 de Abril de 2011, 20:52 »
O pwm mais rápido que podes fazer é usando um timer de 8 bits, e a 16Mhz a frequência máxima é de 16Mhz/256 = 62,5Khz.
Se pensares que o teu micro corre a 16Mhz, 1Mhz dá-te no máximo 16 instruções, se fores de um ciclo, se for um branch demora 2 ciclos, logo é algo impossivel em C, e mesmo em assembly é muito complicado.
Avr fanboy

Offline SJD22

  • Mini Robot
  • *
  • Mensagens: 660
Re: Gerar sinal com Arduino
« Responder #2 em: 04 de Abril de 2011, 21:20 »
Portanto, estou agarrado!

Como posso gerar um sinal desses entao?

Offline microbyte

  • Mini Robot
  • *
  • Mensagens: 1.322
    • http://ricardo-dias.com/
Re: Gerar sinal com Arduino
« Responder #3 em: 04 de Abril de 2011, 21:31 »
Essa frequência que falaste é fixa, ou queres que seja regulável?

É que para gerar frequências costuma usar-se um 555.

Offline SJD22

  • Mini Robot
  • *
  • Mensagens: 660
Re: Gerar sinal com Arduino
« Responder #4 em: 04 de Abril de 2011, 21:35 »
É fixa, os bits duram sempre 1us.

Mas eu queria, por programação, dizer que trama escrever e com um 555 tinha de ter sempre a mesma sequência.

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Gerar sinal com Arduino
« Responder #5 em: 04 de Abril de 2011, 21:55 »
1Mhz não é assim uma coisa super comum, já é uma frequência relativamente elevada.
Qual é o uso final?
Avr fanboy

Offline SJD22

  • Mini Robot
  • *
  • Mensagens: 660
Re: Gerar sinal com Arduino
« Responder #6 em: 05 de Abril de 2011, 16:10 »
O uso final era só mesmo ver o sinal no osciloscópio USB que comprei :) Sendo assim tenho de gerar sinais mais baixos.

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Gerar sinal com Arduino
« Responder #7 em: 05 de Abril de 2011, 17:57 »
Se quiseres um simples 01010101, podes fazer, agora sinais mais complexos não dá.
Avr fanboy

Offline SJD22

  • Mini Robot
  • *
  • Mensagens: 660
Re: Gerar sinal com Arduino
« Responder #8 em: 05 de Abril de 2011, 18:50 »
Pois... mas fazer com que esses impulsos durem 1us nunca dá... :(

Offline SJD22

  • Mini Robot
  • *
  • Mensagens: 660
Re: Gerar sinal com Arduino
« Responder #9 em: 05 de Abril de 2011, 18:51 »
Com um 555 consegue-se de alguma forma definir a trama que pretendemos?

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Gerar sinal com Arduino
« Responder #10 em: 05 de Abril de 2011, 18:54 »
Dá sim, é uma questão de usar acesso directo aos portos e fazer toogle dos pins escrevendo no registo PINx, assim fazes toggle num ciclo de relógio, como disse para fazer 10101010101, dá para fazer a mais de 1Mhz até.
Avr fanboy

StarRider

  • Visitante
Re: Gerar sinal com Arduino
« Responder #11 em: 05 de Abril de 2011, 19:04 »
Boas,

Se a finalidade é criar uma onda em quadratura fixa não existe necessidade de recorrer à modulação, por isso usar PWM é overkill. PWM serve, tal como o nome indica, quando se pretende modular o comprimento da onda e quando existe um ciclo de trabalho (duty clice) que pode/deve ser ajustado.

Ora, nos AVR podes usar o OCR (output compara register) para alternar o estado de um pino IO (pino correspondente ao timer que estiveres a usar).

Para obteres o efeito desejado, quer com um timer de 8 ou 16 bits e com 16Mhz de clock, basta configurar o timer com um prescaler de 1 e o OC output mode = toogle, o que em termos de registos dá:

TCCR0 = 0x00;  // stop
TCNT0 = 0xF0;  // valor inicial do timer 0 counter
OCR0   = 0x10;  // valor do comparador
TCCR0 = 0x11;  // iniciar timer, OC0 mode=toogle

Entre cada pulso tens 16 ciclos mas como a manipulação da porta IO é feita em wardware, transparente para o código e não gera interrupts, podes correr qualquer código no AVR sem grandes problemas.

Só uma nota em termos de PWM, o máximo para um clock de 16Mhz é de 31Khz para um PWM com correcção de fase, que é o que normalmente se usa.

Abraços,
PA
« Última modificação: 05 de Abril de 2011, 19:06 por StarRider »

Offline SJD22

  • Mini Robot
  • *
  • Mensagens: 660
Re: Gerar sinal com Arduino
« Responder #12 em: 05 de Abril de 2011, 21:03 »
Bom, já consegui meter o meu arduino mega 2560 e mandar bits com 1us de duração. Código:

  digitalWrite(13, HIGH);
  delayMicroseconds(1);
  digitalWrite(13, LOW);
  delayMicroseconds(20);

Agora quero ir mais longe... quero ligar esse pino a outro arduino para ler esses mesmos bits.

Sugestões? No fundo é estar sempre a ler o estado da porta...

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Gerar sinal com Arduino
« Responder #13 em: 05 de Abril de 2011, 21:38 »
Tens a certeza disso?
É que um digitalWrite demora uns 40 ciclos de relógio.
Avr fanboy

Offline SJD22

  • Mini Robot
  • *
  • Mensagens: 660
Re: Gerar sinal com Arduino
« Responder #14 em: 05 de Abril de 2011, 21:54 »
Ou seja, o digitalWrite demora 2,5us (1/16000000 * 40)...

Pois... o osciloscopio diz mais ou menos o mesmo... :)