Duty Cycle berechnen

Gast #2150630
Lesenswert?

Hallo! Hoffe, ich bin hier richtig.

Ich habe ein Programm geschrieben, mit dem ich die Pulse und auch die 
Periode eines PWM-Signals (von einem SMT160-Temperatursensor) messen 
kann. Ich habe das mit einem Counter realisiert. Es funktioniert auch 
ziemlich gut, nur frage ich mich, ob ich vielleicht einige wenige (viele 
können es nicht sein, da die Temperatur schon recht genau ist) Takte 
irgendwie verliere, z.B. beim Wechsel in die while-Schleife, oder ob das 
wirklich alle sind, die ich da zähle.

if (atoi(argval[1]) == 1)
  {
    PORTC |= (1<<PC3);
    cli();
    loop_until_bit_is_clear(PIND,PD2);
    loop_until_bit_is_set(PIND,PD2);
    while( (PIND & (1<<PD2)) )
    {
    flankep++;  //hochzählen so lange positive flanke
    }
    while( !(PIND & (1<<PD2)) )
    {
    flanken++; //hochzählen solange negative flanke
    }
    sei();
    periode = flankep + flanken;

    sprintf(zeichenpuffer, "%s: P %u N %u T %u", "\n\rAN", flankep, 
flanken, periode);
  } else {
    PORTC &= ~(1<<PC3);
    strcpy(zeichenpuffer, "\n\r AUS");
  }

Hat jemand vielleicht noch eine bessere/genauere/schlauere Lösung dazu?

Würd mich freuen!
Gast #2150684
Lesenswert?

ah sorry! ich benutz einen atmega 168! der kann sowas, ja, aber ich hab 
die funktion noch nicht so ganz durchblickt. wenn du also dafür nen 
verständliches beispiel hast, wärs cool. die beispiele, die ich bisher 
zum input capture gefunden habe, haben mir noch nicht so geholfen, aber 
ich bin da noch dran.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren