PWM Sam7s Invertieren

Gast #2020552
Hallo,

habe auf meinen sam7s-ek eine PWM auf drei Kanälen am laufen. Jetzt 
brauche ich noch drei weitere Kanäle, wobei jedweils nur immer das 
invertierte Signal auf jeweils einem Pin ausgegeben werden soll. Gibt es 
da eine einfache Möglichkeit, da ja nur 4 Kanäle zur Verfügung stehen?
Gast
Also ich benutze bei allen drei Signalen bisher den selben PWM - Timer. 
SO das alle die selbe Periodenlänge haben. Später soll halt nur jeweils 
der Duty Cycle unterschiedlich sein. Kann ich denn jeden Ausgang als PWM 
Ausgang definieren und wenn ja wie?
>bisher den selben PWM - Timer
was meinst du damit????

Jeder PWM-Channel hat seinen eigenen Clk und muss selbst eingestellt 
werden!
siehe PWM Channel Mode Register (Register Name: PWM_CMR[0..X-1])!

Für den PWM-Pins stehen Ports wie: PWM0 -> PWM3 (Peripheral B, 
PA11-PA14)
als Beispiel.

Für die Timer-Pins stehen die Ports wie: TIOA0 -> TIOA2 (TIOBx)

Stephan
Gast
Ja, also die PWM-Channels wurden auch jeweils eigenständig eingestellt 
und haben alle einen eigenen Timer, so wie es im Beispiel vom Atmel

    PWMC_ConfigureChannel(CHANNEL_PWM_LED0, AT91C_PWMC_CPRE_MCKA, 
AT91C_PWMC_CALG, 0);
    PWMC_SetPeriod(CHANNEL_PWM_LED0, MAX_DUTY_CYCLE);
    PWMC_SetDutyCycle(CHANNEL_PWM_LED0, MAX_DUTY_CYCLE/2);

Dieses jeweils für drei Kanäle. Und dann jeder Kanel aktiviert.

PWMC_EnableChannel(CHANNEL_PWM_LED0);

So habe ich an drei Pins meine PWM, wobei ich jetzt einfach die selben 
Signale noch einmal nur Invertiert benötige.
>haben alle einen eigenen Timer
gut, jetzt reden wir von den gleichen Dingen.

Da du nur 4 HW-PWM Channels hast, kannst du nur diese benutzen.
Aber: Die HW-Timer selber können auch als PWM Generator genutzt werden.

siehe DB, Kapitel 33 Timer Counter:
1
The Timer Counter (TC) includes three identical 16-bit Timer Counter channels.
2
Each channel can be independently programmed to perform a wide range of functions including
3
frequency measurement, event counting, interval measurement, pulse generation, delay timing
4
and pulse width modulation.

vielleicht würde das für dich gehen.

Stephan
Gast
Das ist ja ziemlich umständlich, da ich ja eigentlich nur das 
invertierte Signal jedes Channels benötige. Vor allen dann wenn ich 
später mit interrupts arbeite und den duty cycle ständig ändere! Gibt es 
da nich doch eine andere einfachere Möglichkeit?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.