// timer_set.h // Entwickelt von | Marco Schettgen | ELI05 | 06.11.2006 | // Email:mssuperman@gmx.de // // Speichern der Datei im Libraryverzeichnis. z.B: E:\WinAVR\avr\include\avr\ // Einbinden der timer_set.h mit #include in das aktuelle Projekt! z.B: #include // // Aufruf : zB: timer8(zeit in ms) (zeit ist ein Float-Wert) max: 70,83 ms | min: 0,27 µs z.B: timer8(40); für 40 ms // zB: timer16(zeit in ms) (zeit ist ein Float-Wert) max: 18,2 s | min: 0,27µs z.B: timer16(2000); für 2 sekunden // // // #include // Ein/Ausgabe/Register float steps, startf; int starti; void bit_8() { startf=255-steps; // Startwert ausrechnen starti=startf; // Startwert von Float in Int Wandeln (Ganzzahl) TCNT0 = starti; // Zähler wird auf start gesetzt loop_until_bit_is_set(TIFR,0);// warte, bis der Timer angekommen ist TIFR=Overflow Flagregister TIFR =0b00000001; // lösche Output Compare Flag (!! Löschen erfolgt durch Setzen der "1" !!) } void bit_16() { startf=65535-steps; // Startwert ausrechnen starti=startf; // Startwert von Float in Int Wandeln (Ganzzahl) TCNT1 = starti; // Zähler wird auf start gesetzt loop_until_bit_is_set(TIFR,2);// warte, bis der Timer angekommen ist TIFR=Overflow Flagregister TIFR =0b00000100; // lösche Output Compare Flag (!! Löschen erfolgt durch Setzen der "1" !!) } //------------------------------------------------------------------ //-----------------------8bit--------------------------------------- //------------------------------------------------------------------ void timer8(float time) // time in ms { if (time<0.069173177) // Kein Vorteiler { TCCR0=0b00000000; // Kein Vorteiler steps=time/0.000271; // Schritte ausrechnen bit_8(); } else if (time<0.553385417) // Vorteiler 8 { TCCR0=0b00000001; steps=time/0.002170; bit_8(); } else if (time<1.106770833) // Vorteiler 16 { TCCR0=0b00000010; steps=time/0.004340; bit_8(); } else if (time<4.427083333) // Vorteiler 64 { TCCR0=0b00000011; steps=time/0.017361; bit_8(); } else if (time<8.854166667) // Vorteiler 128 { TCCR0=0b00000100; steps=time/0.034722; bit_8(); } else if (time<70,83333333) // Vorteiler 1024 { TCCR0=0b00000101; steps=time/0.277778; bit_8(); } } //------------------------------------------------------------------ //-----------------------16bit-------------------------------------- //------------------------------------------------------------------ void timer16(float time) // time in ms { if (time<17.777507) // Kein Vorteiler { TCCR1B=0b00000000; steps=time/0.000271; bit_16(); } else if (time<142.220052) // Vorteiler 8 { TCCR1B=0b00000001; steps=time/0.002170; bit_16(); } else if (time<284.440104) // Vorteiler 16 { TCCR1B=0b00000010; steps=time/0.004340; bit_16(); } else if (time<1137.760417) // Vorteiler 64 { TCCR1B=0b00000011; steps=time/0.017361; bit_16(); } else if (time<2275.520833) // Vorteiler 128 { TCCR1B=0b00000100; steps=time/0.034722; bit_16(); } else if (time<18204.16667) // Vorteiler 1024 { TCCR1B=0b00000101; steps=time/0.277778; bit_16(); } }