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
![]()
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 |