Vizitator paultnt Postat Ianuarie 22, 2011 Partajează Postat Ianuarie 22, 2011 sal .. m-am apucat un pic de un dspic 33f si nu impac cu el. vreau sa realizez un program simplu, o rotatie de led la un anumit delay, dar imi da de fiecare data eroare ca nu cunoaste functia delay. prima data am crezut ca nu am configurat bine oscilatorul,(inca nu stiu daca am facut bine), am urmat un exemplu dat de microchip, si probramul de aprins led merge. acesta este programul principal: #include "p33FJ128MC802.h"//#include "libpic30.h"//#include "delay.h"//#define FCY 7320000UL// Select Internal FRC at POR_FOSCSEL(FNOSC_FRC);// Enable Clock Switching and Configure Primary Oscillator in XT mode_FOSC(FCKSM_CSECMD & OSCIOFNC_OFF & POSCMD_XT);// Primary Oscillator Mode: XT Crystanlint main (void){OSCTUNbits.TUN = 0b11111;OSCCONbits.COSC = 0b000; //Internal oscillator 7.37 MHz// Configure PLL prescaler, PLL postscaler, PLL divisorPLLFBD = 0x001E; //M = 32 -prescalerCLKDIVbits.PLLPOST=0; // N1=2 -postscalerCLKDIVbits.PLLPRE=0; // N2=2 -divisor// Fcy = Fin/2 * M/(N1*N2) = 7.37MHz/2 * 32/(2*2) = 29.48 MHzTRISB = 0x00FF; // configure PORTB for output<15:8> and input<7:0> while(1) // do forever { LATBbits.LATB12 = 1; LATBbits.LATB13 = 0;// Delay_1S_Cnt(1); // nu merge nici cu delay_ms(100) indiferent de ce header am inclus in proiect LATBbits.LATB14 = 1; LATBbits.LATB15 = 0; } return 0;} iar libpic30.h este(partea care sper ca intereseaza): extern void __delay32(unsigned long cycles);/* * __delay_ms() and __delay_us() are defined as macros. They depend * on a user-supplied definition of FCY. If FCY is defined, the argument * is converted and passed to __delay32(). Otherwise, the functions * are declared external. * * For example, to declare FCY for a 10 MHz instruction rate: * * #define FCY 10000000UL */#if !defined(FCY)extern void __delay_ms(unsigned long);extern void __delay_us(unsigned long);#else#define __delay_ms(d) \ { __delay32( (unsigned long) ((d)*(FCY)/1000ULL)); }#define __delay_us(d) \ { __delay32( (unsigned long) ((d)*(FCY)/1000000ULL)); }#endif iar delay.h este: extern void __delay32(unsigned long cycles);/* * __delay_ms() and __delay_us() are defined as macros. They depend * on a user-supplied definition of FCY. If FCY is defined, the argument * is converted and passed to __delay32(). Otherwise, the functions * are declared external. * * For example, to declare FCY for a 10 MHz instruction rate: * * #define FCY 10000000UL */#if !defined(FCY)extern void __delay_ms(unsigned long);extern void __delay_us(unsigned long);#else#define __delay_ms(d) \ { __delay32( (unsigned long) ((d)*(FCY)/1000ULL)); }#define __delay_us(d) \ { __delay32( (unsigned long) ((d)*(FCY)/1000000ULL)); }#endif sper ca am pus destule date sa ma ajutati si pe mine. daca mai lipsesc informatii va rog sa ma anuntati. Link spre comentariu
Liviu M Postat Ianuarie 22, 2011 Partajează Postat Ianuarie 22, 2011 Cu __delay_ms() ai incercat? Link spre comentariu
MatyC Postat Ianuarie 23, 2011 Partajează Postat Ianuarie 23, 2011 Nu inteleg de ce #include libpic30.h si #include delay.h le-ai facut comentarii? Link spre comentariu
Vizitator paultnt Postat Ianuarie 23, 2011 Partajează Postat Ianuarie 23, 2011 Cu __delay_ms() ai incercat?am incercat :#include "libpic30.h"_delay_ms(100); // main.c:63: warning: implicit declaration of function '_delay_ms'main.o(.text+0x36): In function `main':c:\Documents and Settings\Delphi Diesel Iasi\My Documents\Microchip\main.c:63: undefined reference to `_delay_ms'Link step failed.__delay_ms(100); // main.o(.text+0x38): In function `main':c:\Documents and Settings\Delphi Diesel Iasi\My Documents\Microchip\main.c:63: undefined reference to `__delay_ms'Link step failed.*******************************************************************#include "delay.h"delay(100); //main.c:62: warning: implicit declaration of function 'Delay'main.o(.text+0x36): In function `main':c:\Documents and Settings\Delphi Diesel Iasi\My Documents\Microchip\main.c:62: undefined reference to `Delay'Link step failed.+multe alte feluri.*******************************************************************de fiecare data am inclus headerul corespunzator, chiar daca in codul dat de mine le-am comentat. Link spre comentariu
Liviu M Postat Ianuarie 23, 2011 Partajează Postat Ianuarie 23, 2011 Da' cu #include <delay.h>...__delay_ms(); ai incercat? Ca __delay_ms(); e definit in delay.h. Daca nu incluzi delay.h, nu stie de unde sa-l ia pe __delay_ms(). Daca incluzi delay.h da' folosesti DelayMs(), nu stie cine-i ala. Oricum, mesajul ala de eroare inseamna ca nu gaseste definitia functiei respective. Link spre comentariu
MatyC Postat Ianuarie 23, 2011 Partajează Postat Ianuarie 23, 2011 Eu nu am ajuns la asa nivel cu picurile, dar vad pe un alt forum ca declararea lui FCY trebuie facuta inainte de includerea headerului libpic30.h. This function relies on a user-supplied definition of FCY to represent the instruction clock frequency. FCY must be defined before header file libpic30.h is included. The specified delay is converted to the equivalent number of instruction cycles and passed to __delay32(). If FCY is not defined, then __delay_ms() is declared external, causing the link to fail unless the user provides a function with that name.Vezi aici http://www.microchip.com/forums/m549758.aspx Link spre comentariu
Vizitator paultnt Postat Ianuarie 24, 2011 Partajează Postat Ianuarie 24, 2011 merci mult MatyC, intradevar FCY trebuie definit inainte de a include libraria (libpic30.h).scria si in librarie dar nu am putut sa interpretez.multumesc si celorlati pentru ajutor.ne vedem la urmatoarele probleme Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum