Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   225 / 1319
(#) gyengus válasza potyo hozzászólására (») Jún 4, 2008 /
 
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.
(#) szilva válasza gyengus hozzászólására (») Jún 4, 2008 /
 
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.
(#) gyengus válasza szilva hozzászólására (») Jún 4, 2008 /
 
nincs frekimérőm, pickit2 logic tooljával nem lehet valahogy eééenőrízni?
(#) szilva válasza gyengus hozzászólására (») Jún 4, 2008 /
 
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.
(#) gyengus válasza szilva hozzászólására (») Jún 4, 2008 /
 
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.
(#) trudnai válasza gyengus hozzászólására (») Jún 4, 2008 /
 
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...
(#) gyengus válasza gyengus hozzászólására (») Jún 4, 2008 /
 
áááááááááááá
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
(#) gyengus válasza trudnai hozzászólására (») Jún 4, 2008 /
 
egy ezressel elnéztem
(#) szilva válasza gyengus hozzászólására (») Jún 4, 2008 /
 
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.
(#) potyo válasza gyengus hozzászólására (») Jún 4, 2008 /
 
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.
(#) gyengus válasza szilva hozzászólására (») Jún 4, 2008 /
 
ez volt a kód:
  1. while (1){
  2.         LATDbits.LATD3 = !LATDbits.LATD3;
  3.         for (i = 0; i < 10; i++) {
  4.                         wait(DELAY_240Us);
  5.                         wait(DELAY_240Us);
  6.                         wait(DELAY_240Us);
  7.                         wait(DELAY_240Us);
  8.                         wait(DELAY_240Us);
  9.                         wait(DELAY_240Us);
  10.                         wait(DELAY_240Us);
  11.                         wait(DELAY_240Us);
  12.                         wait(DELAY_240Us);
  13.                         wait(DELAY_240Us);
  14.         }
  15.         }

10*10 *240 = 24 ms
(#) gyengus válasza potyo hozzászólására (») Jún 4, 2008 /
 
köszi
(#) szilva válasza gyengus hozzászólására (») Jún 4, 2008 /
 
Ö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ő.
(#) gyengus válasza szilva hozzászólására (») Jún 4, 2008 /
 
köszi
ezt a rész holnapra hagyom, remélem lesz rá időm
(#) gyerek67 hozzászólása Jún 5, 2008 /
 
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!
(#) potyo válasza gyerek67 hozzászólására (») Jún 5, 2008 /
 
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

  1. btfsc PIR1, TMR1IF
  2. call TMR1_ISR
  3. btfsc PIR1, RBUF
  4. call RBIF_ISR


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.
(#) gyerek67 válasza potyo hozzászólására (») Jún 5, 2008 /
 
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!
(#) gyerek67 hozzászólása Jún 5, 2008 /
 
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?
(#) potyo válasza gyerek67 hozzászólására (») Jún 5, 2008 /
 
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.
(#) gyerek67 válasza potyo hozzászólására (») Jún 5, 2008 /
 
Köszi az infókat potyo!
(#) MPi-c válasza gyerek67 hozzászólására (») Jún 5, 2008 /
 
Idézet:
„A CCS C hiányos loosermanuálja meg csak egy interrupt kezelését mutatta be.”

Topi cikke viszont ezzel is foglalkozik!
(#) gyerek67 válasza MPi-c hozzászólására (») Jún 5, 2008 /
 
Tök jó, szemléletes és érthető.
Mindenképp végig fogom olvasni. :yes:
Köszi Neked is!
(#) Soulskater hozzászólása Jún 6, 2008 /
 
sziasztok!valaki megtudná mondani hogy mplabban hogy tudom a 877et programozni pickit2vel?
Ja és hogy kell hexbe exportálni rendesen a programot?

köszi
(#) potyo válasza Soulskater hozzászólására (») Jún 6, 2008 /
 
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
(#) potyo hozzászólása Jún 6, 2008 /
 
Topi cikkében még mindig rosszul van a W és STATUS regiszterek mentése az asm példában. Ezt ki kellene javítani.
Link
Link
Link
Link
(#) Soulskater válasza potyo hozzászólására (») Jún 6, 2008 /
 
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!
(#) potyo válasza Soulskater hozzászólására (») Jún 6, 2008 /
 
Akkor szedd le a legújabb MPLAB-ot!
(#) trudnai válasza potyo hozzászólására (») Jún 6, 2008 /
 
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?
(#) potyo válasza trudnai hozzászólására (») Jún 7, 2008 /
 
É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.
(#) trudnai válasza potyo hozzászólására (») Jún 7, 2008 /
 
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...
Következő: »»   225 / 1319
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem