www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PWM Signal auswerten


Autor: Gertrud_H (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

steh gerade voll auf dem Schlauch bei einem PWM Eingangssignal.

Ich habe einen C164 und mache das über die CAPCOM Einheit.

Die Frequenz des PWM Signals liegt bei ca. 5KHz.

Es läuft ein Timer 8 (einfach von 0x0000 bis 0xFFFF).

Mein Signal ist so aufgelegt, daß die positive Flanke am CC18 liegt und 
somit einen Interrupt auslösen kann wenn diese kommt.

Die negative liegt am CC19.

Ich muß die Impuls/Pausenzeit bestimmen und mache das letztlich damit, 
daß ich die Zählerstände vergleiche, bzw. voneinander abziehe.

Soweit so gut, aber das Problem ist das Synchronisationsproblem am 
Anfang.

Ich berechne alles bei der negativen Flanke und somit im CC19 Interrupt.

Hier besorg ich mir den Zählwert (CC19_Altwert) um beim nächsten CC19 
Interrupt die Periodendauer zu bestimmen.

Allerdings spielt es ja nun eine Rolle, ob das Signal vor dem CC19 "0" 
war oder "1" war. Ich krieg es einfach nicht gebacken diese 
Synchronisierung zu programmieren.

Wäre toll wenn mir jemand ein paar Denkanstöße liefern könnte. 
Herzlichen Dank an euch schon mal.

Gruß
Gertrud

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Mein Signal ist so aufgelegt, daß die positive Flanke am CC18 liegt und
> somit einen Interrupt auslösen kann wenn diese kommt.
> Die negative liegt am CC19.
Cool, du kannst von 1 Signal die Flanken trennen?  ;-)

> ob das Signal vor dem CC19 "0" war oder "1" war.
Wenn CC19 auf die fallende Flanke trggert, dann wird das Signal vorher 
wohl oder übel '1' gewesen und jetzt '0' sein . Denn eine fallende 
Flanke zeichnet sich ja durch einen Übergang von 1 nach 0 aus...   :-o

Und was funktioniert jetzt nicht?
Die Synchronisation ist auf jeden Fall totsimpel: einfach im ersten CC19 
Interrupt den alten CC19 Wert nicht auswerten, sondern erst ab dem 
zweiten CC19 Int.

Zieg doch einfach mal deinen Code, dann kann dir besser geholfen werden.

Autor: Gertrud_H (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich schnalls nicht....

Hier mein CC18 und CC19

void CC2_viIsrCC18(void) interrupt CC18INT
{
  
if(z==0)
sync++;

}

void CC2_viIsrCC19(void) interrupt CC19INT
{
  

if (sync==1) 
  
  {
  CC19Alt=CC19;
  z=1;
  sync++;
  }

else
{
Impulsdauer=CC19-CC18;
Periodendauer=CC19-CC19Alt;
CC19Alt=CC19;
}

Das funktioniert zumindest fuer den Fall, daß die positive Flanke zuerst 
kommt. Wenn jetzt allerdings die negative zuerst kommt, dann Habe ich 
keinen CC18 Wert und auch keinen CC19Alt wert...

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Wenn jetzt allerdings die negative zuerst kommt, dann Habe ich
>keinen CC18 Wert und auch keinen CC19Alt wert...

Solche Fälle muss man halt durch geeignete Massnahmen im Programm
abfangen;)

Autor: Gertrud_H (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achso ja klar....!!!! Man muß natürlich eine Maßnahme treffen...Daß ich 
da nicht gleich darauf gekommen bin

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.