Fórum témák
» Több friss téma |
Fórum » PIC - USB - PC projekt
Aha! Régi volt a Linker verziója.
(A PIC18F4550-el is ugyanaz volt a helyzet mint a PIC14K50-el.)
Hali!
Megint fordítási proplémám van. A PICCOLO USB-s projektei közül azokat nem tudom lefordítani amelyekbem a PIC18F14K50 az alkalmazott mikrovezérlő. Mindegyikre az alábbi hibaüzenetet kapom: MPLINK 4.35, Linker Copyright (c) 1998-2010 Microchip Technology Inc. Error - section 'USB_BDT' can not fit the absolute section. Section 'USB_BDT' start=0x00000400, length=0x00000050 Errors : 1 A PIC18F4550-el semmi gond. Idézet: „Error - section 'USB_BDT' can not fit the absolute section. Section 'USB_BDT' start=0x00000400” Ezt hogy csináltad?! Nálam a Microchip/USB/usb_device.c állományban ez áll:
Tehát ha a PIC18F14K50 mikrovezérlő van kiválasztva (Configure/Select Device), akkor USB_BDT a 0x200 címen kezdődik. Ez már csak azért is egészséges, mert a szerencsétlennek 0x0400 címen már nincs is RAM-ja, így érthető, hogy nem fér bele 0x50 db. bájt.
Megvan a hiba, fordul gond nélkül, csak nem értem az okát. Ehhez a fájlhoz hozzá se nyúltam.
Nálam így nézett ki ez a programrészlet: /** USB FIXED LOCATION VARIABLES ***********************************/ #if defined(__18CXX) #if defined(_18F14K50) || defined(_18F13K50) || defined(_18LF14K50) || defined(_18LF13K50) #pragma udata USB_BDT=0x200 //See Linker Script, usb2:0x200-0x2FF(256-byte) #else #pragma udata USB_BDT=0x400 //See Linker Script, usb4:0x400-0x4FF(256-byte) #endif #endif A biztonság kedvéért letöltöttem a PICCOLO oldaláról a legfrissebb (tutibiztos általam érintetlen) code_examples-t.
Szerintem az MPLAB hülyesége lehetett az oka! Ha pl. nem léptél ki az MPLAB-ból, és Project/Opennel nyitottad meg a PIC18F4550-es projekt után a PIC18F14K50 projektet, előfordul, hogy a Configure/Select Device menüben "beragad" a PIC18F4550, hiába van benne a megnyitott projectben a device=PIC18F14K50 sor.
Nálam bevált módszer az, hogy projektváltáskor kilépek az MPLAB-ból, s a következő projektre duplán kattintva nyitom meg azt, nem pedig az MPLAB-ból. U.i.: a kódrészletet egyáltalán nem azért mutattam, mintha hozzányúltál volna, hanem azért, mert abból derült ki egyértelműen, hogy a hibás fordításkor valamiért nem a PIC18F14K50 volt kiválasztva, mert akkor nem 0x400 lett volna a változóblokk címe.
Az "érdekes" viselkedés MPLAB 8.41-gyel is reprodukálható: ha megnyitom pl. az USB fejezetben hello-int-4550.mcp projektet, majd Projekt/Close menuben bezárom, s megnyitom Projekt/Open-nel a hello-int-14k50.mcp projektet, akkor a Configure/Select Device azt mutatja, hogy továbbra is a PIC18F4550 van kiválasztva, ami nyilvánvalóan akadálya a sikeres fordításnak.
Én azért az MPLAB-tól egy kicsit megbízhatóbb működést várnék el.
Időközben elkészítettem a PIC18F14K50-el a gyakorlópanelem. Alapul a Microchip "Low Pin Count USB Development Kit"-et vettem. Eléggé leegyszerűsítettem, tápellátása csak USB-ről történik. A PORTA kivételével az összes I/O láb jumperekre van kivezetve. A jumperekre végülis "bármit" rá lehet dugni. Gyakorlásra nekem tökéletes. (Csak az a baj, hogy a munka meg a tanulás mellett egyre kevesebb időm van vele foglalkozni.)
Sziasztok!
Végigolvastam Gory cikkét, és neki álltam kipróbálni. A gondom az, ha a feltöltöm a picbe a fw-t. akkor nem történik semmi, a bootloader az megy, ha bekepcsolom. Jól gondolom, hogy meg kellene jelenni az eszközkezelőben egy com portnak? Ha a soros emulátort teszem a picbe, működik. Mit nézek át? Mi az, ami ilyenkor hiba lehet? Gondolom az áramkörrel nem lehet gond, mert akkor más usb-s progi sem működne. Előre is köszi a segítséget! Idézet: Igen.„Jól gondolom, hogy meg kellene jelenni az eszközkezelőben egy com portnak?” Idézet: Ezt úgy érted, hogy ugyanezen az áramkörön korábban már sikeresen futtattál USB-t használó programot (pl. gyári demót)? Ha igen, akkor az áramkörrel tényleg nem kellene gondnak lennie...„Gondolom az áramkörrel nem lehet gond, mert akkor más usb-s progi sem működne.” A kipróbálandó alkalmazás lefordításánál arra kell ügyelni, hogy a megfelelő linker scripttel történjen a fordítás. Néha kavarodást okoz, hogy a PIC18F4550-hez kétféle bootloader is van, s ezek mérete különböző, ezért nem ugyanoda kerülnek a reset és interrupt vektorok. Az MCHPFSUSB bootloadernél 0x0800,0x808, 0x0818, a HID bootloadernél pedig 0x1000, 0x1008, 0x1018 a vektorok címe. Én a .map fájl elején szoktam ellenőrizni hogy hova kerültek a linkelés után. Megjegyzés: A Gory cikkében bemutatott ábrával ellentétben a 11, 12 lábakat (Vdd, Vss) is be kell kötni, és egy 100 nF-os kondi is kell közéjük!
Köszönöm a segítséget!
A bootloaderekel volt a kavarodás. Kiexportálva és beégetve már ment, igaz az a/d része nem, de ezen majd szórakozok, ha nem megy, még biztos kérdezek.
A PIC18F4550-ről azt kell tudni, hogy az analóg bemenetek csak az AN0-tól indulva engedélyezhetők (szemben pl. a PIC18F14K50-nel, ahol az egyes analóg csatornák függetlenül engedélyezhetők/tilthatók).
Az AN0-ra kötött potméterhez az AN0 csatorna így inicializálható (ezt rakd be a hardver profilba):
A főprogram elején egyszer meg kell hívni mInitPOT()-ot. A mérés és kiolvasás pedig ennyi:
Nézd meg a PICCOLO projekt-et is, abban is támogatott a PIC18F4550 mikrovezérlő. Az általam bevezetett usb_cdc_putc(), outString(), out4hex() és outdec() függvényekkel (szerintem) lényegesen egyszerűbb a kiíratás, mint a gyártó eredeti függvényeivel, státuszgépes kínlódásokkal. Megoldottam a printf() egyszerű használatát is, csak nem szeretem használni, mert a PIC18F14K50-nek hamar teleköpi a memóriáját. Megjegyzés: Arra vigyázz, hogy nálam a HID bootloader az alapértelmezett, s ha a MCHPFSUSB bootloadert használod, akkor a piccolo_config.h állományban és az összes projektben (a linker opciók között) át kell állítani: HID_BOOTLOADER helyett az MCHPUSB_BOOTLOADER szimbólumot kell definiálni. A kísérleti áramkör c. fejezetet nézd meg ezzel kapcsolatban.
Már olvastam az oldalad. Csak valamiért nem akart lefordulni nekem semmi. Gondolom, könyvtár, elérési út gondok lesznek. Este neki fekszek annak, most ezzel volt "sikerélmény", adott az energia. HID bootloader van fenn, azért is úgy csináltam, hogy export, és pk2.-vel beégetve.
Köszi mindent, de még biztosan lesznek kérdéseim, és gondolom egy darabig egyre több Idézet: Ha belenézel egy .mcp állományba, akkor abból kiderül, hogy nálam a C:/Program Files/Microchip/MCC18 könyvtárban lakik a C18 fordító. Vagy telepítsd ide te is, vagy pedig szerkeszd át az .mcp fájlokat (keresés/csere). Akár a Notepad.exe is megteszi...„Gondolom, könyvtár, elérési út gondok lesznek.” Megjegyzés: a fórummotor háklija miatt backslash helyett sima "per" jelet kellett írnom.
Áttelepítettem, de nem fordul. Amit kiír a mellékletben van. A forrás az asztalra van téve, még azt megpróbálom átrakni valami rövidebb helyre.
Átraktam a forrást (PIC18 teljes mappa) a c, és d gyökérbe is, ugyanez az üzenet, és egyszer véletlenül a 14k50-est nyitottam meg, és ha már megnyitottam akkor kipróbáltam, ez volt a reakció: "Unknown processor '18F14K50'", ez a proci volt kiválasztva a select device-ban.
pedig a hibaüziben -p=18F4550 van...
biztos jók a proci/include/lkr megadások? ha igen lépj ki az mplabból, újra nyisd meg a projektedet, időnként állítólag meghülyül ha a projektet vált az ember kilépés nélkül
Ezt a "hülyülést" tapasztaltam én is. Ezért mindig kilépek, és duplakatt az .mcp-n. Ez amit a piccoló honlapról letöltöttem forrás, nem nyúltam semmihez. De azért újra letöltöm, sohasem lehessen tudni aztatat az ámítástechikában...
Idézet: A jelek szerint a Linker állományban használt feltételes elágazásokat "nem érti" az MPLINK program. A verziószámból és a 2006-os dátumból ítélve egy kicsit elavult...„MPLINK 4.1, Linker Copyright (c) 2006 Microchip Technology Inc. Error - Unrecognized input in '..\common\PIC18f4550.lkr:5': #IFDEF” Én sem a legfrissebb verziót használom, mert 2008-as kiadású MPLAB 8.15 és a hozzá illő (vele egykorú) fordítók vannak fenn. Ebben 4.22-es verziójú MPLINK fut. Ennél újabb verziókkal lehet próbálkozni, de régebbiekkel nem kellene...
Akkor keresek újabbat. Azt írták, egy másik topicban, hogy a legújabb nem az igazi. Attól érdemes még azt leszedni, vagy keressek egy régebbit, már ha találok?
Próbálkozz a legfrissebb változattal! Mire kiderülnek a hibái, úgyis lesz 2-3 újabb verzió...
OK. Köszi! Ugye a lite változat kell nekem? Mondjuk már elkezdtem letölteni, röpke 25 perc és itt is van.
Inkább a Standard-Eval, de végülis a Lite is megfelel.
Nagyon köszönöm a segítséget mindenkinek!!!
Már fordul!
Helló!
Új kérdésem van. Próbálok ledeket kapcsolgatni, mivel a panelomon 8db van, ezért nyolcat. Úgy gondoltam, picit módosítom a cdc_demo.c-t. A vett karaktereket bepakolom egy tömbbe, és onnan kiírom a portra. Ez így kb. működik is. Egészen az utolsó karakterig, venni jót vesz, de a tömbbe nem azt teszi. Az egyes helyett nullát, a nulla helyett viszont valami "furát", mellékeltem a képet, és azokat a fájlokat, amiken módosítottam. Köszönöm a türelmetek!
És a kapcsolás, biztos mi biztos.
Első körben az biztosan probléma, hogy Te 7 elemű karakter tömböt deklarálsz és ebben a tömbben 8 elemet akarsz eltárolni. Módosítsd a változók deklarálásánál lévő led tömböt erre:
Megtettem. Működik!
Köszönöm szépen! Ezt, hogy néztem el, kissé szégyellem magam. Na jó, a kissé nem igaz.
Megesik az ilyen baleset, a lényeg az, hogy megjavult.
Szégyenkezni nem kell, általában az ilyen bagatell hibákat a legnehezebb kiszúrni, mert az ember nem is számít rá, hogy elrontotta volna. Sok sikert a továbbiakban!
Egy megjegyzés: A működést valószínűleg nem zavarja, de kicsit zavaró az olvasata a
sornak. Az uc változó értéke ugyanis nem 1 vagy 0, hanem 49 vagy 48 (az '1' vagy '0' karakter ASCII kódja). Írd inkább így: led[ix] = (uc & 1); Egy kérés: Ha módosítod és közreadod a kódot, akkor légy szíves egyértelműen jelezni a kommentekben, hogy ez már egy általad módosított változat - hogy ne legyen belőle kavarodás! Egy tipp: A program átírása esetén célszerű átnevezni a projektet/forrásfájlt. Talán így a legegyszerűbb: copy CDC-p18f4550.mcp CDC-mydemo-4550.mcp copy CDC-demo.c CDC-mydemo.c Utána a CDC-mydemo-4550.mcp állományt megnyitod a notepad editorral és CDC-demo.c állománynevet átírod CDC-mydemo.c-re. Utóirat:
Az ix<=7 helyett én szívesebben írok ix<8-at.
Köszönöm a tanácsokat, megfogadom! Sajnos nem csak az usb-t, de a c-t is csak tanulgatom, és a Te általad közzé tett anyag nagyon tetszik, sok a magyar komment, ezért (is) indulok ki ebből. Valamint az egész cikksorozat, vagy inkább tananyag sokkal érthetőbb mint más amit találtam, köszönet érte!
Ez: "led[ix] = (uc & 1);" mit csinál? És létezik e valami nagyon egyszerű könyv, leírás a c-ről? Találtam jó párat, de mind elég terjengősen ír. Anno a Pascalt, egy olyan könyvből tanultam, amiben szinte csak tőmondatok voltak, felsorolva a típusok, függvények, eljárások, egy két sorban kitárgyalva mi mire való. Sajnos még az angolom sem az igazi, és a fordító programok sokszor félre veztik az embert, ha nem a hétköznapi nyelvről van szó. És még egy kérdés:jól gondolom, hogy ez a függvény:usb_cdc_getc() mindig egy karaktert olvas ki a bufferből? |
Bejelentkezés
Hirdetés |