Seguendo i consigli di Leo72 in questo topic:
https://forum.arduino.cc/index.php?topic=128284.15
ho voluto costruire un timer che scattasse ogni microsecondo, in modo poi che riesco a far muovere un uscita ed avere un'onda quadra che posso controllare in frequenza e ampiezza.
Forse ci sono soluzioni migliori della mia, ma come primo inizio ho voluto sperimentare quanto segue:
boolean up_dw = true; //mi dice se sale o scende
byte on, off = 0;
byte ton = 4;
byte toff = 5;
void setup() {
pinMode(4, OUTPUT);
cli();//fermo gli interrupt
TCCR0A &= ~((1 << COM0A0) | (1 << COM0A1)); //disattivi gli interrupt del timer
//modalità contatore fino all'overflow
TCCR0A &= ~((1 << WGM01) | (1 << WGM00));
TCCR0B &= ~(1 << WGM02);
//prescaler a /8
TCCR0B &= ~((1 << CS02) | (1 << CS00));
TCCR0B |= (1 << CS01);
TCNT0 = 254; //valore iniziale
TIMSK |= (1 << TOIE0); //attivo un interrutp all'overflow
sei(); //riattivo gli interrupt
//digitalWrite(4,HIGH);
}
void loop() {
if (up_dw == true) {
digitalWrite(4, HIGH);
}
else {
digitalWrite(4, LOW);
}
}
ISR (TIM0_OVF_vect) {
if (up_dw == true) {
on++;
}
if (up_dw == false) {
off++;
}
if (on == ton && up_dw == true) {
up_dw = false;
on = 0;
Se non ho fatto male i conti dovrei trovarmi in uscita sul pin 4 un onda quadra con frequenza di circa 110Khz con un Dc di circa 44%....
Non mi interessa che sia preciso...
Il calcolo che ho fatto è stato:
freq di overflow=1microSec=1/0,000001= 1MHz
a questo punto calcolo il registro:
(8000000*0,000001)/prescaler/8=1
256-1=254
Il problema è che quando provo di colmpilare mi da errore:
Arduino:1.8.9 (Windows 10), Scheda:"ATtiny25/45/85, Enabled, CPU, ATtiny85, 8 MHz (internal), EEPROM retained, B.O.D. Disabled, Enabled"
wiring.c.o (symbol from plugin): In function `__vector_5':
(.text+0x0): multiple definition of `__vector_5'
C:\Users\MAURIZ~1.SOM\AppData\Local\Temp\arduino_build_23884\sketch\Multifrequeza.ino.cpp.o (symbol from plugin):(.text+0x0): first defined here
collect2.exe: error: ld returned 1 exit status
exit status 1
Errore durante la compilazione per la scheda ATtiny25/45/85.
Dove sbaglio??????