Last active
April 4, 2020 20:02
-
-
Save valerionew/c533c5911c05ecc0508650c154c3ed96 to your computer and use it in GitHub Desktop.
Generatore di onda quadra a 1MHz per Arduino Uno, basato su timer1
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Generatore di onda quadra a 1MHz per Arduino Uno, basato su timer1 | |
Valerio Nappi - 04-04-2020 | |
Impostiamo di seguito il timer1 di arduino (sul quale fa affidamento la libreria servo, | |
quindi rompendo la compatibilità con quella libreria). | |
Il timer1 è un contatore a 16 bit che conserva il suo valore nel registro TCNT1 (Time CouNnT timer1). | |
Lo impostiamo in modo che una volta raggiunta una certa soglia (conservata in OCR1A - Output Compare Register timer1 channel A) | |
inverta il valore logico del pin speciale OC1A (Output Compare timer1 channel A), mappato sul pin 9 di arduino. | |
Quando TCNT1 = OCR1A il timer assegna pin9 = not(pin9). Oltre a questo, resetta TCNT1 a 0, in un'operazione | |
chiamata CTC (Clear Timer on Compare match). | |
OCR1A conterà quindi 8 (da 0 a 7) colpi di timer (il prescaler è 1, quindi va a 16 MHz come la cpu). | |
In questo modo, divide per 8 la frequenza di clock -> otteniamo 2MHz. | |
Non dobbiamo dimenticarci che 2 MHz è la frequenza di inversione del segnale, la frequenza dell'onda | |
quadra generata è la metà: 1 MHz | |
*/ | |
void setup() { | |
TCNT1 = 0x00; // inizializzo il timer a 0 (lo svuoto) | |
OCR1A = 0x07; // al raggiungimento del valore 7 facciamo toggle del pin | |
TCCR1A = (1<<COM1A0); // impostiamo toggle di OC1A (PB1 o pin 9 di arduino) | |
TCCR1B = (1<<CS10); // impostiamo il prescaler = 1 | |
TCCR1B |= (1<<WGM12); // Clear on Timer Compare match - resetta TCNT1 quando TCNT1 = OCR1A e toggla OC1A | |
DDRB |= (1<<DDB1); // imposta il pin 9 (PB1) come output | |
} | |
void loop() { | |
// put your main code here, to run repeatedly: | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment