back Home http://mitschang.net - Homepage von Jonas Mitschang

AVR timing library

Dies ist meine Timing-Library für Atmel ATmega Mikrocontroller. Die Lib habe ich schon in vielen Projekten (CAN-MMC-Datenlogger für das Formula Student Team KaRaT der TU Kaiserslautern, Beschleunigungssensoren Verarbeitung für das Fraunhofer IESE, Ansteuerung von 20 Lasern mit Software-PWM für eine medizinische Anwendung, Kleiner Laser Scanner mit zwei Spiegeln) auf verschiedenen Mikrocontrollern (ATmega8, ATmega128, AT90CAN128) problemlos verwendet.

Dokumentation

Dokumentation kommt noch - Sourcecode ist die zuverlässigste Dokumentation!
Nur soviel: die externe Variable runtime vom Typ TIME enthält die vergangene Zeit seit Systemstart in ticks. Ticks pro Sekunde ist in HZ definiert. Umrechnungen zwischen TIME und Sekunden geschieht mit folgenden Funktionen und Macros:
Periodische Tasks definieren: Jeder Task belegt nur 4 Byte RAM (nämlich ein static TIME)

Download

runtime.c/h

Beispiel

Beispiel code (main.c):
#include "runtime.h"

    void main(void) {
        // initialize runtime module
        runtime_init();

        PORTA |= 1;                  // LED an
        runtime_delay_ms(100);      // 100ms delay
        PORTA &= ~1;                 // LED aus

        while (1) {
            // update runtime module
            runtime_upate();

            // howto get uptime in seconds:
            int uptime = tick2sec(runtime);

            // toggle LED every second
            PERIODIC_TASK(SEC2TICK(1), PORTA ^= 1 );

            // call a function twice a second
            PERIODIC_TASK(MS2TICK(500), foo() );

            // update software pwm module
            PERIDOC_TASK(US2TICK(100), pwm_update() );
        }
    }
    

home Valid XHTML 1.0 Strict Valid CSS! UTF-8 Encoded Coffee powered Debian powered CAcert assurer