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?
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.
AC/DrieC
Den Dries www.hulens.be
#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 20MHZEn dat de fuse bits in de code geset worden...
mr.stijntje
Een banaan schillen met een vork is slimmer dan een cactus pellen met een afwaskwast. ©Graafvaag
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?
AC/DrieC
Den Dries www.hulens.be
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.
AC/DrieC
Den Dries www.hulens.be
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;
}
}