Gast
#5546619
Hallo, ich kriege die Krise..
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
Ich versuche an PORTE.4 eine PWM zu erzeugen.. Da passiert leider überhaupt nichts.. Was mache ich verkehrt?
|
Anzeige
|
XMEGA256 A3BU - PWM
Gast
#5546619
Hallo, ich kriege die Krise..
Ich versuche an PORTE.4 eine PWM zu erzeugen.. Da passiert leider überhaupt nichts.. Was mache ich verkehrt? Wie sieht deine ISR für CCA aus ? Nur für PWM brauchst du den Interrupt nicht aktivieren Gruß JackFrost
Gast
#5546639
Bastian W. schrieb: > Wie sieht deine ISR für CCA aus ? Nur für PWM brauchst du den > Interrupt > nicht aktivieren > > Gruß JackFrost Stimmt. In die ISR sollte eigentlich nichts rein.
Gast
#5546645
Es gibt ja mehrere "OC1A" Kanäle. Wie genau stellt man denn diese ein? Ich brauche den an "PORTE Pin4" ? Das ist der Timer TCE1 Gruß JackFrost
Gast
#5546984
Bastian W. schrieb: > Das ist der Timer TCE1 > > Gruß JackFrost Ohje.. Peinlich! Also hat jeder Port einen eigenen Timer oder wie darf ich das verstehen? Normal gibt es für jeden Port einen bzw zwei Timer wenn der Port PWM hat. Zur not den Simulator starten , dann Pausieren, im I/O Fenster siehst du die alle Timer usw. Auch in der Datei für die Register kannst du das sehen. Einfach auf reinschauen und dann kannst du da suchen. Gruß JackFrost
Gast
#5548469
Moin, ich werde noch wild.. Wieso funktioniert der "Compare Channel B , C , D" nicht? Wenn ich es mit dem Compare Channel "A" mache, klappt alles wunderbar! Was habe ich übersehen?
Was klappt denn nicht ? Du hast eine PWM mit 50 % Tastgrad wenn du das so schreibst. Der CCB Interrupt wird ja einmal je durchlauf ausgeführt. Ist ja so wie ein Overflow nur zu einem anderen Zeitpunkt. Du bist im Frequenzmodus, damit ist CCA die Oberegrenze. Wenn nun CCA auf 0 steht wird CCB mit 100 nie erreicht. Frequenz != PWM. Willst du ne PWM mit fester Frequenz und variablem Tastgrad ? Gruß JackFrost
Gast
#5548521
Bastian W. schrieb: > Was klappt denn nicht ? > > Du hast eine PWM mit 50 % Tastgrad wenn du das so schreibst. Der CCB > Interrupt wird ja einmal je durchlauf ausgeführt. Ist ja so wie ein > Overflow nur zu einem anderen Zeitpunkt. > > Du bist im Frequenzmodus, damit ist CCA die Oberegrenze. Wenn nun CCA > auf 0 steht wird CCB mit 100 nie erreicht. > > Frequenz != PWM. Willst du ne PWM mit fester Frequenz und variablem > Tastgrad ? > > Gruß JackFrost Okay.. Ich möchte den Compare Match B Interrupt oder auch C usw.. in Abhängigkeit von TCCx.CCx auslösen lassen.
Gast
#5548528
Wieso schaltest Du die C ein, wenn Du Port-D Zähler verwendest (PR.PRPC = 0x00;)? Wird allerdings den Fehler nicht beheben, wenn es, wie Du schreibst mit CCA funzt hat. Beim XMEGA muss man im PRPx-Register auch das HIRES-Bit resetten, damit PWM funzt. Die PORTDs hast Du sicher als PORTD.DIRSET=(1<<1) | (1<<2) | (1<<3); gesetzt? mfg Achim Ron C. schrieb: > Okay.. Ich möchte den Compare Match B Interrupt oder auch C usw.. > in Abhängigkeit von TCCx.CCx auslösen lassen. Dann willst du aber keine Variable PWM. Wenn du das machen willst müssen CCx < CCA sein, da CCA das Top im Frequenz Modus ist PR.PRPC = 0x00; brauchst du nicht da die Register alle mit 0x00 initialierst sind. Wenn du vorher PR.PRPx mit 1 beschrieben hast must du nach dem Reset von PR.PRPx den Timer Sicherheitshalber neu Einrichten. Ich hab beim xMega64A3U, xMega32A4 und xMega32e5 bei den Timern nie das PR.PRPx resettet und die Timer laufen. Gruß JackFrost
Gast
#5548785
Bastian W. schrieb: > Wenn du vorher PR.PRPx mit 1 beschrieben hast must du nach dem Reset von > PR.PRPx den Timer Sicherheitshalber neu Einrichten. Da hast du recht. Hast du vill. noch eine Idee, wie ich den Entsprechenden Port raus bekommen kann, ohne wieder ein extra Parameter zu übergeben?
Meine Struktur
Diese übergebe ich der Funktion die dann meinen Timer konfiguriert. Oder setze ich generell gleich die Power Register auf "0x00"? Laut Datenblatt muss erst Power gesetzt werden und dann die Konfig. Aber das Register steht auf 0x00 nach einem Reset. Gruß JackFrost
Gast
#5549030
Bastian W. schrieb: > PR.PRPC = 0x00; brauchst du nicht da die Register alle mit 0x00 > initialierst sind. Bei Verwendung des ASF nicht immer richtig. Bastian W. schrieb: > müssen > CCx < CCA sein Es existieren 4 unabh. CCx-Hardware, muß also nicht sein. Ron C. schrieb: > #define TIMER_PRx( _port ) ( ( & ( PR.PRPA ) )[_port] ) oder die Hose mit der Kneifzange anziehen ... viel einfacher ... XMEGA! mfg Achim J. Zimmermann schrieb: >> müssen >> CCx < CCA sein > > Es existieren 4 unabh. CCx-Hardware, muß also nicht sein. Wenn der Timer im FRQ Modus ist, dann ist CCA Top. Wenn CCB/C/D nun größer sind werden sie nie auslösen da der Timer nur bis CCA läuft. Gruß JackFrost
Gast
#5549699
@Bastian W.: Absolut korrekt - war im falschen TC-Modus. mfg Achim Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|