Forum: Compiler & IDEs Duty Cycle berechnen


von Nina (Gast)


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!

von Rolf Magnus (Gast)


Lesenswert?

Am genauesten wird's mit input capture gehen, sofern dein geheimer 
Prozessor sowas kann.

von Nina (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.