Settando i timer a mano arrivano alla velocità del cristallo ?
Domanda che non ha molto senso in quanto il clock in ingresso ai Timer è quello dell'oscillatore in uso, quarzo, rc o esterno.
Quindi se metto OCR1A = 1 ho ISR(TIMER1_COMPA_vect) ogni 0,0000000625 s ?
Se mi serve ogni 0,94 us metto OCR1A = 15 ?
@ Faccina: dai un'occhiata QUI ... la parte "calcoli con i Timer" è completamente "free"
Guglielmo
gpb01:
@ Faccina: dai un'occhiata QUI ... la parte "calcoli con i Timer" è completamente "free"Guglielmo
Grazie ma se metto 0.94 mi segna prescaler 1 con TCNTx 65520
65536 - 65520 = 16
e 16 mhz / 16 fa 1 mhz preciso
(ma si conta da 0..65535 quindi 65536 o 65535 ?)
a me serve da 0.94 us -> Hz 1.063.829,7872340425531914893617021
cmq con 15 sarebbe 1.066.666,6666666666666666666666667
quindi con un errore di Hz 2.836,8794306236666666666666666667
Il valore che ti da è IL MIGLIORE ottenibile ... non tutti i valori sono possibili inoltre considera che anche i 16MHz di clock ... non è che siano il massimo della stabilità quindi ... NON contare su temporizzazioni esatte.
Se ti servono valori con notevole precisione, devi utilizzare un oscillatore esterno (... oltre tutto anche fatto molto bene), che sia termo-stabilizzato, alimentato con un'alimentazione estremamente stabile, ecc. ecc.
Guglielmo
gpb01:
Il valore che ti da è IL MIGLIORE ottenibile ... non tutti i valori sono possibili inoltre considera che anche i 16MHz di clock ... non è che siano il massimo della stabilitàquindi ... NON contare su temporizzazioni esatte.
Se ti servono valori con notevole precisione, devi utilizzare un oscillatore esterno (... oltre tutto anche fatto molto bene), che sia termo-stabilizzato, alimentato con un'alimentazione estremamente stabile, ecc. ecc.
Guglielmo
Sto provando ad uscire sulla vga tutto lo schermo con un singolo colore, ho provato delle librerie già fatte e funzionano, ora stavo provando da 0... Non mi si sincronizza lo schermo, esce dalla modalità idle ma rimane tutto nero, sbaglio sicuramente coi timings ma non ho un oscilloscopio per controllare
#define nop __asm__("nop\n\t");
void setup()
{
// set pins 8..13 as output...
DDRB = B00000111;
PORTB = B00000011; // 10 rgb 9 vsync 8 hsync
}
void linea()
{
// HSYNC low
PORTB ^= B00000001; // HSYNC
// pausa 3.77 us
delayMicroseconds(3);
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
nop;nop;
// HSYNC high
PORTB ^= B00000001; // HSYNC
// pusa 1.89 us
delayMicroseconds(1);
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;
// RGB high
PORTB ^= B00000100; // RGB
// pausa 25.17 us
delayMicroseconds(25);
nop;nop;
// RGB low ( qui ci sarebbe da clokkare i 640 px)
PORTB ^= B00000100; // RGB
// pausa 0.94 us
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;
// ???
}
void loop()
{
// VSYNC low
PORTB ^= B00000010; // VSYNC
// pausa 64 us
delayMicroseconds(64);
// VSYNC high
PORTB ^= B00000010; // VSYNC
// pausa 1.02 ms
delayMicroseconds(1020);
// loppare linea 480 volte
for (int i = 0; i < 480; i++)
{
linea();
}
// pausa 0.35 ms
delayMicroseconds(350);
}
Faccina:
... non ho un oscilloscopio per controllare
... la vedo dura fare certe cose senza un minimo di strumentazione di base per chi si addentra in certi settori ...
Guglielmo