Sida 1 av 1
Har pickit2, och vill inkludera delays..
Postat: 22 maj 2009, 16:42:17
av leynad
Hej
hur inkluderar jag delays i mitt program. jag använder mig av LPCB (low pin count demo) board och en pic 16F690!
mvh
Daniel
Re: Har pickit2, och vill inkludera delays..
Postat: 22 maj 2009, 16:48:28
av bos
Eftersom jag läste din förra tråd så antar jag att du utvecklar i C, men det underlättar i framtiden om du skriver vilket programspråk du använder.
Jag använder inte Pickit2 och vet inte om det är nåt magiskt med det, men delays är enkla att göra:
Kod: Markera allt
void delay(void) {
unsigned int foo = 65535;
while (foo-- > 0) {}
}
Vill du ha mer exakta delays så får du manuellt räkna lite på det, beroende på vilken klockhastighet du använder osv. Alternativt kan du använda interruptstyrda delays, då blir de väldigt exakta och låser inte hela processorn.
Re: Har pickit2, och vill inkludera delays..
Postat: 22 maj 2009, 16:58:50
av leynad
Sorry! Klart att jag ska förtydliga mig fortsättningsvis! Ja, jag försöker att lära mig C programering och använder mig av Pic. Jo vad jag undrade var hur jag i början av mitt program ska initiera eller inkludera delay biblioteket. Jag trodde att jag skulle göra enligt följande: #include <delays.h> men det funkar inte.
Hoppas att det var bättre förklarat!
mvh daniel
Re: Har pickit2, och vill inkludera delays..
Postat: 22 maj 2009, 17:01:02
av danielr112
Delay_us(120);
eller
Delay_ms(50);
fast detta är i MikroC
Re: Har pickit2, och vill inkludera delays..
Postat: 22 maj 2009, 17:16:06
av bos
leynad skrev:Jo vad jag undrade var hur jag i början av mitt program ska initiera eller inkludera delay biblioteket.
Finns det ens ett sådant?
En sökning på "delay" i min MPLAB-installationskatalog ger bara träffar för ICE 2000. Hi-Techs C-kompilator har så vitt jag vet inget "delay-bibliotek". Min fullversion av kompilatorn har "delay.c" som sample-källkod, men det är inte i något bibliotek.
delay.h:
Kod: Markera allt
/*
* Delay functions for HI-TECH C on the PIC
*
* Functions available:
* DelayUs(x) Delay specified number of microseconds
* DelayMs(x) Delay specified number of milliseconds
*
* Note that there are range limits: x must not exceed 255 - for xtal
* frequencies > 12MHz the range for DelayUs is even smaller.
* To use DelayUs it is only necessary to include this file; to use
* DelayMs you must include delay.c in your project.
*
*/
/* Set the crystal frequency in the CPP predefined symbols list in
HPDPIC, or on the PICC commmand line, e.g.
picc -DXTAL_FREQ=4MHZ
or
picc -DXTAL_FREQ=100KHZ
Note that this is the crystal frequency, the CPU clock is
divided by 4.
* MAKE SURE this code is compiled with full optimization!!!
*/
#ifndef XTAL_FREQ
#define XTAL_FREQ 4MHZ /* Crystal frequency in MHz */
#endif
#define MHZ *1000L /* number of kHz in a MHz */
#define KHZ *1 /* number of kHz in a kHz */
#if XTAL_FREQ >= 12MHZ
#define DelayUs(x) { unsigned char _dcnt; \
_dcnt = (x)*((XTAL_FREQ)/(12MHZ)); \
while(--_dcnt != 0) \
continue; }
#else
#define DelayUs(x) { unsigned char _dcnt; \
_dcnt = (x)/((12MHZ)/(XTAL_FREQ))|1; \
while(--_dcnt != 0) \
continue; }
#endif
extern void DelayMs(unsigned char);
delay.c:
Kod: Markera allt
/*
* Delay functions
* See delay.h for details
*
* Make sure this code is compiled with full optimization!!!
*/
#include "delay.h"
void
DelayMs(unsigned char cnt)
{
#if XTAL_FREQ <= 2MHZ
do {
DelayUs(996);
} while(--cnt);
#endif
#if XTAL_FREQ > 2MHZ
unsigned char i;
do {
i = 4;
do {
DelayUs(250);
} while(--i);
} while(--cnt);
#endif
}
Re: Har pickit2, och vill inkludera delays..
Postat: 22 maj 2009, 17:29:28
av leynad
ahh jag blir galen på denna pic,.. AVR och dess program är ju betydligt enklare att hanskas med. så här borde det se ut:
#include <htc.h>
#include <pic.h>
#include <delay.c>
main()
{
TRISC=0; // declare portb as outpot
for(;;) // do forever
{
RC0=1; // LED ON
DelayMs(100); // delay for 0.25 seconds
RC0=0; // LED OFF
DelayMs(100);
}
}
men felet jag får då är:
Executing: "C:\Program\HI-TECH Software\PICC\LITE\9.60\bin\picl.exe" -C C:\MPLAB_DEMO\MPLAB_DEMO.c --chip=16F690 -P --opt=default,+asm,-speed,9 --warn=0 --double=24 -q -g --asmlist "--errformat=Error [%n] %f; %l.%c %s" "--msgformat=Advisory[%n] %s" "--warnformat=Warning [%n] %f; %l.%c %s"
Error [141] C:\MPLAB_DEMO\MPLAB_DEMO.c; 3.18 can't open include file "delay.c": No such file or directory
********** Build failed! **************
Re: Har pickit2, och vill inkludera delays..
Postat: 22 maj 2009, 19:08:32
av cyr
Nu vet jag inte ens vad som finns och inte finns till din kompilator, men det väl förmodligen
#include <delay.h>
Du vill ha, inte delay.c ?
Re: Har pickit2, och vill inkludera delays..
Postat: 22 maj 2009, 20:41:08
av bos
leynad skrev:så här borde det se ut:
Med #include lägger du in header-filer, dvs ".h", inte källkodsfiler, ".c". Dessutom är det skillnad på #include <foo.h> och #include "foo.h", där den första varianten letar i systemets sökvägar medan den andra kollar i projektets sökväg.
Re: Har pickit2, och vill inkludera delays..
Postat: 22 maj 2009, 20:52:57
av bearing
leynad skrev:Executing: "C:\Program\HI-TECH Software\PICC\LITE\9.60\bin\picl.exe" -C C:\MPLAB_DEMO\MPLAB_DEMO.c --chip=16F690 -P --opt=default,+asm,-speed,9 --warn=0 --double=24 -q -g --asmlist "--errformat=Error [%n] %f; %l.%c %s" "--msgformat=Advisory[%n] %s" "--warnformat=Warning [%n] %f; %l.%c %s"
Argumentet -I saknas, det anger standardsökvägen till .h-filerna. Lägg till sökvägen via project settings.
Re: Har pickit2, och vill inkludera delays..
Postat: 22 maj 2009, 21:04:40
av bos
Det går bra att utelämna -I när man använder PICC, saker fungerar ändå.
Re: Har pickit2, och vill inkludera delays..
Postat: 22 maj 2009, 21:20:00
av bearing
Då verkar det ju lämpligt att leynad klistrar in felmeddelandet som kommer då delay.h inkluderas.
Re: Har pickit2, och vill inkludera delays..
Postat: 22 maj 2009, 21:32:41
av Icecap
Ah men snälla... med #include kan man lägga in vilken fil som helst!
Och att det inte finns ett delay-bibliotek är för att det inte behövs! MikroC har den funktion men behöver man sånt är det något fundamentalt fel med programmet till att börja med, det finns dock enstaka funktioner som behöver en delay men då är det så korta att ett par NOP brukar göra susen, det kan t.ex. vara strobe till ett LCD-modul eller liknande.
Och att påstå att AVR är bättre av den anledning är verkligen att inte veta vad man håller på med! Jag är alldeles säker på att Atmel inte har gjort ett delay-bibliotek och det har enbart med fel programmeringsteknik att göra om man hänger på att måste ha en delay-funktion.