Generatore onda quadrata con arduino

Salve a tutti vorrei costruire un generatore di onda quadrata come posso fare? evitiamo questo

 digitalWrite(led, HIGH);  
  delay(1);           
  digitalWrite(led, LOW);   
  delay(1);

grazie

Con una cosa del genere:

http://www.ad7c.com/projects/ad9850-dds-vfo/

hai anche la sinusoidale.

Ci sono anche metodi più semplici, ma quel cosino costa poco.

qualcosa di piu semplice che programmo e mi da la frequenza che voglio. non esiste un istruzione semplice

Se non devi variare il duty-cycle ... guarda l'istruzione tone() ;)

Guglielmo

gpb01: Se non devi variare il duty-cycle ... guarda l'istruzione tone() ;)

Meglio ancora se usa il timer a 16 bit come generatore PWM, ottiene un onda quadra perfetta, volendo anche con duty variabile, in un ampio range di frequenze il tutto senza impegnare tempo CPU.

@Astro: ... mi ero adeguato a "... qualcosa di più semplice ..." ]:D ]:D ]:D

Guglielmo

come faccio a modificare la frequnza pwm

danyevo: come faccio a modificare la frequnza pwm

http://playground.arduino.cc/Code/PwmFrequency

Buongiorna a tutti o deciso di procedere con la libreria TimerOne.h, con questo codice

 #include "TimerOne.h"
     
    void setup()
    {
      pinMode(10, OUTPUT);
      Timer1.initialize(10000);         // initialize timer1, and set a 1/2 second period
      Timer1.pwm(9, 512);                // setup pwm on pin 9, 50% duty cycle
      Timer1.attachInterrupt(callback);  // attaches callback() as a timer overflow interrupt
    }
     
    void callback()
    {
      digitalWrite(10, digitalRead(10) ^ 1);
    }
     
    void loop()
    {
    
    }

non capisco alcune cose con questo modifico il timer : Timer1.initialize(10000); questo lo lascio per avere l'onda quadra: Timer1.pwm(10, 512); questo a che serve: Timer1.attachInterrupt(callback); e perche devo srivere così: digitalWrite(10, digitalRead(10) ^ 1);

altre 2 cose come faccio a sapere la frequenza che mi viene fuori? modificando il timer interno, cosa succede a tutto il resto del programma va piu veloce o piu lento Grazie

Quelle istruzioni servono ad attaccare un interrupt all'overflow del contatore del timer 1. Quando viene chiamata la ISR per gestire l'interrupt semplicemente viene alternato lo stato del pin facendo lo XOR dell'attuale stato.

Avrei bisogno di generare un onda quadra con frequenza variabile da 10Hz a 500Kz. Con la funzione tone sarebbe possibile?

zanspace:
Avrei bisogno di generare un onda quadra con frequenza variabile da 10Hz a 500Kz.
Con la funzione tone sarebbe possibile?

No … e forse non te ne sei accorto, ma il post e’ vecchio di 5 anni, dovresti per cortesia, nel rispetto del regolamento, aprire un nuovo thread, grazie :wink:

Inoltre, sempre da regolamento, prima che un mod ti “sgridi” per non averlo fatto, presentati nell’apposita sezione in “Generale” .