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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.