Sari la conținut
ELFORUM - Forumul electronistilor

1 inceput, 1 delay, o problema


Vizitator paultnt

Postări Recomandate

Vizitator paultnt

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
  • Răspunsuri 6
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • Liviu M

    2

  • MatyC

    2

Top autori în acest subiect

Vizitator paultnt

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

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

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

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 :101

Link spre comentariu

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 cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări