Hi, PICture,
danke. Schön, wenn man nicht zu tun braucht, was man (eigentlich) nicht kann. Ich hatte mir schon vor einiger Zeit ein Rechteck gemacht mit meinem 20MHz-m168. Meine kleinste Zeiteinheit für die aktuellen Projektchen sind 50 µs.
Code:
ISR(TIMER2_COMPA_vect) // Vektor 7 (8)
{
if (Izeit_1 < Izthrznt) //Interrupt-Timer = 20 000 ... (1 sec blink)
{
PORTC ^= (1<<PC4); // LED auf PC4/I2C/SCL toggeln
Izeit_1 ++; // war: alle drei Sekunden wird 60000 erreicht
} // und Izeit_1 bleibt in der uint16-Grenze
else
. . .
. . .
// =================================================================================
// === Initialisierung fuer Timer2 mega168 ========================================
void TC2TMR_init(void) // Init Tmr/Cntr 2, 8-Bit auf 20 kHz = 50 µs
{
TCCR2A |= (1<<WGM21); // Timer im CTC-Mode, Top=OCR2A doc S 157
TCCR2B |= (1<<CS21); // Prescaler 1/8 / Clock <- CPU doc S 158
OCR2A = 124; // Preset 125 für 50µs bei 20Mhz
TIMSK2 |= (1<<OCIE2A); // Tmr/Cntr2 CompareA interrupt enabled
}
// =================================================================================
Das sieht dann am Controllerausgang so aus (2V + 10µs / div), Controller mit 5,17 V.
..................Bild hier
Damit habe ich meinen Bezugswert (ok, einschließlich Quarztoleranz und allen augenoptischen Toleranzen).
Beinahe hätte ich es vergessen: der Korrekturfaktor oben ist recht genau 1/0,95, beim eingebauten Calibrator mit 1 kHz sind es bei 0,1ms/DIV 1/0,96, beim 1MHz-Signal aus dem Calibrator aber schon 1/0,86 - 0,1µs/DIV. Trotz Allem, darüber sollte ich nicht mehr nachdenken *ggggg*.
Lesezeichen