Hey Leute! Ich nutze folgenden microchip: dsPIC33EP64GS504. Habe heute mein Board vom Fertiger bekommen und wollte mal locker loslegen mit einem einfachen PWM output (PWM1H habe ich auch an einen Pin geroutet sodass ich ihn einfach überprüfen kann). Ich habe mir schon gefühlte 10 Beispiele und 500 Datenblattseiten durchgelesen und bekomme einfach partout keinen PWM aufs Oszi... (GPIO geht aber!). Ohnehin scheint der dsPIC33EP recht neu und es gibt wenige Tutorials/Examples... Frage: Sind das High-Speed PWm Modul mit den dedizierten PWM1H/PWM1L, PWM2H/L etc und die output compare unit grundsätzlich equivalent oder das selbe oder wie ist das zu verstehen? Außerdem: Muss ich wirklich jedes Register aus dem PWM Datenblatt deklarieren oder kann man sich da auch gut mal auf defaultwerte verlassen? Das einzige was ich will ist ein PWM auf PWM1H mit 50% DC und 10 kHz... Kann doch nicht so schwer sein, oder?! Ich bin sehr dankbar für jede Hilfe! PS: Hab das erste mal mit nem PIC zu tun...
Hier findest du genaueres zum High-Speed PWM Module inkl. Beispiele: http://ww1.microchip.com/downloads/en/DeviceDoc/70323C.pdf Swampy schrieb: > Außerdem: Muss ich wirklich jedes Register aus dem PWM Datenblatt > deklarieren oder kann man sich da auch gut mal auf defaultwerte > verlassen? Die default werte sind im Datenbaltt angegeben, wenn du mit ihnen zufreiden bist, musst du die nicht noch mal zuweisen.
Swampy schrieb: > Außerdem: Muss ich wirklich jedes Register aus dem PWM Datenblatt > deklarieren oder kann man sich da auch gut mal auf defaultwerte > verlassen? > Ich kenne das nur von anderen PICs. Da stimmt es eigerntlich. Ich initialisiere sie aber trotzdem immer. Sicxher ist sicher ;-) > Das einzige was ich will ist ein PWM auf PWM1H mit 50% DC und 10 kHz... > Kann doch nicht so schwer sein, oder?! > > Ich bin sehr dankbar für jede Hilfe! Die Locks für die Register hast Du disabled? (Die sind lt. DS per Default aktiv (DS70005127B, Ch. 15.2.1). > PS: Hab das erste mal mit nem PIC zu tun... Aber nicht mit uP's allgemein, oder ? Grüße Andreas
Danke für eure Antworten. Naja nicht ganz das erste mal mit uC. Aber so gut wie. Hab davor nur Arduino und vor allem viel FPGA gemacht. Okay ich werde mir mal das PDF anschauen. Danke!
PICjaner schrieb: > Hier findest du genaueres zum High-Speed PWM Module inkl. > Beispiele: > http://ww1.microchip.com/downloads/en/DeviceDoc/70323C.pdf > > Swampy schrieb: >> Außerdem: Muss ich wirklich jedes Register aus dem PWM Datenblatt >> deklarieren oder kann man sich da auch gut mal auf defaultwerte >> verlassen? > Die default werte sind im Datenbaltt angegeben, wenn du mit ihnen > zufreiden bist, musst du die nicht noch mal zuweisen. So PICjaner ich hab nun das Dokument (welches ich in leicht anderer Version schon kannte) komplett durch und hab mir jedes Example angeguckt und alles brav schritt für schritt durchgemacht. Hier mein code:
1 | int main(int argc, char** argv) { |
2 | |
3 | |
4 | /* Configure Oscillator to operate the device at 40Mhz
|
5 | Fosc= Fin*M/(N1*N2), Fcy=Fosc/2
|
6 | Fosc= 7.37*(43)/(2*2)=80Mhz for Fosc, Fcy = 40Mhz */
|
7 | |
8 | /* Configure PLL prescaler, PLL postscaler, PLL divisor */
|
9 | PLLFBD=41; /* M = PLLFBD + 2 */ |
10 | CLKDIVbits.PLLPOST=0; /* N1 = 2 */ |
11 | CLKDIVbits.PLLPRE=0; /* N2 = 2 */ |
12 | |
13 | __builtin_write_OSCCONH(0x01); /* New Oscillator FRC w/ PLL */ |
14 | __builtin_write_OSCCONL(0x01); /* Enable Switch */ |
15 | |
16 | while(OSCCONbits.COSC != 0b001); /* Wait for new Oscillator to become FRC w/ PLL */ |
17 | while(OSCCONbits.LOCK != 1); /* Wait for Pll to Lock */ |
18 | |
19 | /* Now setup the ADC and PWM clock for 120MHz
|
20 | ((FRC * 16) / APSTSCLR ) = (7.37 * 16) / 1 = ~ 120MHz*/
|
21 | |
22 | ACLKCONbits.FRCSEL = 1; /* FRC provides input for Auxiliary PLL (x16) */ |
23 | ACLKCONbits.SELACLK = 1; /* Auxiliary Oscillator provides clock source for PWM & ADC */ |
24 | ACLKCONbits.APSTSCLR = 7; /* Divide Auxiliary clock by 1 */ |
25 | ACLKCONbits.ENAPLL = 1; /* Enable Auxiliary PLL */ |
26 | |
27 | while(ACLKCONbits.APLLCK != 1); /* Wait for Auxiliary PLL to Lock */ |
28 | |
29 | |
30 | PWMCON1bits.CAM = 0; |
31 | PWMCON1bits.ITB = 0; |
32 | PTPER = 1204; |
33 | PWMCON1bits.MDCS = 0; |
34 | PDC1 = 800; |
35 | PWMCON1bits.DTC = 0; |
36 | DTR1 = 50; |
37 | PHASE1= 0; |
38 | IOCON1bits.PMOD = 3; |
39 | |
40 | IOCON1bits.PENH = 1; |
41 | IOCON1bits.PENL = 1; |
42 | IOCON1bits.POLH = 0; |
43 | IOCON1bits.POLL = 0; |
44 | |
45 | TRISA=0; |
46 | LATA =0; |
47 | PTCONbits.EIPU = 1; |
48 | PTCONbits.PTEN = 1; |
49 | |
50 | return(0); |
51 | }
|
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.