hallo, hab mit dem pic programmieren in C (Hi-Tech Compiler) angefangen und hab mir dazu ein kleines testboard zusammengebastelt! verwende den pic 16F917 würde den gerne mit einem 4MHz quarz betreiben! hab einen angeschlossen, und laut osciloskop schwingt er auch schön! jetzt zu meiner frage: muss ich ausser XT beim den fuses noch was anderes machen damit ich den quarz als clock verwenden kann? hab eine delay routine mit for schleifen realisiert die bis 4000 zählt damit ich eine Ms bekomm aber irgendwie stimmt das nich wenn ich eine led blinken lass! sie blinkt viel zu langsam meines erachtens! wie mach ich in C am besten eine delay routine delay MS delay US in pseudo C? danke erst mal!!
Du weisst vielleicht, dass der PIC die Oszillatorfrequenz durch vier teilt. Dies ist dann der Instruktionsclock. Ansonsten ein paar Links zu PICs: http://www.microchipc.com/ (beachte das ...c.com) http://www.fernando-heitor.de http://www.sprut.de
DANKE erst mal wusste ich leider nicht, dass dieser fix eingestellt ist! ist es irgendwie möglich diesen teiler abzuschalten und damit die instructionsclock direkt mit 4 MHz laufen zu lassen? mfg
Hitech C bietet eine Delay-Routine mit ihren Samples an.. Falls du sie nicht finden kannst : Der Source-Code :
1 | #include "delay.h" |
2 | |
3 | void
|
4 | DelayMs(unsigned char cnt) |
5 | {
|
6 | #if XTAL_FREQ <= 2MHZ
|
7 | do { |
8 | DelayUs(996); |
9 | } while(--cnt); |
10 | #endif
|
11 | |
12 | #if XTAL_FREQ > 2MHZ
|
13 | unsigned char i; |
14 | do { |
15 | i = 4; |
16 | do { |
17 | DelayUs(250); |
18 | } while(--i); |
19 | } while(--cnt); |
20 | #endif
|
21 | }
|
Die Header-Datei :
1 | /*
|
2 | * Delay functions for HI-TECH C on the PIC
|
3 | *
|
4 | * Functions available:
|
5 | * DelayUs(x) Delay specified number of microseconds
|
6 | * DelayMs(x) Delay specified number of milliseconds
|
7 | *
|
8 | * Note that there are range limits: x must not exceed 255 - for xtal
|
9 | * frequencies > 12MHz the range for DelayUs is even smaller.
|
10 | * To use DelayUs it is only necessary to include this file; to use
|
11 | * DelayMs you must include delay.c in your project.
|
12 | *
|
13 | */
|
14 | |
15 | /* Set the crystal frequency in the CPP predefined symbols list in
|
16 | HPDPIC, or on the PICC commmand line, e.g.
|
17 | picc -DXTAL_FREQ=4MHZ
|
18 |
|
19 | or
|
20 | picc -DXTAL_FREQ=100KHZ
|
21 |
|
22 | Note that this is the crystal frequency, the CPU clock is
|
23 | divided by 4.
|
24 | |
25 | * MAKE SURE this code is compiled with full optimization!!!
|
26 |
|
27 | */
|
28 | |
29 | #ifndef XTAL_FREQ
|
30 | #define XTAL_FREQ 4MHZ /* Crystal frequency in MHz */ |
31 | #endif
|
32 | |
33 | #define MHZ *1000L /* number of kHz in a MHz */ |
34 | #define KHZ *1 /* number of kHz in a kHz */ |
35 | |
36 | #if XTAL_FREQ >= 12MHZ
|
37 | |
38 | #define DelayUs(x) { unsigned char _dcnt; \
|
39 | _dcnt = (x)*((XTAL_FREQ)/(12MHZ)); \
|
40 | while(--_dcnt != 0) \
|
41 | continue; }
|
42 | #else
|
43 | |
44 | #define DelayUs(x) { unsigned char _dcnt; \
|
45 | _dcnt = (x)/((12MHZ)/(XTAL_FREQ))|1; \
|
46 | while(--_dcnt != 0) \
|
47 | continue; }
|
48 | #endif
|
49 | |
50 | extern void DelayMs(unsigned char); |
Wenn du das alles sauber eingebunden hast, kannst du mit DelayMs(100); // 100ms Delay den Hamster halten lassen.. Schöner wärs natürlich mit Timers, aber first things first.. :-) Fiel schbass
Picmaster wrote: > DANKE erst mal > > wusste ich leider nicht, dass dieser fix eingestellt ist! > ist es irgendwie möglich diesen teiler abzuschalten und > damit die instructionsclock direkt mit 4 MHz laufen zu lassen? > > mfg Nein. Alternative wäre den PIC mit 16MHz zu betreiben. Dies ist übrigens ein Punkt bei den PICs, der von den hier im Forum in Überzahl vertretenen AVR-Fans immer bemängelt wird. Es ist halt so, und wenn man das verstanden hat, kann man sich Wichtigerem zuwenden.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.