Phasenverschiebung fuer PWM-Signal

Gast #278062
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
Gast #278065
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 ?
Gast #278068
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.
Gast #278069
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
Gast #278070
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.

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