eZdspF2812 Problem mit PWM

Gast #1589146
Grüße,

ich befasse mich seit ein paar Tagen mit dem eZdsp-Board von 
SpectrumDigital. Auf deren Homepage habe ich ein paar nützliche 
Programmbeispiele gefunden (ADC, LED, PWM etc.) welche alle sehr 
hilfreich und funktionstüchtig waren.

Nun bin ich gerade dabei die PWM-Sachen durch zu gehen und hier fängt 
mein Problem an. Das Programm hierzu schein auf den 1. Blick zu 
funktionieren, doch wenn ich mir mittels Oszi die PWM-Signale anschauen 
will, passiert absolut nix (das Oszi funktioniert ;-))!

Wenn ihr eine Idee hättet, wäre ich euch sehr dankbar.

LG Jens

P.S.: Hier seht ihr den C-Code!

#include "DSP281x_Device.h"     // DSP281x Headerfile Include File
#include "DSP281x_Examples.h"   // DSP281x Examples Include File
// Prototype statements for functions found within this file.
void init_eva(void);
void init_evb(void);
// Global counts used in this example
void main(void)
{
   InitSysCtrl();
   EALLOW;
   // Enable PWM pins
   GpioMuxRegs.GPAMUX.all = 0x00FF; // EVA PWM 1-6  pins
   GpioMuxRegs.GPBMUX.all = 0x00FF; // EVB PWM 7-12 pins
   EDIS;
   DINT;
   InitPieCtrl();
   IER = 0x0000;
   IFR = 0x0000;
   InitPieVectTable();

   init_eva();
   init_evb();
   for(;;);
}
void init_eva()
{
// EVA Configure T1PWM, T2PWM, PWM1-PWM6
// Initalize the timers
   // Initalize EVA Timer1
   EvaRegs.T1PR = 0xFFFF;       // Timer1 period
   EvaRegs.T1CMPR = 0x3C00;     // Timer1 compare
   EvaRegs.T1CNT = 0x0000;      // Timer1 counter
   // TMODE = continuous up/down
   // Timer enable
   // Timer compare enable
   EvaRegs.T1CON.all = 0x1042;
   // Initalize EVA Timer2
   EvaRegs.T2PR = 0x0FFF;       // Timer2 period
   EvaRegs.T2CMPR = 0x03C0;     // Timer2 compare
   EvaRegs.T2CNT = 0x0000;      // Timer2 counter
   // TMODE = continuous up/down
   // Timer enable
   // Timer compare enable
   EvaRegs.T2CON.all = 0x1042;
   // Setup T1PWM and T2PWM
   // Drive T1/T2 PWM by compare logic
   EvaRegs.GPTCONA.bit.TCMPOE = 1;
   // Polarity of GP Timer 1 Compare = Active low
   EvaRegs.GPTCONA.bit.T1PIN = 1;
   // Polarity of GP Timer 2 Compare = Active high
   EvaRegs.GPTCONA.bit.T2PIN = 2;

   // Enable compare for PWM1-PWM6
   EvaRegs.CMPR1 = 0x0C00;
   EvaRegs.CMPR2 = 0x3C00;
   EvaRegs.CMPR3 = 0xFC00;

   EvaRegs.ACTRA.all = 0x0666;
   EvaRegs.DBTCONA.all = 0x0000; // Disable deadband
   EvaRegs.COMCONA.all = 0xA600;
}
void init_evb()
{
   EvbRegs.T3PR = 0xFFFF;       // Timer3 period
   EvbRegs.T3CMPR = 0x3C00;     // Timer3 compare
   EvbRegs.T3CNT = 0x0000;      // Timer3 counter
   EvbRegs.T3CON.all = 0x1042;
   // Initialize EVB Timer4
   // Timer4 controls T4PWM
   EvbRegs.T4PR = 0x00FF;       // Timer4 period
   EvbRegs.T4CMPR = 0x0030;     // Timer4 compare
   EvbRegs.T4CNT = 0x0000;      // Timer4 counter
   // TMODE = continuous up/down
   // Timer enable
   // Timer compare enable
   EvbRegs.T4CON.all = 0x1042;
   // Setup T3PWM and T4PWM
   // Drive T3/T4 PWM by compare logic
   EvbRegs.GPTCONB.bit.TCMPOE = 1;
   // Polarity of GP Timer 3 Compare = Active low
   EvbRegs.GPTCONB.bit.T3PIN = 1;
   // Polarity of GP Timer 4 Compare = Active high
   EvbRegs.GPTCONB.bit.T4PIN = 2;
   // Enable compare for PWM7-PWM12
   EvbRegs.CMPR4 = 0x0C00;
   EvbRegs.CMPR5 = 0x3C00;
   EvbRegs.CMPR6 = 0xFC00;
   EvbRegs.ACTRB.all = 0x0666;
   EvbRegs.DBTCONB.all = 0x0000; // Disable deadband
   EvbRegs.COMCONB.all = 0xA600;
}
#1589181
So auf den ersten Blick würde ich sagen du hast die entsprechenden Pins 
nicht als Ausgang gesetzt. Beim Starten sind diese aus 
Sicherheitsgründen (hochohmige) Eingänge und das musst du ändern.

Details & Code siehe DSP281x_Gpio.c
Gast #1589997
Jens schrieb:
> Das ist auch nicht das Problem. Habe GPADIR schon auf 0xFFFF bzw. zu
> Testzwecken auf 0x0000 gesetzt. Ohne Erfolg!

Es mag vielleicht noch ein anderes Problem dazukommen - um GPxDIR musst 
du dich aber auf jeden Fall kümmern. An welchen Pins mißt du, wenn ich 
blöd fragen darf?
Gast #1590001
Am Board ist es die Buchsenleiste P8 (Pin 9 bis 14 und GND). Am 
Controller wären es die Pins 92, 93, 94, 95, 98 und 101.

Das wäre jetzt nicht gerade förderlich für mein Ego, wenn ich an den 
falschen Pins gemessen hätte^^! Aber andererseits, hauptsache ich komme 
mit meinem Projekt weiter!
Gast #1590017
OK. Schau dir das Ganze nochmal an. Folgende Register musst du 
konfigurieren: TxPR, TxCNT, TxCON, CMPRy, ACTRz, DBTCONz, COMCONz 
(x=1...2, y=1...3, z=A...B). Zumindest funktioniert es damit bei mir 
(PWM1...PWM6 als 3phasige PWM mit Totzeit). GPxMUX und GPxDIR nicht 
vergessen.

Wenn du nur PWM1...PWM6 nutzen möchtest brauchst du dich um GPTCONx 
nicht kümmern. Das brauchst du nur wenn du TxPWM benötigst. Event 
Manager B brauchst du auch nicht unbedingt, das hängt aber davon ab was 
du insgesamt vorhast.

Wobei es wirklich interessant ist, dass das TI-Beispiel nicht zu 
funktionieren scheint... Leider habe ich gerade keine Möglichkeit das zu 
testen. Die *.cmd-Files sind in Ordnung und du kannst Pins setzen und 
löschen?
Gast #1590023
Das Eigenartige ist, ich habe gerade CCS neu gestartet und jetzt läuft 
das Bspl-Programm und auch mein Eigenes!

Jedoch sobald ich ein anderes Programm starte, bsplw. Gpio_Toggle 
(welches auch funktioniert) und anschließend wieder mein PWM-Programm 
starte, funktioniert dieses wieder nicht!

Sehr mysteriös!
Gast #1595649
Nach deine Beschreibung stimmt eindeutig die Initialisierung nicht. Der 
TI behält bestimmt Registerwerte/Einstellungen bei, wenn kein Reset 
erfolggt, die Stromversorgung beigehalten wird und einfach eine neue SW 
geflasht wird. Aus diesem grund sollte jedes Flash oder SRAM Projekt 
einmal geprüft werden, wenn das System vorher resetet wurde.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 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.