- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 4 von 4

Thema: externen timer auslesen (74hc193) und differenz berrechnen

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    19.03.2011
    Ort
    Berlin Moabit
    Beiträge
    14

    externen timer auslesen (74hc193) und differenz berrechnen

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo!

    Ich habe einen 4bit up/dwn timer an einen Port des Atmega angeschlossen.
    Der Timer wird mit 1Khz ausgelesen. Als return möchte ich die differenz als int8_t
    von -8 bis +8.
    Zudem soll der Code, aufgrund der hohen Frequenz, effizient sein!

    So funktionierts schonmal... aber da kann man sicher mächtig optimieren!
    Jemand nen Tipp??? Viele Dank!
    Code:
    ISR, 1Khz {
    static int old;                // alter Zählerstand
    int new, dir, diff;
    
    new = PINC & 0x0F;        // neuer Zählerstand, 4 bit ausmaskiert
    
    if (new > old) {
       diff = new - old;
       dir = 1;
    }
    else {
       diff = old - new;
       dir = -1;
    }
    
    if (diff > 8) {
       diff = (16 - diff);
       dir *= -1;
    }
    
    diff *= dir;
    
    old = new;
    return diff;
    }
    Geändert von TomSawer (19.03.2011 um 15:56 Uhr)

  2. #2
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Eines vorweg:
    Code:
    ISR, 1Khz {
    ...
    return diff;
    }
    Hä???


    Nun zum Optimieren:

    Code:
    static int old;                // alter Zählerstand
    int new, dir, diff;
    Warum sind das alles 16-Bit-Variablen, wo du doch nur mit 4 Bit rechnest und du im Text sogar explizit die 8-Bit-Variante int8_t erwähnst?


    Code:
    if (new > old) {
       diff = new - old;
       dir = 1;
    }
    else {
       diff = old - new;
       dir = -1;
    }
    
    if (diff > 8) {
       diff = (16 - diff);
       dir *= -1;
    }
    
    diff *= dir;
    Das würde ich so schreiben:
    Code:
    diff = new - old;
    if (diff > 8)
        diff -= 16;
    if (diff < -8)
        diff += 16;
    MfG
    Stefan

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    19.03.2011
    Ort
    Berlin Moabit
    Beiträge
    14
    oooopsieeee... 2 mal geposted!

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    19.03.2011
    Ort
    Berlin Moabit
    Beiträge
    14
    Super Danke Stefan!

    Hatte nur in meinem Beitrag int geschrieben. Weiß nicht warum.
    in meinem Program war natürlich alles int8_t!

    Macht man solche "Kürzungen" auch mit boolscher algebra oder mit scharfem Verstand und Erfahrung?

    Schöne Woche! Tom

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress