Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

knipperlicht met pic18f4550 doet niks

Pagina: 1
Acties:
  • 214 views sinds 30-01-2008
  • Reageer

  • Corpse2
  • Registratie: Januari 2004
  • Laatst online: 07-01-2023
Ik heb onlangs hetvolgende schema met een pic 18f4550 nagebouwd op basis van
http://www.create.ucsb.edu/%7Edano/CUI/

Afbeeldingslocatie: http://img165.imageshack.us/img165/8240/mediainterfacecircuitij9.th.jpg

Bij de voorbeeldcode zit een bootloader en voorbeeldcode om de microcontroller zich als HID gamecontroller te laten voordoen. Tot zover alles nog goed, dit werkt allemaal, maar aangezien het de bedoeling is om hier zelf dingen mee te gaan doen had ik zelf even een programmatje in C18 geschreven om een ledje te laten knipperen.

Deze pic is uiteraard zwaar overkill voor een knipperlichtje maar dit is ook maar even om te zien of zelf iets programmeren lukt, wat dus tot nu toe niet helemaal het geval is...

de code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/** I N C L U D E S **********************************************************/ 
 #include <p18cxxx.h> 
 #include "delays.h"                   
   

 /** Configuration ********************************************************/ 
#pragma config PLLDIV = 5
#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 = 3
#pragma config VREGEN = ON
#pragma config WDT = OFF
#pragma config WDTPS = 32768 //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 WRTB = ON   // since this is not the bootloader... ?????
#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 

 /** D E C L A R A T I O N S **************************************************/ 
 #pragma code 
 void main(void) 
 { 
    TRISB = 0;
    LATB = 0; 
   while(1) 
   { 
        LATB = 0; 
        Delay10KTCYx(200); 
        LATB = 1; 
        Delay10KTCYx(200); 
   }//end while 
 }//end main


Als ik dit rechtstreeks programmeer met mijn wisp628 programmer, dan knippert het ledje op RB0 probleemloos.
Wanneer ik echter die bootloader gebruik om daarna via usb dit programmaatje te programmeren met pdfsusb.exe, dan gebeurt er gewoon niks.

Heeft er iemand een idee waar het misloopt of wat ik kan proberen?
ik kan eventueel de hex file ook wel ergens uploaden als iemand wil proberen...

keep trying...


  • naftebakje
  • Registratie: Februari 2002
  • Laatst online: 08:44
Aangezien je code rechtstreeks in een PIC wel werkt, ligt het probleem puur aan de bootloader die het programma blijkbaar niet goed geschreven krijgt.

Wat een voor de hand liggende moeilijkheid is, is dat de eerste instructie (vlak na org 0x00 dus) een NOP instructie moet zijn, zodat de bootloader daar een GOTO kan plaatsen naar zichzelf, en bij het opstarten van de PIC de bootloader in actie kan komen. Als je nu echter de eerste instructie hebt gebruikt (doorgaans een goto naar het eigenlijke programma, want op ORG 0x04 moet de interrupt-code starten) zal deze ook overschreven worden door de GOTO naar de bootloader, deze zal na zijn werkt te doen (kijken of er iemand de PIC wil programmeren) een GOTO doen naar de 2e instructie (vlak na de verplichte NOP, als je deze wel hebt gezet dan staat daar de GOTO naar jou eigen programma).
Doorgaans kan je dat in de compiler aangeven met iets van ICD_enable ofzo (ook ICD werkt op een vergelijkbare manier), zie de help dus.

Sla er ook eens de documentatie van de gebruikte bootloader op na, om te zien welke eisen deze stelt aan je programma.

Als de boer zijn koeien kust, zijn ze jarig wees gerust. Varkens op een landingsbaan, leiden nooit een lang bestaan. Als de boer zich met stront wast, zijn zijn hersens aangetast. Als het hooi is in de schuur, zit het wijf bij den gebuur.


  • Corpse2
  • Registratie: Januari 2004
  • Laatst online: 07-01-2023
het vreemde is dat het wel lukt om het voorbeeldprogramma dat bij die CUI zit via die bootloader te laden. Ik ga die source een keer wat bekijken denk ik.

keep trying...


  • Corpse2
  • Registratie: Januari 2004
  • Laatst online: 07-01-2023
vanop het microchip forum kreeg ik ook al de hint dat ik een ander linker script moet gebruiken als ik met een bootloader werk (wat op zich wel logisch is maar ik had er nog niet bij stilgestaan).
Ik zal dit een beetje verder moeten onderzoeken maar het zal voor een andere keer zijn :O

keep trying...


  • Corpse2
  • Registratie: Januari 2004
  • Laatst online: 07-01-2023
ok, ik heb het aan de praat gekregen met een ander voorbeeldprojectje

keep trying...


  • Sprite_tm
  • Registratie: September 2002
  • Laatst online: 29-10 06:07

Sprite_tm

Semi-Chinees

Prima, zou je hier ook nog details kunnen posten zodat evt. andere mensen die in de toekomst met hetzelfde probleem je antwoord in de search kunnen terugvinden?

Relaxen und watchen das blinkenlichten. | Laatste project: Ikea Frekvens oog


  • Corpse2
  • Registratie: Januari 2004
  • Laatst online: 07-01-2023
mja, eigenlijk heb ik het heel simpel opgelost op deze manier:

op http://www.create.ucsb.edu/%7Edano/CUI/ wordt een voorbeeld programma geleverd om de pic als gamecontroller te gebruiken.
Ik heb daar gewoon the main functie vervangen door iets dat een ledje laat knipperen en dat werkte.

Ik heb verder nog niet gekeken welke code die verder in dat project zat precies de oorzaak was dat het voordien niet werkte maar ik ga mij vanaf nu hier gewoon op baseren.

keep trying...

Pagina: 1