Salve,
Sto iniziando a programmare in MPLAB IDE 8.33 con HI-TEC ANSI C Compiler. Ho iniziato con un semplice programma un lampeggio di un led (trovato su internet) ma una volta che compilo, il compilatore mi dice che non ho le delay.c e le delay.h.
Dove posso trovare queste librerie? Ne ho scaricate alcun da internet ma una volta che le ho incluse al progetto mi da errore dicendo che le funzioni contenute in delay.h sono state ridefinite. Che devo fare?
Grazie per la pazienza.
Librerie delay.c e delay.h
Moderatore:
Paolino
11 messaggi
• Pagina 1 di 2 • 1, 2
0
voti
Ciao
jmonty, non hai indicato da dove hai preso quello che stai utilizzando ma se non è parte della stessa "famiglia" può darsi ci sia ridondanza e o qualche errore di compatibilità.
Prova ad inserire nel prossimo Post il tuo codice e quello delle "delay", così magari gli si può dare un'occhiata.
Saluti
Prova ad inserire nel prossimo Post il tuo codice e quello delle "delay", così magari gli si può dare un'occhiata.
Saluti
W - U.H.F.
-

WALTERmwp
30,2k 4 8 13 - G.Master EY

- Messaggi: 8986
- Iscritto il: 17 lug 2010, 18:42
- Località: le 4 del mattino
0
voti
Questo è, con buona probabilità, un problema che riguarda le impostazioni del progetto: posizione cartella dei file .h
Accetto scommesse.
Accetto scommesse.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
-

TardoFreak
73,9k 8 12 13 - -EY Legend-

- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
0
voti
Questo è lo script del progetto:
- Codice: Seleziona tutto
//
//*************************************************
#define XTAL_FREQ 20MHZ
#include <PIC.h>
__CONFIG (HS & WDTDIS & PWRTEN & BORDIS & LVPDIS & DUNPROT & WRTEN & DEBUGDIS & UNPROTECT);
#include "delay.h"
#define LED RD0
void main(void)
{
TRISA=0b00000000;
TRISB=0b00000000;
TRISC=0b00000000;
TRISD=0b00000000;
TRISE=0b00000000;
while(1)
{
LED=LED^1;
DelayMs(250);
}
}
Ultima modifica di
WALTERmwp il 9 feb 2015, 10:02, modificato 1 volta in totale.
Motivazione: Inserito codice nei tag(s) code
Motivazione: Inserito codice nei tag(s) code
0
voti
- Codice: Seleziona tutto
delay.c:
/*
high level delay routines - see delay.h for more info.
Designed by Shane Tolmie of http://www.microchipC.com corporation. Freely distributable.
Questions and comments to webmaster@microchipC.com.
PICuWEB - Program PIC micros with C. Site has FAQ and sample source code.
http://www.microchipC.com.
For Microchip 12C67x, 16C7x, 16F87x and Hi-Tech C
*/
#ifndef __DELAY_C
#define __DELAY_C
#include <PIC.h>
#include "always.h"
unsigned char delayus_variable;
#include "delay.h"
void DelayBigUs(unsigned int cnt)
{
unsigned char i;
i = (unsigned char)(cnt>>8);
while(i>=1)
{
i--;
DelayUs(253);
CLRWDT();
}
DelayUs((unsigned char)(cnt & 0xFF));
}
void DelayMs(unsigned char cnt)
{
unsigned char i;
do {
i = 4;
do {
DelayUs(250);
CLRWDT();
} while(--i);
} while(--cnt);
}
//this copy is for the interrupt function
void DelayMs_interrupt(unsigned char cnt)
{
unsigned char i;
do {
i = 4;
do {
DelayUs(250);
} while(--i);
} while(--cnt);
}
void DelayBigMs(unsigned int cnt)
{
unsigned char i;
do {
i = 4;
do {
DelayUs(250);
CLRWDT();
} while(--i);
} while(--cnt);
}
void DelayS(unsigned char cnt)
{
unsigned char i;
do {
i = 4;
do {
DelayMs(250);
CLRWDT();
} while(--i);
} while(--cnt);
}
#endif
Ultima modifica di
WALTERmwp il 9 feb 2015, 10:03, modificato 1 volta in totale.
Motivazione: Inserito codice nei tag(s) code
Motivazione: Inserito codice nei tag(s) code
0
voti
- Codice: Seleziona tutto
delay.h
#define PIC_CLK 16000000 //16Mhz
/*
lowlevel delay routines
Designed by Shane Tolmie for http://www.microchipC.com. Freely distributable.
Questions and comments to webmaster@microchipC.com.
For Microchip 12C67x, 16C7x, 16F87x and Hi-Tech C
Example C:
#define PIC_CLK 4000000
#include "delay.h"
unsigned int timeout_int, timeout_char;
DelayUs(40); //do NOT do DelayUs(N) of N<5 @ 4Mhz or else it executes DelayUs(255) !!!!
DelayUs(255); //max
dly250n; //delay 250ns
dly1u; //delay 1us
timeout_char=timeout_char_us(1147);
while(timeout_char-- && (RA1==0)); //wait up to 1147us for port RA1 to go high
// - this is the max timeout
timeout_int=timeout_int_us(491512);
while(timeout_int-- && (RA1==0)); //wait up to 491512us for port RA1 to go high
// - this is the max timeout
*/
#ifndef __DELAY_H
#define __DELAY_H
extern unsigned char delayus_variable;
#if (PIC_CLK == 4000000)
#define dly125n please remove; for 32Mhz+ only
#define dly250n please remove; for 16Mhz+ only
#define dly500n please remove; for 8Mhz+ only
#define dly1u asm("nop")
#define dly2u dly1u;dly1u
#elif (PIC_CLK == 8000000)
#define dly125n please remove; for 32Mhz+ only
#define dly250n please remove; for 16Mhz+ only
#define dly500n asm("nop")
#define dly1u dly500n;dly500n
#define dly2u dly1u;dly1u
#elif ( (PIC_CLK == 16000000) || (PIC_CLK == 16257000) )
#define dly125n please remove; for 32Mhz+ only
#define dly250n asm("nop")
#define dly500n dly250n;dly250n
#define dly1u dly500n;dly500n
#define dly2u dly1u;dly1u
#elif (PIC_CLK == 20000000)
#define dly200n asm("nop")
#define dly400n dly250n;dly250n
#define dly2u dly400n;dly400n;dly400n;dly400n;dly400n
#elif (PIC_CLK == 32000000)
#define dly125n asm("nop")
#define dly250n dly125n;dly125n
#define dly500n dly250n;dly250n
#define dly1u dly500n;dly500n
#define dly2u dly1u;dly1u
#else
#error delay.h - please define pic_clk correctly
#endif
//*****
//delay routine
#if PIC_CLK == 4000000
#define DelayDivisor 4
#define WaitFor1Us asm("nop")
#define Jumpback asm("goto $ - 2")
#elif PIC_CLK == 8000000
#define DelayDivisor 2
#define WaitFor1Us asm("nop")
#define Jumpback asm("goto $ - 2")
#elif ( (PIC_CLK == 16000000) || (PIC_CLK==16257000) )
#define DelayDivisor 1
#define WaitFor1Us asm("nop")
#define Jumpback asm("goto $ - 2")
#elif PIC_CLK == 20000000
#define DelayDivisor 1
#define WaitFor1Us asm("nop"); asm("nop")
#define Jumpback asm("goto $ - 3")
#elif PIC_CLK == 32000000
#define DelayDivisor 1
#define WaitFor1Us asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop")
#define Jumpback asm("goto $ - 6")
#else
#error delay.h - please define pic_clk correctly
#endif
#define DelayUs(x) { \
delayus_variable=(unsigned char)(x/DelayDivisor); \
WaitFor1Us; } \
asm("decfsz _delayus_variable,f"); \
Jumpback;
/*
timeouts:
C code for testing with ints:
unsigned int timeout;
timeout=4000;
PORT_DIRECTION=OUTPUT;
while(1)
{
PORT=1;
timeout=8000;
while(timeout-- >= 1); //60ms @ 8Mhz, opt on, 72ms @ 8Mhz, opt off
PORT=0;
}
Time taken: optimisations on: 16cyc/number loop, 8us @ 8Mhz
optimisations off: 18cyc/number loop, 9us @ 8Mhz
with extra check ie: && (RB7==1), +3cyc/number loop, +1.5us @ 8Mhz
C code for testing with chars:
similar to above
Time taken: optimisations on: 9cyc/number loop, 4.5us @ 8Mhz
with extra check ie: && (RB7==1), +3cyc/number loop, +1.5us @ 8Mhz
Formula: rough timeout value = (<us desired>/<cycles per loop>) * (PIC_CLK/4.0)
To use: //for max timeout of 1147us @ 8Mhz
#define LOOP_CYCLES_CHAR 9 //how many cycles per loop, optimizations on
#define timeout_char_us(x) (unsigned char)((x/LOOP_CYCLES_CHAR)*(PIC_CLK/4.0))
unsigned char timeout;
timeout=timeout_char_us(1147); //max timeout allowed @ 8Mhz, 573us @ 16Mhz
while((timeout-- >= 1) && (<extra condition>)); //wait
To use: //for max 491512us, half sec timeout @ 8Mhz
#define LOOP_CYCLES_INT 16 //how many cycles per loop, optimizations on
#define timeout_int_us(x) (unsigned int)((x+/LOOP_CYCLES_INT)*(PIC_CLK/4.0))
unsigned int timeout;
timeout=timeout_int_us(491512); //max timeout allowed @ 8Mhz
while((timeout-- >= 1) && (<extra condition>)); //wait
*/
#define LOOP_CYCLES_CHAR 9 //how many cycles per loop, optimizations on
#define timeout_char_us(x) (long)(((x)/LOOP_CYCLES_CHAR)*(PIC_CLK/1000000/4))
#define LOOP_CYCLES_INT 16 //how many cycles per loop, optimizations on
#define timeout_int_us(x) (long)(((x)/LOOP_CYCLES_INT)*(PIC_CLK/1000000/4))
//if lo byte is zero, faster initialization by 1 instrucion
#define timeout_int_lobyte_zero_us(x) (long)(((x)/LOOP_CYCLES_INT)*(PIC_CLK/4.0)&0xFF00)
//function prototypes
void DelayBigUs(unsigned int cnt);
void DelayMs(unsigned char cnt);
void DelayMs_interrupt(unsigned char cnt);
void DelayBigMs(unsigned int cnt);
void DelayS(unsigned char cnt);
#endif
Ultima modifica di
WALTERmwp il 9 feb 2015, 10:03, modificato 1 volta in totale.
Motivazione: Inserito codice nei tag(s) code
Motivazione: Inserito codice nei tag(s) code
0
voti
Hai risolto la questione della compilazione ?
Per questo ...
Saluti
Per questo ...
... sembra tu stia descrivendo una uscita analogica; quale PIC vorresti impiegare ?jmonty ha scritto:Con Arduino potevo utilizzare una porta in uscita in modo analogico con valori da 0 a 255 che corrispondono da 0v a 5 V.
Saluti
W - U.H.F.
-

WALTERmwp
30,2k 4 8 13 - G.Master EY

- Messaggi: 8986
- Iscritto il: 17 lug 2010, 18:42
- Località: le 4 del mattino
11 messaggi
• Pagina 1 di 2 • 1, 2
Torna a Firmware e programmazione
Chi c’è in linea
Visitano il forum: Nessuno e 5 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)


