Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Köszi, de a C jobban megy. Az app note is C18-ra van.
Szerk.: Most látom, lejjebb can C18-asra link, persze, már nincs fönt . Ha valakinek megvan, legyen szíves elküldeni! Köszönöm.
A konfig alapján én is úgy nézem, hogy 24MHz-en kellene járnia.
Csinálj egy üres main-t, ami endless loop-ban billegtet egy kimenetet! A billegtetések közé tégy be elvileg ismert idejű időzítéseket, pl. ilyet: "wait(DELAY_240Us);"! Egy frekimérővel a billegtetett kimeneten ellenőrizheted, hogy tényleg jók-e az időzítések, ha minden jelváltás közt a fenti időzítés van, akkor 480us periódusidőnek kellene megjelennie a kimeneten, azaz 2083Hz-nek.
nincs frekimérőm, pickit2 logic tooljával nem lehet valahogy eééenőrízni?
Azt nem tudom, hogy azzal lehet-e, még sosem használtam.
Azt viszont biztos meg lehet csinálni, hogy beteszel 10000-es vagy 100000-es ciklusba egy ilyen várakozást, és stopperrel méred a kimenet változásai között az időt. Pontosabb eredményt kaphatsz, ha copy/paste-tel egymás mögé másolsz 10-20-50 időzítést és ezt teszed bele egy 10-20-50-szer kisebb ciklusba. Ilyenkor a C ciklusszervezési overhead-je annyiszor kisebb csalást fog okozni, ahány időzítési utasítást tettél a magba.
beraktam egy 10 lépéses forba ezt: wait(DELAY_240Us); de így is túl gyors.
ha jól számoltam 24 másodpercnek kéne lennie.
Ha ez 240us akkor annak bizony 2.4ms-nek kell lennie! Azt szabad szemmel eleg nehezkes kovetni
Probald mar ki a logic toolt ha mar emlegetted - elektronikaban sokszor a gyakorlat tobbet szamit mint az elmelet - noha az is fontos - szoval proba teszi a mestert. Ha felrobban ugyis ki kellett volna cserelni - Murphy...
áááááááááááá
műxik nem arra volt állítva az OW_WRITE_PIN amelyikre dugtam a ds1820at, pedig tisztán emlékszem, hogy átírtam ... a lényeg, hogy működik Köszi szépen a segítséget! Még egy kérdés: 24MHz-en menni fog az usb-s kommunikáció? nem baj, ha lassabb
Nem teljesen értem. 10-es ciklusban a 240us időzítés? Az csak 2400us, azaz 2.4ms.
Nem véletlenül írtam tízezres, százezres ciklust, elvileg ilyen ciklusban futtatva lenne 2.4 vagy 24 másodperc, amit stopperrel is lehet jól mérni.
Menni fog, ha a kontroller érkezik kiszolgálni az enumerációt induláskor, illetve azután az adatátvitelt. Ha egyszer az enumeráció megvolt, akkor már a kapcsolat fenntartása nem igényel processzoridőt. Akár meg is lehet állítani ICD2-vel, a gép akkor sem dobja el az usb kapcsolatot.
ez volt a kód:
10*10 *240 = 24 ms
Örülök, hogy megoldódott!
A 24MHz a feldolgozást befolyásolja csak, az USB kommunikációt a külön előállított órajel szinkronizálja, ha úgy állítod be. A 4550 doksiban a Figure 2-1 mutatja az oszcillátorblokkot, azt érdemes tanulmányozni. Az USB-re jutó órajelet az FSEN bit szabályozza. Ha FullSpeed-et választasz, akkor mindenképpen a PLL-es ágról, illetve közvetlenül a kvarcoszciról kaphat órajelet. A FullSpeed módhoz mindenképpen 48MHz-et kell kapnia az USB Peripheral felé mutató kimeneten. Ez vagy 48MHz-es kvarcoszcival, vagy 4-gyel osztható értékű kvarcoszcival és a PLL-es áramkörrel lehet elérni. FullSpeed üzemmódban elég nagy szabadságod van, hogy a CPU felé menő órajel honnan, hogyan alakuljon ki (a 96MHZ-es PLL-ből is jöhet osztással, vagy közvetlenül a kvarcoszcitól, osztással, lehet belső órajel vagy Timer1 oszcillátorból származó jel is). Ha viszont LowSpeed USB-t választasz, akkor az USB peripheral kimeneten 6MHz-nek kell lenni. Ez meghatározza, hogy a "primary clock" ponton csak 24MHz jelenhet meg (vagy a kvarctól közvetlenül, vagy a PLL felől). Ezen kívül lehet még Timer1 oszcillátor vagy belső.
köszi
ezt a rész holnapra hagyom, remélem lesz rá időm
Segítséget kérek:
CCS C-t használok és egy 873-as PIC-et hergelek. Egy interrupt kiszolgálása remekül megy. De le tudná-e valaki írni egy pár sorban, hogy hogyan illik kultúráltan leprogramozni egy több megszakítást kezelő interrupt handlert? Köszi előre is!
CCS-nél minden megszakításforráshoz külön függvény tartozik. A függvény fejléce felett kell elhelyezni, hogy az a függvény melyik megszakításhoz tartozik. Valami #TMR0_INT, #EXT_INT, ilyesmik azonosítják a megszakításokat.
Más C fordítóban és asm-ben is úgy kell csinálni, hogy megnézzük egyesével a flageket, és amelyik bebillent, végrehajtjuk az ahhoz tartózó rutint. Ugyanez az egyesével végignézés történik meg a CCS esetén is, csak a flagek vizsgálatát a fordító beleteszi. Asm-ben valami ilyesmi lenne
C-ben meg valami ilyesmi if (TMR1IF) //C18-ban PIR1bits.TMR1IF { // Timer 1 ISR } if (RBIF) // PIR1bits.RBIF { // PortB Interrupt-On-Change ISR } Ne vedd konkrétumnak, hogy a TMR1IF az a PIR1 regiszterben van, nincs előttem adatlap, hogy megnézzem. Asm-ben még a (W, STATUS, és szükség esetén a többi használt) regiszterek mentését is meg kell csinálni, mielőtt hozzányúlunk bármihez is, illetve a visszaállításukról is gondoskodni kell.
Köszi a segítséget!
Az zavart meg, hogy assembly-hez, meg Hitech C-hez is találtam mintarutinokat és mindkettőnél az általad leírt módon nézett ki az ISR rutin, "egydarabban". A CCS C hiányos loosermanuálja meg csak egy interrupt kezelését mutatta be. Köszi mégegyszer!
Még egy kérdés:
Szabad-e "kiugrani" az interrupt handlerből, pl. egy függvény meghívásával, vagy a rutinon belül kell lerendezni mindent?
Szabad, de inkább ne csináld. A fordító ekkor minden regisztert ment, azokat is, amiket egyébként nem lenne muszáj, mert a nem tudja, hogy a függvény miket használhat. Feladattól függ, de a mentegetés és visszatöltés jelentős processzoridőt is igényelhet.
Idézet: „A CCS C hiányos loosermanuálja meg csak egy interrupt kezelését mutatta be.” Topi cikke viszont ezzel is foglalkozik!
Tök jó, szemléletes és érthető.
Mindenképp végig fogom olvasni. :yes: Köszi Neked is!
sziasztok!valaki megtudná mondani hogy mplabban hogy tudom a 877et programozni pickit2vel?
Ja és hogy kell hexbe exportálni rendesen a programot? köszi
1.
Programmer->Select Programmer alatt kiválasztod a Pickit2-t. Programmer->Connect-el csatlakozik az MPLAB a Pickit2-höz, és megpróbálja felismerni a cél chipet. Programmer->Program, és már be is van égetve a program. 2. Amikor lefordítod, akkor létrejön a hex fájl a forráskód mellett (illetve a projekt beállításaitól is függ, hogy hol, de ha nem állítottad, akkor az említett helyen). Amúgy File->Export->OK
Na igen csak az mplabban a 877es device elvileg nem kompatibilis a pickit2 vel ezért ha beállítom a picet akkor szürke lesz a pickit2 és nem lehet kiválasztani!
Akkor szedd le a legújabb MPLAB-ot!
Uhum, ez igy igen erdekes rejtett hibakat hoz majd elo minden kezdo PICezonel... De nem a fejlesztesi otletek c. topicban kellene ezt felvetni inkabb? Vagy irni neki szemelyes uzenetet, mert lehet meg senki sem szolt hogy ez igy nem okes?
Én már szóltam egyszer, amikor a cikk felkerült. Akkor reakció is volt rá, hogy javítva lesz. Most megint megnéztem, és még mindig nincs javítva.
Hat, amig az nincs javitva addig nem fogom javasolni azt a cikket senkinek sem - utana csak a problemak lesznek es egyreszt sajnalom azt aki az alapjan bajlodik masreszt majd ide szokas szerint csak kodreszletek kerulnek csak be, hogy mert nem mukodik, mi lehet a baja az alabbi 3 soros kodnak es persze nem ott van a baj csak epp mindig akkor szakad felbe szerencsetlennek a program futasa igy nem erti miert vacakol a fw-je - mi meg nem fogjuk ossze kotni a Z flaggel mert nem az egesz forrast kuldik majd el szokas szerint...
Na, most elore temetem a pacienst... |
Bejelentkezés
Hirdetés |