2010-11-23 30 views
0

J'essaie de commencer avec pic24, en particulier le PIC24FJ64GA002, et j'ai regardé dans la feuille de données sur les registres et autres joyeusetés, mais je ne peux toujours pas le faire clignoter les leds. Lorsque je l'exécute via le débogage, il fonctionne correctement, mais quand j'essaie de l'exécuter sur la photo, il ne semble pas fonctionner du tout.Pourquoi mon PIC ne clignote pas ses leds?

J'utilise un oscillateur externe, un oscillateur 8MHZ spécifiquement, connecté aux broches 9 (OSCI) et 10 (OSCO). Le compilateur est C30 dans Mplab.

lien fiche technique: http://ww1.microchip.com/downloads/en/DeviceDoc/39881D.pdf

Le code est ci-dessous

//include basic header definition 
#include <p24FJ64GA002.h> 

//config 
_CONFIG2(0x0200); 
_CONFIG1(0x0800); 

int i; 

//main loop 
int main(void) 
{ 

    OSCCON = 0x2280; //select external OSC, no PLL 
    AD1PCFG  = 0xFFFF; //set to all digital I/O 
    TRISA = 0x0000; //configure all PortA as output 

    while(1) //Loop forever 
    { 
    LATAbits.LATA0 = 1; //RA0 = 1 
    Wait(); 
    LATAbits.LATA0 = 1; //RA0 = 1 
    Wait(); 
    } 

} 


int Wait(void) // gives me a nice delay of 1/3rd a second or so 
{ 
for (int i = 0; i < 30000; i++) 
{ 
    for (int i = 0; i < 30; i++); 
    } 

} 

Répondre

0

Merci les gars pour toute votre aide, mais c'est parce que j'ai mis mal les bits de configuration, quand je les ai mis dans l'éditeur de configuration dans mplab tout fonctionne bien.

Merci pour votre aide!

+0

Vous devriez accepter ceci comme réponse, donc cette question sera marquée comme "répondue". –

+2

Pour la prochaine âme pauvre qui rencontre cette question avec un problème similaire, pourriez-vous éditer ces questions et spécifier quel bit de configuration était incorrect et quelle valeur corrigeait le problème? – spade78

7

Vous devez aller salut, attendez, puis lo, attendez ... vous allez juste salut, attendez , salut, attends.

while(1) //Loop forever 
    { 
    LATAbits.LATA0 = 1; //RA0 = 1 
    Wait(); 
    LATAbits.LATA0 = 0; //RA0 = 1 
    Wait(); 
    } 
+0

semble très logique + 1 – Chubsdad

+0

@ Chubsdad Programmation est logique par définition :) – ruslik

+0

Oh, c'était une faute de frappe de ma part, le code réel n'a pas le changement de verrouillage correct, de 0 à 1. De toute façon, la led ne s'allume pas réellement. Je pense que j'ai mal réglé certains registres, comme les mots de configuration ou les périphériques. Je pense que l'ADC a été éteint correctement, seules les autres choses sur ces broches sont le Vref et certaines interruptions. – hak8or

0

Avec quel niveau d'optimisation compilez-vous? Si cela ne fonctionne que dans le débogage, il est possible que l'optimiseur réduise la fonction Wait() à un no-op. Essayez de déclarer `volatile int i '.