Fórum témák
» Több friss téma |
Idézet: Nem tudom, hogy van-e leírás, de a MAL USB szekciójának mintaprogramjai így vannak megírva, én is azokból vettem a "tudományomat". De a PICCOLO projekt forrásállományaiból is kihámozható a lényeg. „Van erre egy leírás ezt már icserny-től kérdezem, hogy hogy állítsam be ezen memória területeket, hogy (mettől-meddig) hová írja be az én programomat?” 1. A RESET és interrupt vektorokat 0x1000, 0x1008, 0x1018 címekre kell elhelyezni 2. A programot 0x102A címtől kell elhelyezni 3. Ezekhez idomított linker állományt kell használni (MAL: rm18f4550 - HID Bootload.lkr, PICCOLO: PIC18f4550.lkr) 4. Az univerzális PIC18f4550.lkr linker használata esetén a linkernek át kell adni egy /uHID_BOOTLOADER opciót. Ez az MPLAB-ban a projekt opcióknál állítható be, ahogy le van írva. Idézet: Nem, mert ha az alkalmazás nem használja az USB-t (pl. ledvillogtatás), akkor ezekre nincs szükség. Kiindulásnak jó pl. a ledswitch projekt (I/O portok fejezetből). Látható, hogy csak a piccolo_all.h, piccolo_config.h, a piccolo-4550.h és a PIC18f4550.lkr kell hozzá. „Azt gondolom jól sejtem, hogy az USB-hez szükséges összes fájl és regiszter kötelező mivel azt használjuk.” A hozzászólás módosítva: Márc 6, 2014
Kis kiegészítés:
Ebben a hozzászólásban mutattam meg azt, hogy az rm18f4550 - HID Bootload.lkr felkhasználásával hogyan kell megírni egy HID bootlaoderrel betölthető alkalmazást (C18-hoz, természetesen...), a PICOOLO projekt használata nélkül.
Köszönöm az összefoglalót.
Át fogom nyálazni, de még mindig az analóg téma köt le Rá fogok jönni csak idő kérdése.
Lábkiosztásra nem stimmel. Ettől függetlenül működhet, de hogy változtatás nélül-e?
Hát kicsi az esélye. Programtól függ. A hozzászólás módosítva: Márc 6, 2014
Nem... A 16F628 -ban a PORTB 8 bites, a 16F690 -ben a PORTB 4 bites, a PORTC 8 bites.
Ettől még működhetne egy időzítő, csak kicsi az esélye, ahogy usane kolléga mondta !
A hozzászólás módosítva: Márc 6, 2014
Srácok lenne egy kérdésem.
Végre sikerült segítséggel az analóg jelet fogadnom és feldolgozni. A debugerben tök jól jelenik meg az érték, de mikor ki akarom íratni LCD-re akkor nem abban a formában látom mint amit a debug mutat. Tehát megkaptam a potméterből jött jelet 0 tól 1023-ig vagy is 10bit-be és ezt osztom el 5volttal majd az eredményt megszorzom a potméter aktuális állapotával ami eredményezi a bejövő feszültségem szintjét. float v; //ez külön deklarálva is van int a; //poti álapota ez is külön deklarálva van v = (5/1023) x a // ez megadja a feszültségem (debugerben jó a változóban mutatott érték) Kijelzőre ki akarom íratni és valami 16555-ős értéket kapok és ezt tudom le, fel állogatni a poti tekergetésével. Az LCD drivert Piccolo projekt kereteiből vettem ki. Kiíratása pedig így néz ki: printf("Fesz: %3.2u", v); Próbáltam i, s, f, ...stb, de vagy ugyan azt a számot látom vagy zagyvaságokat ír ki. Miért nem konvertálja ki normálisan a kijelzőre?
Ténzleg, kicsit lerövidítettem ay indoklást:
- Analóg mód: A 16F628 -on a CMCON (0x1F) regiszter írásával állítható, a 16F680 -en az ANSEL (0x11E) és ANSELH (0x11F), a 0x1F címen az ADCON0 van. - Miután a 16F628 -ban a 0x11E és 0x11F -en nincs regiszter, a kivezetések analóg módban maradnának. Összesen a RA3(MCLR), RA5(OSC1), RB6 és RB7 maradna, ami bemenetként is használhaó lenne. Az analóg láb még használható kimenetnek. - A 16F628 -on a RA7 és RA6 az oszcillátor, a 16F690 -en a RA4 és RA5. A forrást kellene átírni a két adatlap összehasonlítása alapján.
Sziasztok!
Egy programmal kínlódok (PIC16f628A mikrovezérlőbe dolgozok), melynek lényege hogy egy gombbal beállítok egy értéket egy változóba, majd egy másikkal gombbal elindítok egy 3 fázisú motort a PIC kimenetével egy optocsatolón keresztül (mágneskapcsolót húz az opto). Egy induktiv közelítés érzékelővel leszámoltatom az előbb beállított értéket és a motornak le kell állnia, vagyis el kell hogy ejtsen a mágneskapcsoló. A mágneskapcsoló 24V-os a közelítés érzékelő is 24V-os. A 24V-os tápból egy 7805 csinál 5V-ot a PIC-nek. A közelítés érzékelő az RB0 lábra ad bemenetet #INT_EXT használatával. Minden tökéletesen működik motor nélkül, tehát a mágneskapcsoló meghúz, majd ha a beállított értéket leszámoltatom az érzékelővel, akkor elejt. Igen ám de ha a motort ráteszem a mágneskapcsolóra akkor START-ra meghúz a mágneskapcsoló viszont hiába számoltatom le az érzékelővel a változót nem esik ki soha a mágneskapcsoló. Amúgy ha izzót tettem motor helyett akkor is ez a helyzet. Tehát vegyük úgy hogy terhelés alatt nem ejt el soha a mágneskapcsoló. Ha motor nincs rátéve akkor tökéletesen teszi a dolgát a program. Látott e már valaki ilyet? Arra is rájöttem ha a közelítés érzékelőt nem interruptba használom csak simán mint egy gombot, akkor simán működik minden, de ezt nem lehet megengedni, mert felfutó élre van szükség mindenképp. A terhelés hogyan befolyásolhatja az interruptot? Úgy is próbáltam hogy bekapcsoltam mellette a motor és úgy probálta húzatni a mágneskapcsolót üresen simán tette a dolgát, tehát nem a motor csinál zavart a rendszerbe vagy ilyesmi.
Kicsit konkretizálni kellene. például mit számol az érzékelő? Ha fordulatot akkor az izzó esetén miért kellene, hogy működjön? Egy kapcsolás vagy séme is segítene. Az, hogy nem a motor a zavarforrás nem biztos. A PIC kényes állatfajta. Én is szívtam már szűrés miatt.
Az érzékelő nincs feltéve még a helyére csak kézzel közelítek hozzá fémet. Amúgy fordulatot számol. Kb 7-8 fordulatnál többre nincs szükség. Majd késöbb küldök rajzot is róla.
Idézet: C18-ban tudtommal nincs float támogatás! Mellesleg van mintapéldám feszültségmérésre, miért nem azt nézed meg? Bővebben: Link „float v; //ez külön deklarálva is van”
A C18 -ban van float (32 bit) típus (ld. 51288F.pdf 2.1.2. Floating-point Types). Sajnos a double is csak 32 bites.
Bocs, ezek szerint rosszul emlékszem. Akkor mi nincs a C18-ban? A printf() %f formátum kezelésének implementálása? Annak idején valamiért saját kiíró rutint kellett írnom, csak már magam sem emlékszem a részletekre.
Mert magát a számolást megcsináltam mér és ki is íratom, de a formailag nem megfelelő, hozzáteszem debugban tökéletes.
Ha ezen driver segítségével nem lehet kiíratni akkor kell keresek egy másikat sajnos pedig tetszik az LCD vezérlés. Valamiért nem akarja az igazságot.
Ha a feszültséget mV-ban számolod ki (5 helyett 5000-rel kell szorozni), akkor az eredmény long típusú változóban előjeles egészként tárolható/kezelhető, s az outdec() függvénnyel tetszőleges tizedesjeggyel kiíratható.
Idézet: Nem értem az összefüggést. „Ha ezen driver segítségével nem lehet kiíratni...”
Main-on kívűl:
Main-on és wile-n belül:
Az outdec() függvény nekem nincs benne vagy legalább is nem találja. Az LCD drivert amit írtál teljesen külön raktam és átírtam a portokat. ui: melyik fájlban találhatom meg az outdec() függvényt? A hozzászólás módosítva: Márc 7, 2014
Csatoltam a rajzot nagy vonalakban erről van szó. Van még vagy két gomb rajta de azt nem jelöltem teljesen lényegtelen. Csatolom a progit is.
Idézet: „tehát nem a motor csinál zavart a rendszerbe vagy ilyesmi.” De. Az csinálja. Hidd csak el.
Egy időzítőt írt, annak lehet egy bemenete/ egy kimenete, ami szerencsés esetben akár működhet is pl. RB6, RB7 , de valóban kicsi az esély rá, mint írtuk !
Hogyan védekezzek ellene? 100nF a tápról még hiányzik, de szerintem nem fog megoldani semmit. Próbáltam 47nF ot (az volt kéznél) az érzékelő jele és a GND közé de nem javított rajta semmit. Amikor úgy alakítottam át a programot hogy a beállított érték és az érzékelő által elszámolt érték megegyezik, akkor induljon a motor simán ment. Viszont mikor úgy volt beállítva hogy START-ra elindítottam a motort és ha megegyeztek a változók akkor ki kellett volna hogy essen a mágneskapcsoló tehát a terhelést kellett volna megszakítani akkor bukik az egész. Sőt mondok jobbat azt is próbáltam hogy a mágneskapcsolón terhelésnek egy másik 24V-os mágneskapcsoló behúzótekercse volt és már akkor sem működött, tehát sem a 3 fázis vagy a motor nem volt a körben mégis rossz volt.
A hozzászólás módosítva: Márc 7, 2014
Üdv! Tudnátok segíteni az easy pic v7 paneljának a beállításában. Az a gondom vele, hogy miután feltöltöm a programot, nem csinál semmit a nyomógomb megnyomására. Esetleg valami jumper beállítás, vagy a microProg-ba kell valamit átállítani?
Köszi!!
99%, hogy visszarúg a tápra és beesik egy nagy tüske, ami felborítja az egészet. LC tag a tápon?
A tápegység egy ilyen tipusú gyári táp, ezután már egy 7805 van annak a lábain a bemeneti oldalon egy 100nF os kondi a kimenetin egy 47µF os.
Nem úgy értem... Nem próbáltad ki, hogy sorosan 100uH...1mH és utána egy 470...1000µF +100nF?
Azt még elfelejtettem mondani hogy az egész üzemben földeletlen csillagpontú hálózat van.
Idézet: „Tudnátok segíteni az easy pic v7 paneljának a beállításában?” Ennyi információ birtokában nem tartom valószínűnek.
Ezt valaki áttudná nekem fordítgatni hex-re?
(az sem lenne baj ha átnézné hogy működik e)
Innen származik |
Bejelentkezés
Hirdetés |