www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC_4MHz_Grundlegende Frage BITTE!


Autor: Picmaster (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!!

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Picmaster (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: picpic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hitech C bietet eine Delay-Routine mit
ihren Samples an.. Falls du sie
nicht finden kannst :


Der Source-Code :
#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
}



Die Header-Datei :


/*
 *  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);




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

Autor: Picmaster (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
DANKE

hat mir weitergeholfen!!!


mfg

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.