PIC läuft zu langsam

Gast #4317628
Lesenswert?

Hallo liebe Spezialisten!

Ich habe nach dem folgenden Problem schon ziemlich viel recherchiert, 
bin aber noch nicht wirklich weitergekommen. Vielleicht kann mir jemand 
von euch einen Tipp geben. Hier mein Problem:

Ich versuche einen PIC16F886 zum Laufen zu bringen, habe mit dem PIC 
Controllern aber bisher noch keine Erfahrung. Deshalb habe ich mit einer 
einfachen Übung begonnen - eine blinkende LED(am Ende soll eine 
Servo-Steuerung mittels ADC herauskommen).
Konkret habe ich das Problem, dass der PIC in meinem Testaufbau nicht 
mit der eingestellten Frequenz läuft.

Bei der minimalen Oszillatorfrequenz von 31kHz passt alles, Theorie und 
Praxis zeigen bei einem 500ms Delay ein Blinken mit 2 Hz.

Bei höheren Frequenzen wird das 500ms Delay aber viel zu lang. Bei 4MHz 
um den Faktor 133 und bei 8MHz um den Faktor 303!

Eine Vermutung war ein Problem mit der Spannungsquelle oder ständige 
Resets, aber auch mit einem 5V Labornetzteil tritt das Problem auf.

Ich bin für zweckdienliche Tipps wirklich sehr dankbar!

Hier der C-Code (im MPLAB mit XC8 Compiler)
1
/*
2
 * Speed Test
3
 */
4
 
5
/******************************************************************************/
6
/* Config Word
7
/******************************************************************************/
8
// CONFIG1
9
#pragma config FOSC = INTRC_CLKOUT// Oscillator Selection bits (INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN)
10
#pragma config WDTE = OFF        // Watchdog Timer Enable bit (WDT enabled)
11
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
12
#pragma config MCLRE = ON       // RE3/MCLR pin function select bit (RE3/MCLR pin function is MCLR)
13
#pragma config CP = OFF         // Code Protection bit (Program memory code protection is disabled)
14
#pragma config CPD = OFF        // Data Code Protection bit (Data memory code protection is disabled)
15
#pragma config BOREN = OFF       // Brown Out Reset Selection bits (BOR enabled)
16
#pragma config IESO = ON        // Internal External Switchover bit (Internal/External Switchover mode is enabled)
17
#pragma config FCMEN = ON       // Fail-Safe Clock Monitor Enabled bit (Fail-Safe Clock Monitor is enabled)
18
#pragma config LVP = ON         // Low Voltage Programming Enable bit (RB3/PGM pin has PGM function, low voltage programming enabled)
19

20
// CONFIG2
21
#pragma config BOR4V = BOR21V   // Brown-out Reset Selection bit (Brown-out Reset set to 2.1V)
22
#pragma config WRT = OFF        // Flash Program Memory Self Write Enable bits (Write protection off)
23

24
#if defined(__XC)
25
    #include <xc.h> 
26
#elif defined(HI_TECH_C)
27
    #include <htc.h>
28
#endif
29

30
#include <stdint.h>
31
#include <stdbool.h>
32

33
#define _XTAL_FREQ 8000000  //processor clock frequency 
34

35
/******************************************************************************/
36
/* Main Program                                                               */
37
/******************************************************************************/
38
void main(void)
39
{
40
    /* Configure the oscillator for the device */
41
    OSCCON=0x01111001;  //8MHz
42

43
  //all output
44
  TRISA = 0;
45
    TRISB = 0;
46
    TRISC = 0;
47
    
48
    PORTA = 0;
49
    PORTB = 0;
50
    PORTC = 0;
51

52
  RC0 = 1;  //rc0 is used to detect resets
53
    __delay_ms(1);
54
    RC0 = 0;
55
    
56
    while(1)
57
    {
58
        RC3 = !RC3;   //mainloop
59
        __delay_ms(500);
60
    }
61
}
Angehängte Dateien:
Gast #4317736
Lesenswert?

maaah - Ihr seids ein Wahnsinn.
Thomas, genau das war das Problem, die Zuweisung muss natürlich 
OSCCON=0b01111001 heißen. Ich hab das echt zwei Tage erfolglos gesucht. 
Vielen vielen Dank!!

Peter, danke für den Hinweis mit der gelben LED, aber da ist schon ein 
Widerstand dahinter, das sieht man bei der Perspektive allerdings nicht.

Jetzt kann ich beruhigt schlafen gehen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren