Voor de verandering wilde ik is een keer een PIC programmeren met MPLAB en de HI-TECH C compiler. De compiler lijkt te werken en levert netjes een HEX file af.

Als voorbeeldprogramma heb ik het volgende gemaakt:

#include <pic.h>

//#include "delay.c"
main()
{
    TRISB=0; // PORTB output
    PORTB = 0;
    while(1) {
        RB0=1; //turn LED on
        //DelayBigMs(250);
        RB0=0; //turn LED off
        //DelayBigMs(250);
    }
}

De compiler geeft het volgende weer na het compilatie process:

Clean: Deleting intermediary and output files.
Clean: Deleted file "C:\my software\main.p1".
Clean: Done.
Build C:\my software\BLINKALED877 for device 16F877A
Using driver C:\Program Files\HI-TECH Software\PICC\9.71a\bin\picc.exe

Executing: "C:\Program Files\HI-TECH Software\PICC\9.71a\bin\picc.exe" --pass1 "C:\my software\main.c" -q --chip=16F877A -P --runtime=default --opt=default -D__DEBUG=1 -g --asmlist "--errformat=Error   [%n] %f; %l.%c %s" "--msgformat=Advisory[%n] %s" "--warnformat=Warning [%n] %f; %l.%c %s" 
Executing: "C:\Program Files\HI-TECH Software\PICC\9.71a\bin\picc.exe" -oBLINKALED877.cof -mBLINKALED877.map --summary=default --output=default main.p1 --chip=16F877A -P --runtime=default --opt=default -D__DEBUG=1 -g --asmlist "--errformat=Error   [%n] %f; %l.%c %s" "--msgformat=Advisory[%n] %s" "--warnformat=Warning [%n] %f; %l.%c %s" 
Licensed for evaluation purposes only.
This licence will expire on Fri, 10 Dec 2010.
HI-TECH C Compiler for PIC10/12/16 MCUs (PRO Mode)  V9.71a
Copyright (C) 2010 Microchip Technology Inc.

Memory Summary:
    Program space        used    3Bh (    59) of  2000h words   (  0.7%)
    Data space           used     7h (     7) of   170h bytes   (  1.9%)
    EEPROM space         used     0h (     0) of   100h bytes   (  0.0%)
    Configuration bits   used     0h (     0) of     1h word    (  0.0%)
    ID Location space    used     0h (     0) of     4h bytes   (  0.0%)

Loaded C:\my software\BLINKALED877.cof.

********** Build successful! **********

En het programmeren gaat ook goed, verificatie geeft geen problemen.

Maar de led wil maar niet knipperen.

Heeft iemand enig idee waar het mis gaat?

Het ledje staat nu op enkele MHz te knipperen.

Waarom zijn je delays comment?

Die zijn weggefilterd om er zeker van te zijn dat de delay_lussen niet het probleem gaven. Met een scope is er echter ook geen blokgolf te zien.

Heb je de in MPLAB de fuses van de desbetreffende pic juist gezet ?

#include <htc.h>
#define XTAL_FREQ 20MHZ
#include "delay.h"

__CONFIG (UNPROTECT & WDTDIS & LVPDIS & BOREN & MCLREN & PWRTEN & WDTDIS & HS);

void main (){

TRISB = 0x00;

while (1) {
	RB0 = 1;
	}
}

Heb nu deze code en de LED gaat aan :). Geen idee waar nu precies het grote verschil in zit. Behalve:

#define XTAL_FREQ 20MHZ

En dat de fuse bits in de code geset worden...

Als je MCLRE uit staat, mag de programmer niks meer doen na een keer geprogrammeerd te hebben, omdat de chip niet meer op de VPP pin reageert. Misschien was dat het probleem?

Lijkt me niet, ik heb MCLR altijd enabled staan omdat de reset knop dan teminste werkt.

Die #define Xtal had je delay waarschijnlijk nodig, maar dan had je nog met een scoop een toggle moeten meten op de led. Het zal wel aan de fusebits gelegen hebben.

Mja ik ga er op dit moment vanuit dat de fuse bits niet netjes overgenomen worden door de HI-TECH C compiler en dat de frequentie van het kristal ook in de code moet staan.

In het begin had je de fusebits toch niet geset of gereset ?

#include <pic.h>

//#include "delay.c"
main()
{
    TRISB=0; // PORTB output
    PORTB = 0;
    while(1) {
        RB0=1; //turn LED on
        //DelayBigMs(250);
        RB0=0; //turn LED off
        //DelayBigMs(250);
    }
}
#include <htc.h>
#define XTAL_FREQ 20MHZ
#include "delay.h"

__CONFIG (UNPROTECT & WDTDIS & LVPDIS & BOREN & MCLREN & PWRTEN & WDTDIS & HS);

void main (){

TRISB = 0x00;

while (1) {
	RB0 = 1;
	}
}