Forum: Mikrocontroller und Digitale Elektronik Phasenverschiebung fuer PWM-Signal


von Vladimir (Gast)


Lesenswert?

Hallo alle

ich brauche ein Phaseverschiebung fuer ein PWM- Signal. Wenn ich ganz
einfach nach der Initialisierung PWM am Pin RC2 und anschlissend re-
transmitte ich dass Signal an PORTB mit einem delay, so wie.. zB:

    call delay
   movf PORTC, W
    andlw 0x04
   movwf PORTB

dann bekomme am PORTC ich ein PWM-Signal mit etwa unterschiedlichen
Takverhaelniss. Also, ein Phaseverschiebung macht er nicht.

Wie soll ich ein sauberes Phasevershiebung umg. 1/2 Periode
programmieren ?

Wer eine Idee hat bitte meldet.

Danke

von Arno H. (Gast)


Lesenswert?

Mit einem Inverter?
Arno

von Hubert.G (Gast)


Lesenswert?

Nachdem du weist wie lang eine Periode ist (Zeit) startest du auf PortB
nach der halben Perioden und beendest nach der ganzen wieder, du
brauchst nur einen Timer dazu.

von Vladimir (Gast)


Lesenswert?

Arno,

ein Inverter- waere zu einfach- er macht nur die ganze Periode, also
180 grad, weil ich brauche nur 90 grad (oder weniger) ; ich habe es
schon am Anfang ueberprueft :).

Hubert,

ist umgf. was ich auch tuhe. Ich starte mit einem delay, dann gebe aus
auf PORTB. OK, ich vergesse dass ganze rechtzeitig zu beenden...
Also, wenn ich zB. Timer0 wahle (Timer2 ist besetz bei PWM) da muss
ich ihm nur eine richtige Zahl uebergeben, die zu meine Periode passt.
Ist dass richtig ?

von Hubert.G (Gast)


Lesenswert?

Genau so hätte ich mir das vorgestellt. Machst du beim Start tatsächlich
ein delay? also eine Warteschleife? Ich würde bereits mit dem Timer
starten, halber Wert der Periode.

von Simon K. (simon) Benutzerseite


Lesenswert?

Hm?

Steigende Flanke altes Signal erkannt
delay
Steigende Flanke neues Signal ausgeben
...Periode vergeht
Fallende Flanke altes Signal erkannt
gleicher delay
Fallende Flanke neues Signal ausgeben
...Bis zum nächsten mal

Wo is das Problem?

von Vladimir (Gast)


Lesenswert?

und villeicht noch eine dumme Frage. Wenn ich in meinem Programm mehrere
Interrupts implementiere (fur PIC1687xx, zB.), wie soll ich es tuhn ?
In Interrupt Service Routine  Bits in Register INTCON abfragen ?
Gibt's vielleicht eine elegantere Metode - in Datenblatt es ist
leider slcleht geschrieben.

von Vladimir (Gast)


Lesenswert?

Hubert,
ich starte, ja, mit eine Warteschlefe, aber Timer ist wahrsheinlich
besser.

Simon,

um die Flanken zu erkennen baruche ich zuerst ein Interrupt, oder ?
Ich habe nicht viell PIns zu Verfügung am PIC 16f187xx: nur RC2 ;
wenn ich PWM mache da ist RC2 schon als Output comfiguriert

von Hubert.G (Gast)


Lesenswert?

Bei einer Warteschleife steht ja alles andere auch.
MÖglichkeiten zum realisieren gibt es sicher eine Menge.
In der Hauptschleife pollen wann RC2 gesetzt wird oder noch besser beim
setzen von RC2, Timer mit halben Wert von RC2 laden und starten, wenn
der Timer abgelaufen ist PortB setzen, Timer mit ganzen Wert laden,
starten, wenn abgelaufen PortB zurücksetzen. Da braucht du nur den
Interrupt von Timer0.

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.