Pic24 pwm

Ik heb hier op een bordje een pic24 waarvan ik de pwm naar buiten zou willen krijgen,
nu krijg ik deze niet werkende, ik denk dat het probleem zit bij de remappable pins

Ik werk met MikroC van MikroE aangezien ik mplab niet geinstaleerd krijg.

heb al veel geprobeer en ben nu reeds paar weken bezig met het zoeken naar de oplossing, en vind het probleem maar niet.

hier mijn code:

c code:


#define led1 RD1_bit
#define led2 RD2_bit
#define led3 RD3_bit
#define led4 RD4_bit
#define led5 RD5_bit
#define start RE5_bit
//variabelen

int timerteller = 0;
const int flash = 90;

//Timer1
//Prescaler 1:256; PR1 Preload = 62500; Actual Interrupt Time = 1s

void InitTimer1(){
  //T1CON                 = 0x8030;    //starten van timer
  T1CON          = 0x0000;
  T1IE_bit         = 1;
  T1IF_bit         = 0;
  IPC0                 = IPC0 | 0x1000;
  PR1                 = 62500;
}



//iets dat uitgevoert word na de laatste interupt van de timer

//  initialisaties
void init(){
     TRISD = 0;
     TRISE5_bit = 1;
     PORTD = 0;
     ADPCFG = 0xFFFF;                           // Configure AN pins as digital I/O
  TRISB = 0x0000;                            // configureall ports as Output
  
  TRISF = 0x0000;
  TRISG = 0x0000;
  
  Unlock_IOLOCK();
  PPS_Mapping(0, _OUTPUT, _OC1);   // Sets pin 5 to be Output
  Lock_IOLOCK();

}
#define OC1_OUT 18

int current_duty = 0 ;
int chanel = 1;
int maxi = 0;
int freq = 1000;

void pwm(){


     current_duty  = 5000; //16 bit pwm
     chanel = 1;
     PWM_Init(100,chanel,0,0);
     PWM_Start(chanel); //Start pwm1
     maxi = 65536;

     PWM_Set_Duty(current_duty,  chanel);            // Set current duty for PWM1
     while(1){
              while(current_duty < maxi){
                                 PWM_Set_Duty(current_duty,chanel);
                                 current_duty++;
                                 delay_ms(100);
              }
              current_duty = 0;


    }
}

void main(){

     TRISD = 0x0000;
     PORTD = 0x0000;
     
     pwm();
     
     while(1){
     
         led5 = 1;
         delay_ms(500);
         led5 = 0;
         delay_ms(500);
     
     }

}

Ik denk dat je het configuration word vergeet (kortom de fuses van de uC). Het is altijd even zoeken naar waar ze staan in de datasheet en hoe je ze in de compiler moet configureren. Ik weet dat de XC-compiler serie van Microchip de #pragma keywords gebruikt.

Ik kan me indenken dat het compiler afhankelijk is, dus dat moet je dan even uitzoeken voor MikroC.

Ik vindt MPLAB X overigens een erg fijne omgeving om in te werken. Je moet alleen nog even de juiste compilers installeren en configureren.

LED addicted... Fijnmalen en snuiven maar!! :P
Arco

Special Member

Wat is het voor een PIC? Ik ken geen PIC24's die tot 53 gaan qua remappable pin.
Let wel: het is niet het pinnummer, maar het RPxx nummer (Remappable Pin) wat je bij PPS_Mapping op moet geven.

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Op 24 april 2014 19:35:02 schreef Arco:
Wat is het voor een PIC? Ik ken geen PIC24's die tot 53 gaan qua remappable pin.
Let wel: het is niet het pinnummer, maar het RPxx nummer (Remappable Pin) wat je bij PPS_Mapping op moet geven.

Heb maar zitten proberen, zou op rp0 moeten komen,
Het is een pic24fj256gb106

c code:

PWM_Init(100,chanel,0,0);

http://www.mikroe.com/download/eng/documents/compilers/mikroc/pro/dspic/help/pwm_library.htm

Zie bovenstaande link.

use_timer_x: timer to be used with the PWM module. Valid values: 2 (Timer2) and 3 (Timer3)

De vierde parameter mag volgens mij alleen 2 of 3 zijn. Dus je kunt alleen timer 2 en 3 gebruiken. Ik gebruik geen MikroC, dus weet niet of dit het oplost. Misschien is er mnog iets anders mis. Oook weet ik niet of bovenstaande info nog up-to-date is.

Ik zie dat de T1-interrupt aanstaat. Waarom? Wat gebeurt als T1 overloopt?

Timer 1 loopt 5 seconden om de start van een deel te hebben,
Na nen input moet de timer beginnen en om de seconde moet er een ledje uitgaan

Kzal vanavond eens proberen of dat het probleem oplost

probleem opgelost,
was een combinatie van verkeerdgebruik van de PPS library en verkeerde configuratie van de µC