Salve ho una scheda Arduino UNO rev 3. Se faccio in modo che un pin digitale emetta un'onda quadra, qual è la frequenza massima che si può raggiungere?
F_CPU sfruttando il pin CLK0, impotando il relativo fuse bit.
digitalWrite impiega 5/6us per ogni cambio di stato, quindi tu ne devi fare 2 e allora siamo già sui 11/12us, il pwm sarà generato da un ciclo che richiede almeno 2clock se infinito, 2clock corrispondono a (1/16000000)*2 = 0.12us.
Quindi irrilevante, ora facciamo 1/0.000012 che fa 83333hz ovvero 83khz.
Se invece usi direttamente la porta impieghi circa 0.5us a impulso che per due fa 1us + i 0.12 fa 1.12 facciamo
1/0.0000015 fa 666666hz ovvero 666khz
penso che se guardi il datasheet puoi usare il pwm hardware che va sicuramente più veloce.
tommasomichelutti:
Salve
Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento se non lo hai già fatto: Regolamento
Qui una serie di link utili, non inerenti al tuo problema:
- qui una serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections
- qui le pinout delle varie schede by xxxPighi: Pinout
- qui una serie di link generali utili: Link Utili
Grazie delle risposte, mi sono presentato nella sezione apposita. Riguardo alla mia domanda purtroppo dovrei raggiungere frequenze intorno agli 800 KHz, se non è possibile utilizzerò altri metodi!
Arrivi al massimo a 10 volte quella frequenza con il PWM impostato in modalità CTC.
F_IO=F_CPU/(2N(1+OCRnA))
F_CPU = 16MHz
N = prescaler, puoi lasciarlo ad 1
OCRnA = livello di azzeramento del timer, per frequenze alte tendi a 0
Come vedi 800kHz si raggiungono con sufficiente semplicità.
Uso da poco arduino e non conoscevo questa possibilità quindi mi potete spiegare come posso far emettere ad un pin un'onda quadra intorno agli 800 KHz. Che codice devo scrivere a grandi linee?
Cavoli non è semplice per un novizio trovarsi davanti ai registri di un AVR. Puoi leggere questo.
Grazie ![]()