Het gaat de goede kant op.
Bij Source File heb ik nu: lab1.asm
En bij Linker Scripts: 18f2455.lkr
Toch nog 5 fouten:
Error[176] E:\LAB1_PIC\LAB1.ASM 66 : CONFIG Directive Error: (value "21" not valid for setting "BORV")
Error[176] E:\LAB1_PIC\LAB1.ASM 76 : CONFIG Directive Error: (setting "ICPRT" not found for the processor 18F2455)
Error[176] E:\LAB1_PIC\LAB1.ASM 82 : CONFIG Directive Error: (setting "CP3" not found for the processor 18F2455)
Error[176] E:\LAB1_PIC\LAB1.ASM 88 : CONFIG Directive Error: (setting "WRT3" not found for the processor 18F2455)
Error[176] E:\LAB1_PIC\LAB1.ASM 95 : CONFIG Directive Error: (setting "EBTR3" not found for the processor 18F2455)
Waarvoor dient een Linker file precies ?
Uit dezelfde post waar je je software gevonden hebt:
They have replaced the meaning of brown-out detect from voltages to "steps" so it is now 0,1,2 or 3. Minimum setting (2.1v) is now 3.
Set in your codeCONFIG BORV = 3
_____________________________
Leo
I "upgraded" to MPLAB 7.3 the week after I made the last changes to my firmware. You can simply comment out all of the CONFIG settings that it is complaining about except for the BORV one, whose values have changed meanings from the prior versions of MPLAB. These configuration bit settings are really for the 40-pin chips in the series. Version 3.00 of the C18 compiler does not complain about the old configuration bit settings.
Brad Minch.
De Linker Scriptfile dient als input voor de linker en beschrijft het program en data geheugen van je PIC. Met het toevoegen van deze file geef je aan MPLAB aan dat je "relative code" gebruikt ipv "absolute code"
Bij absolute code heb je 1 ASM file die door de assembler tot een HEX file wordt gemaakt. Bij relative code kan je project uit meerdere ASM files bestaan, die worden ieder door de assembler tot OBJ file gemaakt. De Linker bindt dan die OBJ files samen tot een HEX file.
Bij absolute code zet je zelf je variabelen op bepaalde geheugen adressen. Bij relative code geef je alleen aan hoe groot ze zijn, de linker bepaald waar ze komen te staan.
Dit is niet "precies" waar de LKR file voor dient, maar wel in grote lijnen.
Bij absolute code heb je 1 ASM file die door de assembler tot een HEX file wordt gemaakt. Bij relative code kan je project uit meerdere ASM files bestaan, die worden ieder door de assembler tot OBJ file gemaakt. De Linker bindt dan die OBJ files samen tot een HEX file.
Bij absolute code zet je zelf je variabelen op bepaalde geheugen adressen. Bij relative code geef je alleen aan hoe groot ze zijn, de linker bepaald waar ze komen te staan.
Dit is niet "precies" waar de LKR file voor dient, maar wel in grote lijnen.
Wat is het voordeel van relative code ?
Het mooie van ASM vindt ik dat ik zelf alles kan bepalen.
Met relative code ben ik dat overzicht kwijt !
Is het (makkelijk) mogelijk om deze relative code zo aan te passen dat dit absolute code wordt ?
Ik heb tijdelijk mijn test bordje voor een andere opstelling in gebruik.
Het is de bedoeling dat ik er morgenavond weer de PIC18F2455 opprik... (Storings dienst, dus moeilijk plannen
).
Helaas geen USB verbinding.
Is de PIC18F2455 zo juist aangesloten ?
Pen
1 via 10K aan 5v
8 0v
9 Kristal 20Mhz
10 Kristal 20Mhz
14 C 470nF naar 0v
15 USB D-
16 USB D+
19 0v
20 5v
25 via 10K aan 5v
27 PGC
28 PGD
Code gecompileerd met MPLAB IDE 7.2
Hex file is 9.471 bytes groot
Van de USB connector heb ik de 5 volt aansluiting niet gebruikt.
Je moet in ieder geval de code aanpassen voor een 20Mhz kristal.
Je hebt geen 48Mhz kristal dus USB moet gevoed worden door de 96Mhz PLL:
config USBDIV = 2 ; 2: Clock source from 96MHz PLL/2
De PLL zelf moet gevoed worden met 4Mhz. Je hebt 20 dus de PLL Prescaler moet 5 zijn:
config PLLDIV = 5 ; 5: Divide by 5 (20MHz input)
Nu mag je zelf kiezen welke kloksnelheid je CPU krijgt: 5,6.66,10,16,20,24,32 of 48 Mhz.
Voor 5Mhz:
config FOSC = HS ; HS oscillator
config CPUDIV = OSC4_PLL6 ; Oscillator / 4 (20/4=5 Mhz)Voor 48 Mhz:
config FOSC = HSPLL_HS ; HS oscillator, PLL enabled
config CPUDIV = OSC1_PLL2 ; PLL / 2 (96/2=48 Mhz)
De aansluiting zal wel goed zijn, denk ik. Beetje rotwerk om na te lopen. Er is geen onkoppel C-tje tussen Vdd en GND, ik heb gelezen dat dat toch wel belangrijk is. Mischien moet je eerst even een ledje laten knipperen om zeker te zijn dat je PIC leeft?
-Bij USBDIV was al 2 opgegeven, deze heb ik zo gelaten.
-PLLDIV was 1, deze gewijzigd naar 5.
-FOSC = XTPLL_XT ;Deze niet gewijzigd.
-CPUDIV = OSC3_PLL4 ;Deze niet gewijzigd.
-Ctje van 100nF geplaatst.
Er is nog geen verbinding !
Op 23 maart 2006 18:38:18 schreef MMSoft:
-FOSC = XTPLL_XT ;Deze niet gewijzigd.
Waarom niet? Volgens de datasheet is het fout voor een 20 Mhz kristal.
Nu mag je zelf kiezen welke kloksnelheid je CPU krijgt: 5,6.66,10,16,20,24,32 of 48 Mhz.
Ik had de indruk dat de snelheid van de PIC niet belangrijk is, alleen de PLL snelheid.
Edit:
Wat moet ik precies opgeven bij
config FOSC = ...
config CPUDIV = ...
Ik ben al in de datasheet aan het zoeken, maar er zijn zoveel mogelijkheden.
[Bericht gewijzigd door MMSoft op ]
Snelheid is inderdaad niet belangrijk, wel het type kristal. 20 Mhz kristal = HS.
De snelheid van de PIC is niet 1 op 1 gekoppeld aan de snelheid van het kristal. Hij kan zijn klok krijgen van het kristal, via een prescaler, of van de 96 Mhz PLL, ook via een prescaler.
De twee HS mogelijkheden voor FOSC:
config FOSC = HS ; HS kristal, CPU klok van kristal
Of
config FOSC = HS_PLLHS ; HS kristal, CPU klok van PLL
In beide gevallen stel je de Prescaler in met CPUDIV.
config CPUDIV = OSC4_PLL6
OSC4_PLL6 betekend in dit geval deel door 4 als FOSC=HS, deel door 6 als FOSC=HS_PLLHS.
Probeer nou maar 1 van de twee voorbeelden die ik eerder gaf.
Is het niet makkelijker om je aan de nodige hardware die in het voorbeeld beschreven staat te houden en eerst een werkend voorbeeld te hebben dan direct de configuratie bytes van de pic te gaan wijzigen. Ik heb ook dat voorbeeld getest en had uit een of andere video sloop print een 4Mhz kristal genomen, de zaak gecompileerd en had van de eerste aansluiting al direct verbinding? Eens je een werkend voorbeeld hebt lijkt me het toch simpeler om dingen te veranderen en aan te passen.
Gewijzigd in:
config CPUDIV = OSC4_PLL6
config FOSC = HS
Helaas is er nog geen verbinding met de USB bus.
[Bericht gewijzigd door MMSoft op ]
Ik zou nu toch maar een ledje toevoegen, of desnoods alleen een output pin hoog maken. Kijken hoever ie komt in het programma, of ie ergens komt..
Even getest met een 4 Mhz kristal, met orginele code.
Er is nog geen verbinding (ik kijk bij apparaatbeheer, en dan bij USB-controllers en bij Human interface Devices).
Er is intussen een LED op A0 aangesloten, deze is Aan.
Moet ik de Boot schakelaar op B4 of op B5 aansluiten?
Edit:
Wat is het verschil tussen Include en Linken ?
[Bericht gewijzigd door MMSoft op ]
Op 23 maart 2006 21:18:26 schreef MMSoft:
Even getest met een 4 Mhz kristal, met orginele code.
Goed zo, is beter. Ik heb het zelf eens geladen op een testbordje. Het blijkt een low-speed device te zijn, je keuze uit klok snelheden is dan een stuk beperkter. Hij doet het wel met 20Mhz maar dan moet je FOSC = HSPLL_HS en CPUDIV = OSC3_PLL4 gebruiken.
Er is nog geen verbinding (ik kijk bij apparaatbeheer, en dan bij USB-controllers en bij Human interface Devices).
Je hoeft niet te zoeken. Als ie het doet krijg je een ding-dong en een popup.
Er is intussen een LED op A0 aangesloten, deze is Aan.
Hoe is die led aangesloten? Is A0 hoog of laag? Volgens mij wordt A0 pas hoog gemaakt als er verbinding is, en A1 gaat dan knipperen.
Moet ik de Boot schakelaar op B4 of op B5 aansluiten?
Wat is dat?
Edit:
Wat is het verschil tussen Include en Linken ?
Vind ik te moeilijk uit te leggen. Zoek maar op het Net. Relocatable code is een beter woord dan relative.
Boot Schakelaar:
Als ik naar minimale schema's kijk, dan staat daar een Boot schakelaar in.
http://pic18fusb.online.fr/wiki/wikka.php?wakka=WikiHome
Alleen heb ik 2 verschillende schema's, bij de ene zit deze schakelaar op B4, en bij de andere op B5.
Dus vandaar deze vraag !
Heb ik deze schakelaar eigenlijk wel nodig ?
Op 23 maart 2006 20:49:13 schreef Rudy E:
Is het niet makkelijker om je aan de nodige hardware die in het voorbeeld beschreven staat te houden en eerst een werkend voorbeeld te hebben dan direct de configuratie bytes van de pic te gaan wijzigen. Ik heb ook dat voorbeeld getest en had uit een of andere video sloop print een 4Mhz kristal genomen, de zaak gecompileerd en had van de eerste aansluiting al direct verbinding? Eens je een werkend voorbeeld hebt lijkt me het toch simpeler om dingen te veranderen en aan te passen.
Een PIC18F2455 ?
Hoe heb je de PIC aangesloten, dus op welke pen wat ?
Boot schakelaar heb je niet nodig. Aansluiten zoals je iedere PIC aansluit (MCLR, Vdd, Vss etc.). Daarnaast voor USB D+ aan D+, D- aan D-, en een C over Vusb. GND van USB connector aan GND.
De software die je gebruikt verwacht ledjes op RA0 en RA1.
[Bericht gewijzigd door Brem op ]
Ik heb verbinding !
De USB connector zat verkeerd aangesloten.
Nu op naar de volgende stap, gegevens zenden/ontvangen.
Wie kan er iets vertellen over de PC zijde ?
Edit:
Over het communiceren met een Human interface Devices heb
ik al het een en ander gevonden.
De PIC wordt niet als een Human interface Devices gezien,
dus aan deze info heb ik niets.
Hoe kan ik communiceren met een USB apparaat ?
[Bericht gewijzigd door MMSoft op ]
De PIC wordt niet als een HID gezien omdat er geen HID firmware op is geladen. De firmware die je gebruikt is voor een Vendor-specific device. Je zal dan op de PC de bijbehorende Vendor-specific device driver moeten laden.
Bij Windows worden wel standaard USB device drivers geleverd voor HID (muis keyboard etc), CDC (RS232) en zo, maar geen algemene device driver voor "zelfverzonnen" devices.
Zo'n algemene device driver bestaat wel, afkomstig uit de Unix wereld geloof ik. Hij zit niet standaard bij Windows, je moet hem downloaden.
Lees die thread waar je je firmware gevonden hebt! Tientallen mensen zijn je voor geweest en hebben hun vragen en ervaringen daar geschreven.
Ik ga daar mee aan de slag !
Omdat het nu overschakeld van elektronica naar PC software,
en dit forum daar niet voor bedoeld is, bedankt ik hierbij Iedereen.
Voor belangstellende: http://www.nldelphi.com/Forum/showthread.php?t=23629
En info is natuurlijk altijd welkom via E-mail
Iedereen Bedankt !
Toch nog een PIC vraagje:
In de ASM code staat:
db 0x7D,0x0D; idVendor (low byte),idVendor (high byte)
db 0x00,0x01; idProduct (low byte),idProduct (high byte)
Volgens de Driver (PC zijde):
IDV = 0
IDP = 0
Hoe zou het komen dat de de codes die in de PIC staan niet door de PC worden gezien ?
Welke driver gebruik je? Bij mij staat er:
db 0xD8, 0x04; idVendor (low byte), idVendor (high byte)
db 0x01, 0x00; idProduct (low byte), idProduct (high byte)
en die linusb-win32 driver vindt hem gewoon.
Ik ben een beetje met de ID nummers aan het stoeien geweest, dus het is mogelijk dat deze op dit moment anders zijn.
Ik probeer met 'DriverWizard' deze PIC met USB connection te selecteren, hierbij vindt hij deze wel, maar zegt dat de ID's 0000 zijn, terwijl er in de ASM code wel ID codes staan.
Een ID met de waarde 00 is niet geldig, en dan kan je niet verder met 'DriverWizard'.
'DriverWizard' is een USB driver programma dat bij het PICDEM FS USB Demo Board van MicroChip zit.
Daarop zit een PIC18F4550.
Omdat een PIC18F2455 vergelijkbaar is met de PIC18F4550 moet dit toch kunnen werken lijkt mij.