PWM an Ausgangspin erzeugen

OP #2894531
Lesenswert?

Hallo,

ich versuch krampfhaft ein PWM Signal an einem Ausgangspin meines 
Controllers zu erzeugen.

Ich verwende einen AT89C5131 von Atmel.

Wie ich die einzelnen Pins anspreche das sie 1/0 sind habe ich 
rausgefunden.
Leider sind meine Programmierkenntnisse überschaubar.

Ich möchte dieses Signal nutzen um einen Servo anzusteuern aber das ist 
noch Zukunftsmusik.

Zuerst möchte ich einen Pin als Pwm Pin festlegen und ein Signal 
erzeugen das ich messen kann.

Mir fehlt leider die Idee wie der C51 Syntax dafür aussehen könnte.

Für eure Hilfe wäre ich dankbar.....
#2894630
Lesenswert?

Moin,

dürfte bei der Kiste das "PCA" programmable counter array erledigen.

Wenn du die Pins schon toggeln kannst, ist dir das setzen von Registern 
bekannt. Such dir in der Doku den Teil über die PCA und fütter die 
Register, insbersondere CCPAM, um die Zähler in den PWM Modus zu 
bringen.

Die Ausgangspins sind allerdings nicht frei wählbar, jeder Zähler hat 
einen festen Ausgang: CEXn, wobei n von 0 bis 4 geht.


--
 SJ
#2894650
Lesenswert?

Step Han schrieb:
> Hi,
>
> danke erstmal auch wenn mich deine Antwort erstmal überfordert hat.
>
> Meinst du mit füllen der Register, dass ich Diese dann im Quellcode über
> Interrupts aufrufen muss oder bin ich da komplett auf dem Holzweg?!

Na ja.
du wirst ja wohl schon irgendwas mit deinem µC gemacht haben, oder 
nicht?
zb eine Popel-LED eingeschaltet oder ausgeschaltet. einen Pin abgefragt. 
Irgendwas.

Dazu musstest du Werte in ein Register schreiben, bzw. ein einzelnes Bit 
gezielt in einem Register auf 1 oder 0 setzen.

Und hier sind das auch nur Register. In dem Fall dann eben 
Konfigurationsregister. Du schreibst in einem bestimmten Register ein 
bestimmtes Bit auf 1 und das bewirkt dann etwas.
Was das bewirkt steht im Datenblatt, in dem du die Beschreibung aller 
für eine bestimmte Funktionalität wichtigen Register findest. Dort 
wählst du die Funktionalität aus, die du haben willst, stellst fest 
welche Bits in welchem Register zu setzen sind und ... dann setzt du sie 
einfach in deinem Programm.
genauso wie du zum Ein/AUsschalten einer LED eben wieder anderer Bits in 
einem anderen Register gesetzt hast.
OP #2894677
Lesenswert?

Danke....

das heisst also wenn im Datenblatt steht "PWM(CCAPMn.1) enables the 
pulse with modulation mode"  dann muss ich dieses Register auf "1" 
setzen um es anzusprechen....??

Wie lautet denn dann der Befehl im Quellcode?
Mit welchen Befehlen lege ich die Zeiten im PWM-Mode fest??

Benötige ich grundsätzlich keine Interrupts um PWM auszugeben??

BZW. geht das alles im Hauptprogramm.....
#2894772
Lesenswert?

Moin,

wenn du Fragen zum "Quellecode" stellst, solltest du fairerweise 
zumindest die Sprache und das ggf. den verwendeten Compiler angeben.

Ansonsten funktioniert das genauso wie auch das beschreiben der Register 
der I/O Pins.

Warum bist du eigentlich so auf Interrupts fixiert? Die PCA ist eine 
eigene Einheit im Controller. Wird über die Register parametriet, sprich 
eingestellt, und KANN auch Interrupts erzeugen. Nur wozu? Die Zeiten 
werden über das Compare Register gesteurt; die Abbildung ist da recht 
hilfreich.

--
 SJ
OP #2894792
Lesenswert?

Sorry,

ich verwende RIDE 7 und die Sprache ist C51....

ich bin keineswegs auf Interrups fixiert....
Ich dachte man kann die Register nur so ansprechen...

Kann mir bitte jemand ein kleines Beispiel zeigen wie der Syntax zum 
Aufruf eines Gegisters aussieht....

Ich habe folgende Angaben aus dem Datenblatt: PCA Time/counter Module 4
                                              CCAPMN.1 enables PWM mode
                                              CEX

nur weis ich nicht wie ich etwas mit diesen Angaben anfange....
#2897499
Lesenswert?

Moin,

das ist leider sehr davon abhängig, wie das dein Compiler macht, bzw. 
wie die Libraries gestaltet sind.

Gegenfrage:
wie hast du denn die Ports geschaltet? Normalerweise sind das auch 
Register und genauso lassen sich auch die Steuerregister der PCA setzen.

Aus dem Fragment das du angegeben hast läßt sich kaum etwas ableiten, 
die mittlere Zeile bedeutet halt, das im Registr CCAPMN das 1te. bit 
gesetzt werden muss um das entprechenden Modul in den PWM Modus zu 
versetzen.

CEX ist der Ausgang eines der Module.
(Wenn ich das Sheet so grob überfliege)

--
 SJ
OP #2897950
Lesenswert?

Hi,

danke für die Antwort...

ich hab den Quellcode jetzt grad nicht zur Hand aber ich habe:

#define LEDPort P1 // P1 ist eine LED Reihe mit den LEDs P1.....P7, ist 
im .h der Schule so festgelegt

P1 = 0x00 // alle LEDs aus


dann: jeweils einzelene LEDs in einer while Schleife auf 1 bzw 0 
gesetzt.

Den Wert der LEDs kann dann durch einen Befehl(weis ich grad nicht) an 
die Pins übergeben werden, die in Reihe zu den LEDs liegen.....

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