Hallo,
Ik ben nieuw hier op het forum, en ben hier gekomen in de hoop dat jullie me kunnen helpen.
Eerst even iets over mij:
Ik ben Rik Hermsen en ik studeer elektrotechniek aan de TU in eindhoven. Al een paar jaren ben ik wat aan het prutsen met elektronica, vandaar ik voor elektrotechniek heb gekozen. Ik ben er tweede jaar student, en het bevalt me prima.
Nu mij probleem:
Ik probeer al een aantal weken mijn PIC18F4550 te programmeren. Ik heb bij www.voti.nl een Wisp628 gekocht, en ben hiermee begonnen met 16F628A'tjes te programmeren. Maar toen wilde ik de 4550 gaan programeren en in het begin lukte dat niet. Toen kwam ik er achter dat ik de firmware van mijn wisp moest upgraden naar v1.11 . Toen ik dat gedaan had wilde ik code maken, maar dat MPLab wil maar niet. Ik heb C geleerd te programmeren in mijn eerste jaar, maar dit C18 is toch wel even wat anders. Nu wil ik dus een ledje laten knipperen op de RA0 poort van de PIC18F4550. Maar blijkbaar werkt mijn programma niet.
De code die ik gebruikt heb:
#include <p18f4550.h> //Laden van de benodigde bibliotheken
#include <delays.h> //Bib. met standard delay-functies
//Code die altijd ingevoegd moet worden i.v.m. bootloader
extern void _startup (void);
#pragma code _RESET_INTERRUPT_VECTOR = 0x000800
void _reset (void)
{
_asm goto _startup _endasm
}
#pragma code
#pragma code _HIGH_INTERRUPT_VECTOR = 0x000808
void _high_ISR (void)
{
;
}
#pragma code
#pragma code _LOW_INTERRUPT_VECTOR = 0x000818
void _low_ISR (void)
{
;
}
#pragma code
void main(void) //Start programma
{
TRISA=0x00; //Maak alle pinnen van poort A output
ADCON1=0b00001111; //Zet AD-converters uit
while(1) //Draai continu het volgende stuk code
{
PORTAbits.RA0 = 1; //Maak pin A0 hoog
Delay10KTCYx(200); //Wacht 200x10000 clockcycles
PORTAbits.RA0 = 0; //Maak pin A0 laag
Delay10KTCYx(200); //Wacht 200x10000 clockcycles
}
}
wat doe ik fout???
ik weet zeker dat mijn schakeling klopt. Ik programmeer met een wisp628 en met bumblebee als programma.
[Edit: Deze code heb ik uit een handleiding samengesteld, en het viel me op dat ze nergens de frequentie defineerde, bij JAL (just another language) gebeurde dat bij de include ]
Alvast bedankt en groeten Rik
Ik prog niet in C, maar moet je de fuses niet instellen ?
[Bericht gewijzigd door MMSoft op (50%)]
Op 20 augustus 2007 18:15:52 schreef MMSoft:
Ik prog niet in C, maar moet je de fuses niet instellen ?
fuses???
geen idee
Op 20 augustus 2007 18:23:41 schreef MMSoft:
Of te wel de 'Configuratie'
kijk en dat is waar het bij mij ontbreekt, ik heb een hele manual van de TU doorgelezen, maar die gebruiken een PIC DEV board, en ik een Wisp628
bij C18 compiler include ik:
blinkled.c (bovenstaande code)
p18f4550.h (header file)
p18f4550.lib (library file)
18f4550.lkr (linker file)
zou het dan aan een van deze bestander liggen??
Ik prog niet in C, maar in ASM geef ik zo de configuratie op:
Configuratie t.b.v. een PIC18F4550:
__CONFIG _CONFIG1L, B'00000000'
__CONFIG _CONFIG1H, B'00001100'
__CONFIG _CONFIG2L, B'00011001'
__CONFIG _CONFIG2H, B'00011110'
__CONFIG _CONFIG3H, B'10000011'
__CONFIG _CONFIG4L, B'00000000'
__CONFIG _CONFIG5L, B'00001111'
__CONFIG _CONFIG5H, B'11000000'
__CONFIG _CONFIG6L, B'00001111'
__CONFIG _CONFIG6H, B'11100000'
__CONFIG _CONFIG7L, B'00001111'
__CONFIG _CONFIG7H, B'01000000'
Edit:
Ik heb 'vroeger' ooit even met C gewerkt, en heb even in deze oude bestanden gekeken.
De fuses (configuratie) moeten opgegeven (ingesteld) worden !
In dit geval in het bestand 'blinkled.c'
mmm, ik heb iets gevonden om de watchdogtimer in te stellen, deze moet dus uit staan:
#pragma config WDT = OFF;
Het zou handig zijn als iemand voorbeeldcode zou hebben
, en hier zou posten. Aan jullie "instellingen" te zien zal die WDT vast niet de enige zijn.....
[Bericht gewijzigd door Henry S. op (61%)]
Hierbij het begin van mijn oud C progje.
#include <18f4550.h>
#use delay( clock=20000000 ) // 20MHz
#fuses HS,NOWDT,NOPROTECT,NOLVP,NODEBUG
Phlogiston
"If a rocket goes up, who cares where it comes down." - Wernher von Braun
Het zou handig zijn als iemand voorbeeldcode zou hebben , en hier zou posten. Aan jullie "instellingen" te zien zal die WDT vast niet de enige zijn.....
Als je echt wil gaan begrijpen kun je beter gewoon de datasheets van je chippie even lezen. Gratis down te loaden van microchip. In dit geval staat wat jij wil weten in de 'programming specs', op bladzijde 32 en verder:
http://ww1.microchip.com/downloads/en/DeviceDoc/39622k.pdf
Iemands code copieren kan natuurlijk wel, maar dan snap je nog niet wat er gebeurt.
Jochem
If you want to succeed, double your failure rate.
Uit de datasheet kun je wel de verschillende fuses halen, maar niet opmaken hoe een compiler de instellingen verwacht.
In de C18-documentatie moet iets geschreven staan over de pragma directives om de fuses in te stellen, dus ga op zoek naar dat document.
#pragma config PLLDIV = 2
#pragma config CPUDIV = OSC1_PLL2
#pragma config USBDIV = 2
#pragma config FOSC = HSPLL_HS
#pragma config FCMEM = OFF
#pragma config IESO = OFF
#pragma config PWRT = ON
#pragma config BOR = OFF
#pragma config BORV = 21
#pragma config VREGEN = ON
#pragma config WDT = OFF
#pragma config WDTPS = 1
#pragma config MCLRE = ON
#pragma config LPT1OSC = OFF
#pragma config PBADEN = OFF
#pragma config CCP2MX = ON
#pragma config STVREN = ON
#pragma config LVP = OFF
#pragma config ICPRT = OFF
#pragma config XINST = OFF
#pragma config DEBUG = OFF
#pragma config CP0 = OFF
#pragma config CP1 = OFF
#pragma config CP2 = OFF
#pragma config CP3 = OFF
#pragma config CPB = OFF
#pragma config CPD = OFF
#pragma config WRT0 = OFF
#pragma config WRT1 = OFF
#pragma config WRT2 = OFF
#pragma config WRT3 = OFF
#pragma config WRTB = OFF
#pragma config WRTC = OFF
#pragma config WRTD = OFF
#pragma config EBTR0 = OFF
#pragma config EBTR1 = OFF
#pragma config EBTR2 = OFF
#pragma config EBTR3 = OFF
#pragma config EBTRB = OFF
/*
#pragma config PLLDIV = 2 // 8 Mhz
#pragma config CPUDIV = OSC1_PLL2
#pragma config USBDIV = 2 // from 96 Mhz PLL divided by 2
#pragma config FOSC = HSPLL_HS
#pragma config FCMEM = OFF
#pragma config IESO = OFF
#pragma config PWRT = OFF
#pragma config BOR = ON
#pragma config BORV = 43
#pragma config VREGEN = ON
#pragma config WDT = OFF
#pragma config WDTPS = 32768
#pragma config MCLRE = ON
#pragma config LPT1OSC = OFF
#pragma config PBADEN = OFF
#pragma config CCP2MX = ON
#pragma config STVREN = ON
#pragma config LVP = OFF
#pragma config ICPRT = OFF
#pragma config XINST = OFF
#pragma config DEBUG = OFF
#pragma config CP0 = OFF
#pragma config CP1 = OFF
#pragma config CP2 = OFF
#pragma config CP3 = OFF
#pragma config CPB = OFF
#pragma config CPD = OFF
#pragma config WRT0 = OFF
#pragma config WRT1 = OFF
#pragma config WRT2 = OFF
#pragma config WRT3 = OFF
#pragma config WRTB = OFF
#pragma config WRTC = OFF
#pragma config WRTD = OFF
#pragma config EBTR0 = OFF
#pragma config EBTR1 = OFF
#pragma config EBTR2 = OFF
#pragma config EBTR3 = OFF
#pragma config EBTRB = OFF
bedankt Phlogiston, In de Datasheet van de 4550 staat inderdaad de benodigde informatie. Van pag. 34 tot 39 staat het per BIT NAME uitgelegd, welke instelling je kunt kiezen. Veel van deze instellingen (BIT NAMEs) zie ik terug in jouw Post MMSOFT
, bedankt hiervoor! Ik vraag me alleen af of alle BIT NAMES ingesteld moeten worden, voor de werking van de PIC. Het is namelijk best onhandig om steeds al die regels bovenaan je Code te moeten zetten. (ik zou hier natuurlijk een include file voor kunnen maken
) Morge ben ik op TU, en dan ga ik eens wat dingen proberen. Tot zo ver kan ik alleen de datasheet goed doorlezen en morgen hopen dat het werkt 
Gr. Rik
Alleen de instellingen die afwijken van de default hoef je in te stellen. Meestal zijn dat de oscillator configuratie en de watchdog. Als je in het doc mapje van de compiler kijkt vindt je daar het PIC18-Config-Settings-Addendum_51537f.pdf bestand waar ze allemaal instaan.
Ik gebruik bijna nooit meer dan:
#pragma config WDT = OFF, PWRT = ON, LVP = OFF
#pragma config OSC = HSPLLbedankt jowi, intussen had ik al iets geprobeert. Ik Ga het morgen proberen.
qua instellingen had ik het volgende:
(ik kon BOR niet vinden in de 4550 lijst, en FCMEM, stond er als FCMEN
daarom: de comments met een - ervoor heb ik de BIT NAME veranderd
//fuses.c//
//gebruik 20 MHz Kristal//
#pragma config PLLDIV = 4 //delen door 5
#pragma config CPUDIV = 0 //geen deling
#pragma config USBDIV = 0 //geen deling
#pragma config FOSC = 2 //XT, PLL,XT USB
#pragma config FCMEN = OFF //-geen failsafe
#pragma config IESO = OFF //I-O switchover uit
#pragma config PWRTEN = ON //-power up time on
//#pragma config BOR = OFF //staat niet in lijstje
#pragma config BORV = 3 //BORV set to 2V
#pragma config VREGEN = ON //voltage regulator on
#pragma config WDTEN = OFF //-Watch dog timer uit
#pragma config WDPS = 0 //- 1:1
#pragma config MCLRE = ON //MCLR Enabled
#pragma config LPT1OSC = OFF //Timer1 high power
#pragma config PBADEN = OFF //ADC digital I/O on PortB
#pragma config CCP2MX = ON //CCP multiplexed with C1
#pragma config STVREN = ON //Stack overflow reset on
#pragma config LVP = ON //LVP is PGM pin (low voltage programming)
#pragma config ICPRT = OFF //In circuit port disabled
#pragma config XINST = OFF //extended instr. bit disabled
#pragma config DEBUG = ON //B6 B7 std io
#pragma config CP0 = OFF //All blocks code and write protected
#pragma config CP1 = OFF
#pragma config CP2 = OFF
#pragma config CP3 = OFF
#pragma config CPB = OFF
#pragma config CPD = OFF
#pragma config WRT0 = OFF
#pragma config WRT1 = OFF
#pragma config WRT2 = OFF
#pragma config WRT3 = OFF
#pragma config WRTB = OFF
#pragma config WRTC = OFF
#pragma config WRTD = OFF
#pragma config EBTR0 = OFF
#pragma config EBTR1 = OFF
#pragma config EBTR2 = OFF
#pragma config EBTR3 = OFF
#pragma config EBTRB = OFF
Wat zouden jullie doen, alleen de code val jowi gebruiken of deze waslijst in de code zetten?:P
Gr. Rik
Jochem
If you want to succeed, double your failure rate.
Alleen de instellingen die afwijken van de default hoef je in te stellen. Meestal zijn dat de oscillator configuratie en de watchdog. Als je in het doc mapje van de compiler kijkt vindt je daar het PIC18-Config-Settings-Addendum_51537f.pdf bestand waar ze allemaal instaan.
Gewoon dit aanhouden, de lijst van MMsoft is handig ter referentie.
ik heb nu echt vanalles gerpobeert, en niets werkt. Ik heb de schakeling 2 x gecontroleerd. Bumblebee kan de PIC programmeren, maar het ledje blijft uit. Balen 
Gr. Rik
Prog onderstaande HEX code eens in je PIC.
Gebruik een 20 Mhz kristal en sluit het LEDje op D0 aan.
:020000040000FA
:0400000028EF00F0F5
:040008001BEF00F0FA
:080018000EEF00F0D8CF20F03C
:10002000E8CF21F0E0CF22F022C0E0FF21C0E8FFBE
:1000300020C0D8FF1000D8CF20F0E8CF21F0E0CFCB
:1000400022F022C0E0FF21C0E8FF20C0D8FF10004E
:10005000F86AEA6AE96A000E806E816E826E836ECB
:100060000F0EC16E070EB46EFF0E926EFF0E936EF2
:10007000000E946E000E956ED09EF296F298F09659
:10008000F09843EF00F08C80050E05D88C90050E9B
:1000900002D843EF00F0236E235201E11200050E57
:1000A000246E2350276E820E266EFF0E256E252E9F
:1000B00057EF00F0262E55EF00F0272E53EF00F0FB
:0800C000242E51EF00F01200A4
:020000040030CA
:0E000000000C191EFF8300FF0FC00FE00F4021
:00000001FF
Bij de 18 serie zet je een poort zo:
LATAbits.LATA4 = 1
status lees je uit:
PORTAbits.RA1
Ze hebben een apart register voor input en output.
Zie ook datasheet hoofdstuk 10 IO ports
vergeet ook niet de poorten op digitaal te maken:
ADCON1 |= 0x0F; // all digital
[Bericht gewijzigd door s@nderman op (19%)]
Op 22 augustus 2007 14:14:42 schreef MMSoft:
Prog onderstaande HEX code eens in je PIC.
Gebruik een 20 Mhz kristal en sluit het LEDje op D0 aan.:020000040000FA :0400000028EF00F0F5 :040008001BEF00F0FA :080018000EEF00F0D8CF20F03C :10002000E8CF21F0E0CF22F022C0E0FF21C0E8FFBE :1000300020C0D8FF1000D8CF20F0E8CF21F0E0CFCB :1000400022F022C0E0FF21C0E8FF20C0D8FF10004E :10005000F86AEA6AE96A000E806E816E826E836ECB :100060000F0EC16E070EB46EFF0E926EFF0E936EF2 :10007000000E946E000E956ED09EF296F298F09659 :10008000F09843EF00F08C80050E05D88C90050E9B :1000900002D843EF00F0236E235201E11200050E57 :1000A000246E2350276E820E266EFF0E256E252E9F :1000B00057EF00F0262E55EF00F0272E53EF00F0FB :0800C000242E51EF00F01200A4 :020000040030CA :0E000000000C191EFF8300FF0FC00FE00F4021 :00000001FF
ik heb deze code in de pic geladen, maar van bumblebee krijg ik dan bij de een verify error:
Error:
Verify error at adress 0x300004. Value in image is 0xFF and value in target is 0x00
echter doet het ledje het wel, alleen knippert hij niet bepaald om de zelfde tijd. Na enige tijd blijft het ledje branden.
Ik weet niet wat de bedoeling van het programma was?
Gr. Rik
Om uit te sluiten waar het probleem zit.
-Software probleem.
-Probleem met het 'branden' van de PIC.
-PIC Aansluit probleem.
De LED moet regelmatig knipperen, dus daar zit al een probleem.
Hoe heb je de PIC aangesloten ?
ik heb beide VSS en VDD aangesloten(VSS->0V,VDD->5V). dan heb ik pin 1 met een 33k weerstand naar de 5V gebracht(de gele draad van mijn wisp zit ook op pin 1). Vervolgens heb ik de led op D0 gezet met een 330 Ohm naar de aarde. tussen OSC1 en OSC2 heb ik een 20 MHz kristal gezet met twee 22pF condensators naar de aarde. verder zit op volgorde wit groen blauw op 38, 89,40. en natuurlijk de wisp van 5V spanning voorzien.
Wat misschien mogelijk is, de spanning wordt eerst geregeld door een 7805, maar ik had geen condensators om te "ontstoren". kan hier de oorzaak liggen?
Ik zal morgen een foto maken, dan is het duidelijker
Alvast bedankt
Groeten Rik
[Bericht gewijzigd door Henry S. op (20%)]
...Wat misschien mogelijk is, de spanning wordt eerst geregeld door een 7805, maar ik had geen condensators om te "ontstoren". kan hier de oorzaak liggen?...
Dat is heel goed mogelijk.
Plaats eens een paar Elco's en enkele 100nf Ctjes (heb je geen oude print liggen waar je deze af kunt halen ?).
Jochem
If you want to succeed, double your failure rate.
Behalve nabij de regulator ook graag een 100nF in de buurt van de PIC. (Tenzij die regulator naast je PIC staat natuurlijk)
Durf m´n kop d´r om te verwedden dat bij die C´tjes je probleem ligt.
Een 'goede voeding' is de eerste vereiste !
Met een 7805 zonder een paar Elco's en enkele 100nf Ctjes kan het gewoon niet goed werken !
Op 24 augustus 2007 08:58:02 schreef MMSoft:
Een 'goede voeding' is de eerste vereiste !
Plaats eens een paar Elco's en enkele 100nf Ctjes (heb je geen oude print liggen waar je deze af kunt halen ?).
Met een 7805 zonder een paar Elco's en enkele 100nf Ctjes kan het gewoon niet goed werken !
Ik heb hier een leuk voorraadje met elko's en schijfcondensators liggen, dat ga ik dus morgen proberen. Ook heb ik een stuk of 7 4550 liggen, dus ook dat is het probleem niet.
Gr. Rik