Vediamo un po'...
Sui Tiny85 c'è libero il timer 0, che è ad 8 bit.
1 us, se non ho fatto male i conti, sono 0,000001 secondi.
Avere 78 uS dobbiamo avere una frequenza di overflow del timer di 1/0,000078=12820,50 volte al secondo.
1/12820,50=0,000078 us.
Ok sì è questo ![]()
Allora, poniamo il clock del Tiny a 8 MHz, per avere tale periodo bisogna impostare il tutto così:
(8000000*0,000078)/prescaler /8 = 78
Questo è il valore massimo che deve essere conteggiato dal timer per ottenere 1 overflow ogni 78 us, quindi avendo un contatore a 8 bit, con 256 valori, il valore da caricarci dentro è : 256-78=178
Rifacciamo i conti:
8000000/8/178=12820,5 Hz, perfetto ![]()
Prova con questo codice (richiamalo dal setup solo 1 volta):
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 = 178; //valore iniziale
TIMSK |= (1<<TOIE0); //attivo un interrutp all'overflow
sei(); //riattivo gli interrupt
Ora inserisci questa ISR per gestire l'overflow:
ISR (TIM0_OVF_vect) {
TCNT0 = 178;
....... //qui il resto del codice
}
Dove metti il resto del tuo codice.
L'ho scritto senza poterlo provare, dimmi se va.