Fórum témák
» Több friss téma |
Sziasztok!
Sikeressen beegettem a HID bootloadert egy 18F4550-be. MPLAB-bal sikerult is egy led villogtato progit irni es HIDBootloader progival bele tolteni. MPLABhez van egy linker file, ami, ha jol ertelmezem, eltolja a foprogram kezdetet, ami igy nem irja felul a bootloader progit. MikroPascal-ban hogy kell ezt megoldani?
Ez egy másik út, de érdemes megpróbálni:
Bővebben: Link
Szia!
A uPascalban is lehetőség van az org direktíva használatára:
Amivel - a leírás 121. oldala szerint - az eljárás kezdőcímét lehet beállítani. A program kezdőcíme is beállítható vele:
A uChip HID bootloader a program kezdőcítét 0x2000 -re a megszakítási rutinokat a 0x2008 ill. 0x2018 címekre irányítja át. Szia
Kozben rengeteget turtam a netet es arra kellet hogy rajojek, hogy ez igy nem fog menni...
A helyzet a kovetkezo: igaz hogy atlehet iranyitani az emlitett cimeket az org es orgall segitsegevel, de ha egy kicsit bonyolultab progit irsz rogton gond lesz. Megpedig azert mert a mikroelektronikas bootloaderek ugy vannak kitalalva, hogy a bootloader a PIC memoriajanak a vegen helyeszkedik el es igy atiranyitasra nincs szukseg. Ezert ha az altaluk megirt rutinokat hasznalod, azok rosz cimekre fognak hivatkozni, ha pl a uChipes HID bootloader miatt eltolod a programod kezdocimet... BEFORE, TARGET PIC =================== goto main_bootloader . FREE SPACE . . main_bootloader: . BOOTLOADER PROGRAM . "start_program"_label . end_of_ROM BEFORE, PIC without bootloader ========================= goto main_L . main_L: USER PROGRAM L . . end_of_user_program_L . FREE SPACE . . end_of_ROM AFTER BOOTLOAD, TARGET PIC =============================== goto main_bootloader -----------> . | ------------------> main_L: | | USER PROGRAM L | | . | | . | | end_of_user_program_L | (1) | . | | . | | . | | . | | . | (4)| . | | main_bootloader: <------------ | . | . | BOOTLOADER PROGRAM (2) | . | . | . | "start_program"_label <----------------- goto main_L (3) . end_of_ROM Igy mukodik a mikroelektronikas bootloader. Nagyon az elejen vagyok ennek a PICes dolognak...ha netan nem jol latom a dolgokat akkor javitsatok ki! Elore is koszonom.
Szia!
A programot fordítsd le pl. 0x2100 -zal eltolva, ekkor minden eljárás, konstans a kezdőcím fölé kerül. Le tudod ellenőrizni, ha az MPlab-ba beimportálod a uPascal-ból fordított hex-et. A HID boot loader aktivizálásához tartozik valami kódrészlet (ez egyik bemenet valamilyen szitre kapcsolása). A program kezdetén (0) erre a kódra kerül a vezérlés. Ha a boot loadert aktívizáljuk, akkor csak a letöltés végén kerül vissza a vezérlés a 0-ra. Ha nem aktivizáltuk, a HID boot loader a 0x2000 címre ugrik. Itt kezdődhet a uPascal program. A megszakítás a 0x08, 0x18 belépést jelenthet a boot-loaderbe, ha nem aktív, egyszerűen tovább ugrik a 0x2008 ill 0x2018 címekre. A 0x0 kódhoz a uPascal bootloadere is tenne valamit, ha jól olvastam 4-5 másodpercig várja a parancssokat, ha nem jött, akkor ugrik a programra. Ha ezt eltolva fordítottad, akkor az eltolt címre kell ugrania. A uPascal bootloadere nem használ megszakítást. A lefordított uPascal programot importáld be az MPlab -ba, jegyezd fel, hova ugrik a reset vertornál. Importáld rá a HID boot loadert, a 0x2000 -re állítsd be a megjegyzett címet, a 0x2008-ra és 0x2018-ra a megszakítási rutinok címét. Ez jó lehet, ha a uPascal boot loadere egy fix címen van a memóriában függetlenül a pascal program hosszától. uPascal bootloaderrel: org 0x0 goto uPascal_boot org 0x08 goto uPascal_int08 org 0x18 goto uPascal_int18 uPascal_begin ... ;uPascal_end uPascal_boot ... goto uPascal_begin ;uPascal_boot_end Hid bootloaderrel: org 0x0 goto HID_boot_reset org 0x08 goto HID_boot_int08 org 0x0 goto HID_boot_int18 HID_boot_reset .. goto 0x2000 .. HID_boot_int08 .. goto 0x2008 .. HID_boot_int18 .. goto 0x2018 .. ; HID_boot_end org 0x2000 goto uPascal_boot org 0x2008 goto uPascal_int08 org 0x2018 goto uPascal_int18 org 0x2100 uPascal_begin ... ;uPascal_end uPascal_boot ... goto uPascal_begin ;uPascal_boot_end goto uPascal_begin Szia
Ebbol arra kovetkeztettem, hogy a HID bootloader 0x1000 cimre teszi at a user_program kezdetet es igy probalkoztam:
De sajnos nem mukodik.
Addig-addig keresgeltem, hogy vegul csak sikerult:
Azzal, hogy a leforditott *.hex filet szerkeszteni kell. Az elso sorba be kell irni a kovetkezot: ":020000040000FA"
Szia!
A HID bootloader vektorai miatt 0x2000 nem lesz elég, 0x2100 -at javasolnék. A uPascal által készített hex importásása, HID bootloader importálása, 0x2000, 0x2008, 0x2018 -ra az ugrásokat elhelyezése, programozás. Mennie kell... Köszönöm a pontokat. Szia és sok sikert...
Tisztázzunk egy félreértést/elírást!
A HID bootloader 0x0fff-ig tart, tehát az áthelyezett vektorok címei: 0x1000, 0x1008, 0x1018. A 0x2000-től elhelyezett vektorokra nem fognak rátalálni a HID bootloader elején elhelyezett ugróutasítások! A programkód 0x102A-tól kezdődhet. Ennél nem okoz gondot (csak pazarlás), ha 0x2100-nál kezditek.
Szia!
Hirtelenjében a PicKit2 -ben alkalmazott HID bootloader forrását néztem meg, ott a remap vektorok 0x2000, 0x2008, 0x2018. De itt nem is az volt a lényeg, hanem az, hogy a uPascal is betesz egy boot loadert. Azt kellett megoldani, hogy a HID boot loader-nek maradjon hely, és mind a kettő használható legyen. Szia Idézet: „Hirtelenjében a PicKit2 -ben alkalmazott HID bootloader forrását néztem meg” Jó, de az első hozzászólásban említett PIC mikrovezérlőbe nem az van beégetve... Idézet: „a uPascal is betesz egy boot loadert” Miért/hogyan tenne ilyet? Találtam egy fórumtémát, eszerint a vektorok áthelyezését így lehet megoldani (a címeket átírtam HID bootloaderhez):
Nem, nem, elerteted, csak a HID bootloadert akartam futtatni. Csak olvastam a mE forumokat es ott csak az o bootloaderjukrol vannak irasok, es ott arrol beszelnek h a memoria vegere teszik a mP bootloadert es nincs vektor atiranyitas, es ezert gondoltam hogy nem lehet mP-ben fejleszteni mas tipusu bootloaderre.
Igaza van icserny kolleganak, 0x102A cimrol mar mukodik a user program.
Szia icserny!
Olvastam a PICCOLO projectet. Az alapjan indultam el. Csak nekem jobban fekszik a pascal, ezert probaltam atirni mP-re a dolgokat. Probalgattam az ORG 0x1000 es az ORGALL 0x1000 utasitasokat, de nem sikerult. Ott szepen le van irva, hogy a HID bootloader mely cimekre irannyitja at a vektorokat. De sajna nem ment. A mE foruman ezt olvastam: Idézet: „how can I change the Reset and Interrupt Vector in MP? You cannot” Ekkor fordultam a forumhoz, es Hp41C hozaszolasa alapjan 0x2000 cimre tettem az eltolast. Voila. Mukodott a dolog es en boldog voltam Koszonom a fenti kodot. Majd ha mar erre a szintre jutok kifogom probalni Egyenlore orulok, hogy villog a ledem Idézet: „Voila. Mukodott a dolog es en boldog voltam” Az ilyen öröm csak addig tart, amíg interruptot nem kell használni. A reset vektornak az is jó, ha csak rácsorog a vezérlés, de a mögötte levő interrupt vektorokra már nem lehet rácsorgatni a programot. A HID bootloader elején elhelyezett vektorok úgy működnek, hogy a 0-ás címről az 0x1000-re ugrik, ha nincs lenyomva a bootolást kiváltó gomb. A 8-as címről pedig 0x1008-ra, a 0x0018-as címről meg 0x1018-ra ugrik. A belinkelt Pascal kódot nincs módomban kipróbálni, de úgy látom, hogy a fenti feltételeknek próbál megfelelni.
A MikroElektronika fórumán talált, korábban beidézett kódot megpróbáltam lefordítani, de a test_interrupt és a test_interrupt_low címkéket ismeretlennek mondta. Azután megnéztem a Pascal fordító dokumentációját, és nem derült ki belőle, hogy hogyan lehet olyan címkéket definiálni, amelyek az assembly betétekben használhatók. Enélkül pedig a további kísérletezés reménytelen.
igen, sajnos en is ide jutottam...csak meg nem volt idom tovabb keresgelni. SD kartyat szeretnek kezelni, es a mP MMC library mindjart hasznal is valami megszakitast, es mar nem is ment a HID bootloaderrel a program. Ekkor probaltam a kodot amit fentebb beraktal es nekem se ment.
Az lesz a vege, hogy rafanyarodok az altaluk irt rs232 bootloaderre, vagy csinalok/veszek egy egetot... az elkepzeles az volt, hogy havernal beegetjuk az USB bootloadert es onnantol kezdve nincs szukseg egetore...de egyre inkabb ugy nezem, hogy ez nem epp igy mukodik... Idézet: „Az lesz a vege, hogy rafanyarodok az altaluk irt rs232 bootloaderre, vagy csinalok/veszek egy egetot...” Szerintem egyszerűbb volna rászokni a C18-ra! A Pascal sem teljesen reménytelen egyébként, csak az interrupt eljárásra való ráugrást kell valahogy megoldani, s ehhez most nem találtam meg a szükséges információt.
Egyre inkább úgy tűnik, hogy a korábban javasolt megoldás csak valamilyen régebbi változatttal működött. A mostani MikroPascal Pro 3.2-ben úgy tűnik, mindent elkövettek, hogy ne lehessen a Bootloaderrel kompatibilis kódot fordítani.
1. Nem működik az a megoldás, hogy a linker fájlt átszerkesztjük. 2. Nem fordítja be a kódba a vectors eljárást - a korábban működő goto $ trükközés esetén sem. 3. Assembly betétben nem hajlandó tudni az egyébként definiált címkékről, így nem fordul le a korábban bevált goto test_interrupt utasítás. Nem tudom, hogy ezt akarták-e, mindenesetre én elvesztettem minden érdeklődésemet a MikorPascal iránt.
En is csak azert eroltetem annyira mert, delphizek, suliban pascalt tanultam, es sok eljaras van elore megirva amiket hasznalni szeretnek, pont olyan peldakkal amik nekem nagyon jok...mag az az igazsag, hogy mikor meglattam, hogy letezik pascal fordito is, nem is foglalkoztam tovabb a tobbivel
Nem ez van a linken pascalositva:
mert ha igen, akkor szerintem hianyoznak definiciok... azokat is pascalositani kellene, nem? (C-t nem nagyon vagom... ) (a mE foruman tovabb boncolgatjak a temat, nekik sem megy... de sajnos ott nem tudok hozzaszolni, mert nem megy az angol... )
C-ben sem kell ennyi definíció, ha eleve csak a HID bootloaderre számítunk (lásd ma reggeli beírásom a PIC - Miértek, hogyanok...) topikban.
void hi_isr(); -> Ennek a procedure interrupt; forward; felelne meg, de nincs rá szükség. Az _interrupt: címke anélkül is generálódik, csak az assembly betétből nem elérhető.
Csoda történt! Lefordult az alábbi program a vektor-áthelyezésekkel együtt. Működni persze nem működik, csak ha a HEX állomány elejére kézzel beírjuk a bűvös :020000040000FA sort! Ekkor már betölthető a HID bootloaderrel.
Az alábbi program a D port bitjeire kötött (áramkorlátozó ellenállással!) LED-eket villogtatja.
A megoldás kulcsa a "vectors" eljárás kioptimalizálásának megakadályozása, amire a korábban már hivatkozott fórumon ajánlottak egy újabb trükköt:
nekem tovabra is [quote]identifier "ledflash_interrupt" was not declared...mi a manot csinaljak vele? Kellet valamit allitani a mPben?
Idézet: „Kellet valamit allitani a mPben?” Őszintén szólva én az állítási lehetőséget sem találtam meg... Azt vettem észre, hogy a program neve és a forrásfájl neve meg kell, hogy egyezzen. Tehát ledflash legyen a filenév is. A sorrend is számít. Úgy, ahogy bemásoltam, nekem simán fordult, a legfrissebb fordítóval.
Ezer koszonet!
Igy mar mukodik az MMC library is. Most jon a SoftI2C... Ennel a PICnel az SPI es I2C ugyan azon a labakon van. Ezert ugy gondoltam, hogy softI2C-t fogok hasznalni. De sokan azt irjak hogy eleg lassu(ez szamomra meg relativ fogalom). 8db LM75 homerovel, egy PC8583 oraaramkorrel, es 3-4 PCF8574 aramkorrel szeretnek komunikalni. A mert adatokat pedig a SD kartyan egy txt fileba szeretnem tarolni. kb masodpercenkent szeretnek mintat vetelezni. A PIC 8mhz kristalyal megy. Ehhez eleg lesz a softI2C? vagy esetleg tudom a ket protokolt ugyan azokrol a labakrol hasznalni? Vegul is egyidoben mindenkepp csak az egyik fog futni.
Nem az az érdekes, hogy hány MHz-es a kvarc, hanem az, hogy a PIC mit csinál belőle... A konfigurációs biteknél a PLLDIV hogy van beállítva? A HID bootloader "gyárilag" 20 MHz-hez van bekonfigurálva (PLLDIV=5), a 8 MHz-es kvarchoz viszont PLLDIV=2 kell.
SD kártya helyett lehet Flash memóriában is gondokodni Bővebben: Link (bár ez a lényegen nem sokat változtat). Az SPI és az I2C használható felváltva is (nem kell szoftveres I2C-vel szerencsétlenkedni). Az SPI eszköz, ha nem kap SEL jelet, akkor elvileg lekapcsolja magát a vonalról. I2C esetén bedig be lehet iktatni egy buszmeghajtót (pl. PCA9515, ennek van egy engedélyező bemenete is), ami azért is jó volna, mert elég sok eszközt akarsz rákötni a buszra. Az I2C eszközök adatlapját is meg kell nézni, hogy képesek-e meghajtani egy ekkora terhelésű buszt?
Azert eset a valasztas az SD kartyara, mert nagyon konyen es gyorsan atlehet vinni az adatokat szamitogepre es aztan ott mar konyen lehet beloluk tablazatokat, grafikonokat kesziteni. A masik ok pedig, hogy a mPben vannak peldak a hasznalatara .
Szeretnek meg egy olyat is csinalni, hogy egy masik PIC AD konverterere kotok valamit(aramtrafo+elektronika) es az altala mert eredmenyeket is az SD kartyara irja a 18F4550. Ezt hogyan tudom legegyszerubben megoldani? Idézet: „Azert esett a valasztas az SD kartyara, mert nagyon konyen es gyorsan atlehet vinni az adatokat szamitogepre” Hát az USB csak dísznek van? Idézet: „Szeretnek meg egy olyat is csinalni, hogy egy masik PIC AD konverterere kotok valamit” Miért? A 4550-nek nem maradt szabad bemenete? Egyébként meg SPI,I2C,UART,RS-485...
Az USB a bootloader miatt kellet... De majd idovel komunikalasra is jo lesz.
A 4550-nek maradt meg eleg laba, de a ket dolog szerkezetileg kulonallo lenne. En I2C-vel oldanam meg, de sajnos gozom sincs, hogy a konvertalo PICet hogy tudom elerni... De egyenlore most van mit emesztenem. Van mivel kiserletezni...
A 4550 master, a konvertáló meg slave. Mellesleg ennyi I2C eszköz címzésével nem lesz gond?
Elvileg minden kutyunek mas a cime...vagy is a LM75 allithato 3biten, vagyis 8 db mehet egy I2C vonalra, a PCF8574 szinten allithato es mastartomanyban van mint a homerok. Vagy valamien mas problemara gondolsz?
Erre a master-slev dologra gondoltam, csak a kivitelezeset meg nem latom at...de majd lassan kialakul. A "Hello word!" mar megy... |
Bejelentkezés
Hirdetés |