Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   833 / 1319
(#) szilva válasza szaffo555 hozzászólására (») Nov 10, 2010 / 2
 
Szerintem nem értetted meg Ideiglenes aggályait. Nem az a kérdés, hogy tudsz-e a megszakítás elején hozzápiszkálni a Timer1-hez, hanem az, hogy mikor is esik be az a megszakítás pontosan. Merthogy a fő programvonulat csinál valamit, ami közben épp túlcsordul a timer1, a flagja ugyan beállítódik, de lehet, hogy maga a megszakításkiszolgálás majd csak valamikor később fog érvényre jutni. Ennél már csak az a cifrább, hogy amikor a megszakításban a timer1 regisztereit piszkálod, akkor nem mindegy (a timer1 órajelének fázisához képest), hogy mikor teszed ezt meg, mert ettől függően kimaradhat egy számolási lépés. Mivel van bizonytalanság abban, hogy a kiváltó okot mennyi idővel utána kezeled le, ez a fázishelyzet sem garantálható, különböző trükkökhöz kell folyamodni (lásd errata). Ráadásul ilyenkor nem nullázni vagy fix értékkel írni szokás a timer1 regisztert, hanem hozzáadni valamennyit az értékéhez, hogy a túlcsordulástól a lekezelésig eltelt idő alatt megszámolt érték ne vesszen el csak úgy. A komparálásos megoldásnál abban biztos lehetsz, hogy a timer1 folyamatosan, zavartalanul fog számolni, nem fog az újratöltésekkor kiesni egy megszámlálandó impulzus sem, ennél fogva a kiváltott interruptok ismétlődési gyakorisága biztosan a timer1 alapórajelének (pl. kvarc) pontosságától fog függeni. Igaz, hogy az interrupt kiváltása és lekezelése közötti időben ugyanúgy benne marad a bizonytalanság, tehát lehet jitter az interruptok lekezelése között, viszont maga a kiváltó ok (a CCP flag beállása) pontosan ütemben fog megtörténni.

Ezek a fejtegetések arra az esetre vonatkoznak, ha a beérkező interruptok közötti időt kell pontos értéken tartanunk. Ha nem ez a cél, hanem az, hogy a firmware egy pontjáról indított pontos időzítés végén legyen az interrupt, akkor jó lehet a direkt timer regiszter-írás is, és ez az írás történhet az interruptból is. Természetesen mindkét esetben célszerű a főprogramot úgy szervezni, hogy a fent említett jitter minimális legyen, pl. nem illik az interruptokat letiltani.
(#) messer válasza Hp41C hozzászólására (») Nov 10, 2010 /
 
Szia! Ezt nagyon nem bírom megérteni az említett kódrészletben miért van erre szükség? movlw high ModeSelectTable ; jump to the current mode Miért van ez benne? Nekem bit szinten kellene elmagyaráznod...
(#) Ideiglenes válasza szilva hozzászólására (») Nov 10, 2010 /
 
Ezt magam sem írhattam volna gyönyörűbben...
(#) watt válasza messer hozzászólására (») Nov 10, 2010 /
 
  1. movlw high ModeSelectTable

A W-be teszi a tábla címének felső 8 bitjét, amit utána a PCLATH regiszterbe tölt a következő sorok egyikében. Ez akkor kerül be a PC felső 8 bitjére, amikor a PCL betöltésre kerül. Ez szinkronizációs okokból van így, ezt könnyű belátni miért.
Az ezt követő utasítás már az új PC címen hajtódik végre, azaz a táblázat megadott címén. A táblázatnak nem szabad lapon átnyúlnia, mert az gondot okozhat, azt külön kéne kezelni, ha még is így lenne.
(#) cassis hozzászólása Nov 11, 2010 /
 
Egy kicsit belenéztem a pic24 világába, de az elmélet első lépéseinek felfogása után rögtöm megakadtam az első példprogramom kipróbálása során.
Az MPLAB ban kiválasztom a device select -ben a PIC24HJ128GP502 -t. A programban includolom eszerint:
  1. .include "p24HJ128GP502.inc"

Aztán fordításkor a következő üzenetet kapom:
Error in parameter"24HJ128GP502"
(a program további sorokból is áll)
Ez milyért van???
(#) icserny válasza cassis hozzászólására (») Nov 11, 2010 /
 
Nézd meg at MPLAB IDE Project/Set Language Toolsouite menüpontban, hogy az MPLAB ASM30 Toolsuite van-e kiválasztva? (könnyű mellényúlni kattintáskor...)

MPLAB melyik verziója van telepítve?
(#) szaffo555 válasza szilva hozzászólására (») Nov 11, 2010 /
 
Nagyon hálás vagyok a részletes válaszért. Kissé tamáskodva ismerem be, hogy még mindig kis kiegészítésre szorulok a kérdés pontos megértéséhez.
Ha szbad válaszodba azokon a helyeken belekérdeznék, ahol nekem nem világos a dolog.
Idézet:
„a fő programvonulat csinál valamit, ami közben épp túlcsordul a timer1, a flagja ugyan beállítódik, de lehet, hogy maga a megszakításkiszolgálás majd csak valamikor később fog érvényre jutni”
Rendben ez érthető, de úgy számolom, hogy a programomban a túlcsordulás előtt (nem is kevéssel, 16 bites módban) mindenképpen be kell következnie a megszakítás kiszolgáló résznek is. Ez alatt kifejezetten azt értem, hogy nullázom a TIMER1 számlálóit, és innentől már ujraindulhat a számolás, még akkor is, ha van további programsor a megszakítás kiszolgáló rutinban. Azt is biztosított, hogy a megszakítás kiszolgáló rész futása alatt nem lehet újabb egyezés a comparátorral, az interruptot nem kell tiltanom, mert meglehetősen rövid lenne az érintett kód.
Idézet:
„Ennél már csak az a cifrább, hogy amikor a megszakításban a timer1 regisztereit piszkálod, akkor nem mindegy (a timer1 órajelének fázisához képest), hogy mikor teszed ezt meg, mert ettől függően kimaradhat egy számolási lépés.”

Itt arra gondolsz, hogy éppen az alsó byte -on túlcsordulás van, és akkor "piszkálom" (resetelem)
TMR1 -et? Ez okozhat gondot szerintem, a fentiekben írt okok miatt.
Idézet:
„Ráadásul ilyenkor nem nullázni vagy fix értékkel írni szokás a timer1 regisztert, hanem hozzáadni valamennyit az értékéhez, hogy a túlcsordulástól a lekezelésig eltelt idő alatt megszámolt érték ne vesszen el csak úgy.”

Hozzáadni? Akkor nem veszik el? Mit érek vele, ha az aktuális érték (ami már nem nulla) 10 helyett 15 lesz?
Idézet:
„Igaz, hogy az interrupt kiváltása és lekezelése közötti időben ugyanúgy benne marad a bizonytalanság, tehát lehet jitter az interruptok lekezelése között, viszont maga a kiváltó ok (a CCP flag beállása) pontosan ütemben fog megtörténni.”

Itt arra gondolsz, hogy a kiszolgáló rutinban lehet olyan uatasítás, ami néha 1 néha 2 ciklusú, és ezért kiszámíthatatlan a futás idő? (pl. BTfSS)
A korábbi válaszok tükrében kicsit tudnál még csiszolni ismereteimen?
(#) cassis válasza icserny hozzászólására (») Nov 11, 2010 /
 
MPLAB verzió: 8.10
Jót kérdeztél, mert a Project/Set Language Toolsouite menüpontban csak a registerd tools -ok vannak felsorolva, hogy melyik van "kiválasztva" azt nem tudom eldönteni. Megpróbáltam a következőt, mivel pontosan olyant nem találok amit írtál: a megjelenő tools -ok közül a Microchip ASM30T Toolsite / Executables / MPLAB ASM30 Assembler (Pic30-as.exe)
választom, majd OK -ot ütök.
Sajna ugyanaz történik, tehát valamit nagyon rosszul csinálok.
megj: A kiválasztott proci tipusának megfelelő p24HJxxxx.inc file megvan az MPLAB könyvárában.
(#) watt válasza szaffo555 hozzászólására (») Nov 11, 2010 /
 
A leggyakrabban akkor nem teljesül azonnal a pl. timer megszakítás, ha éppen egy másik megszakítás folyamatban van. A lekezelés akkor teljesül, ha az előző megszakítás befejeződött. Hiba lenne abból kiindulni, hogy nekem úgy se lesz más megszakítás, mert ha még is, akkor borult az egész program felépítése. Más szinkrozizációs okokból is csúszhat a timer mire a megszakítás lekezelésre kerül, ilyenek a két programlépéses parancsok lefutásából származó csúszások is és más az erratákból kiolvasható esetleges hardveres problémák is.
A timer számolása növekvő, megszakítás a túlcsorduláskor következik be. Ezért ha módosítani szeretnénk a megszakítások bekövetkezését az eredeti 16bittől eltérően, akkor egy nagyobb számot kell beírni, mint 0. Ha ezt fixen beírnánk, és a fent említett kiszolgálás csúszik, akkor hibás kezdőértéket kap a számláló, miután kidobnánk a kiszolgálásra várakozás közbeni számláló növekedés értékét. De ha hozzáadjuk a kívánt értéket, akkor a már beszámolt érték nem vész el, pont annyival többről indul a számláló, amennyire szükségünk van. Tehát a timer reset, ami végül is egy fix szám beírását jelenti, nem jó megoldás.
(#) icserny válasza cassis hozzászólására (») Nov 11, 2010 /
 
Idézet:
„hogy melyik van "kiválasztva" azt nem tudom eldönteni.”
Elnézést kérek, mert rosszul írtam: nem a Set, hanem a Select Language Toolsuite menüpontot kell nézni! Ott egyértelmű, hogy melyik az aktív.

Az új projekt kezdése egyébként így megy:
1. A Project menüben válasszuk a Project Wizard-ot, majd a felbukkanó ablakban kattintsunk a Tovább gombra!
2. A Device mezőben válasszuk ki a PIC24HJ128GP502 mikrovezérlőt, majd kattintsunk a Tovább gombra!
3. Az Active Toolsuite mezőben válasszuk a "Microchip ASM30 Toolsuite"-ot, majd Tovább!
3. A Create New project lapon kattintsunk a Browse (tallózás) gombra, majd keressünk egy alkalmas helyet az új projektnek (pl. C:\PIC24) és adjunk nevet az új projektnek (pl. proba1)! Tovább...
4. Nem adunk hozzá forrásállományokat! Tovább...
5. Kattintsunk a Befejezés gombra!

Utána Project/Add New File to Project, adunk egy nevet, pl. proba1.s, s jöhet a kódbeírás.
  1. .include "p24HJ128GP502.inc"
  2.     .global __reset      ;The label for the first line of code.
  3.  
  4.         .bss            ;unitialized data section
  5. loc: .space 1        ;byte variable
  6.  
  7.         .text           ;Start of Code section
  8. __reset:                 ; first instruction located at __reset label
  9.     mov #__SP_init, W15  ;Initalize the Stack Pointer
  10.     mov #__SPLIM_init,W0  
  11.     mov W0, SPLIM        ;Initialize the stack limit register
  12.  
  13. loop:
  14.    goto    loop          ;loop forever
  15.    .end                  ;End of program code in this file
(#) cassis válasza icserny hozzászólására (») Nov 11, 2010 /
 
Igen, nekem sem tűnt fel, hogy a set tool felett ott van a select tool menű, de mentségemre legyen mondva, hogy szürkén. Az általad javasolt project szerint már valószínűleg menni fog a beállítás.
Köszönöm a segítséget!
(#) icserny válasza cassis hozzászólására (») Nov 11, 2010 /
 
Ajaj, ha szürke, akkor neked projekted sem volt?!
(#) cassis válasza icserny hozzászólására (») Nov 11, 2010 /
 
bevallom nem. Én notepad -dal szerkesztem a programot, (otthol is és a céges gépen is néha) majd átírom asm re, ezután ha olyan gép előtt ülök, amelyen van MPLAB lefordítom.
Szóval nekem eddig nem hiányzott a project.
(#) icserny válasza cassis hozzászólására (») Nov 11, 2010 /
 
Erről sürgősen le kell szokni, mert itt nem .asm hanem .s a kiterjesztés, ezt projekt nélkül nem fogja lefordítani az MPLAB.

Lentebb már leírtam, hogyan kell ezt szabályosan csinálni, csak azt nem írtam oda (ismertnek gondoltam), hogy .s a forrásfájl kiterjesztése.
(#) messer hozzászólása Nov 11, 2010 /
 
Van egy olyan problémám, hogy 10f220-nál gp2 kimenetnek van konfigurálva, mégis nem mindig csinálja a dolgát néha táp reset után nem hajlandó kimenetként üzemelni, hanem magától ad ki négyszög jelet. Néha meg jó a dolog. Találkoztatok már ilyen problémával?
(#) Hp41C válasza messer hozzászólására (») Nov 11, 2010 / 1
 
Szia!

Az OSCCAL regiszter 0. bitje állítja be, hogy az FOSC4 (az órajel negyede frekvenciájú négyszögjel) vagy a port bitje legyen a lábon.
(#) levi18 hozzászólása Nov 11, 2010 /
 
Sziasztok!
Van valakinek információja ,arról, hogy a Chipcad-hez
érkezett-e már készlet a 18f2550-i/sp-ből?
Még szeptemberben azt ígérték, hogy október végén lesz.
Köszönöm.
Üdv!
(#) Hp41C válasza levi18 hozzászólására (») Nov 11, 2010 /
 
Szia!

November végére jósolják, de a listájuk alapján 18LF2550 I/SP még van nekik...
(#) messer válasza Hp41C hozzászólására (») Nov 11, 2010 /
 
Ez az nagyon szépem köszönöm Már agyon néztem az adatlapot és nem jöttem rá.
(#) levi18 válasza Hp41C hozzászólására (») Nov 11, 2010 /
 
Köszönöm.
Ez csak abban különbözik a sima "F"-estől, hogy már 2V-tól működőképes, ugye? PICKIT2 klónhoz szeretném.
Szerintem megfelelő lesz bele.
(#) Hp41C válasza levi18 hozzászólására (») Nov 11, 2010 /
 
Szia!

Minden azt mondja, hogy mennie kell...
(#) messer hozzászólása Nov 11, 2010 /
 
10f220-nál szeretném ccsc-ben írni az osccal regisztert ehhez kéne segítség, mert valamiért táp rezet után néha gp2 nem üzemel kimenetként!
(#) levi18 válasza Hp41C hozzászólására (») Nov 11, 2010 /
 
Köszönöm.
(#) szaffo555 válasza watt hozzászólására (») Nov 12, 2010 /
 
köszönöm mindannyitoknak a választ a Timer kérdésemre.
(#) cassis válasza icserny hozzászólására (») Nov 12, 2010 /
 
A kezdeti lendület megtört, a fordításig nem jutottam el.
Az általad leírt project létrehozási lépések után létrejön az .mcp, .mcw, és .mcs filek. Most a következő lépés:
Idézet:
„Utána Project/Add New File to Project, adunk egy nevet, pl. proba1.s, s jöhet a kódbeírás.”

Gondolom itt pontosabban a Project/Add Files to Project et kell választani, de itt csak vagy meglevő filet lehet választani, vagy a filenévhez beírni egy új nevet. Ezután katt a megnyitásra, majd látszólag nem történik semmi, az ablak eltűnése után szürke MPLAB felüleletet látok.
Valamit azonban mégis sikerült elérni, mert a Project/Remove File From Project re kattintás után felhozza a korábban beírt filenév eltávolításának lehetőséget. Szóval hogy is lehet a kódot írni a projectben?
(#) watt válasza cassis hozzászólására (») Nov 12, 2010 /
 
Idézet:
„Gondolom itt pontosabban a Project/Add Files to Project et kell választani”

Nem jól gondolod. Kell nyitnod egy új szerkesztőablakot, (beleírni a kódot) és elmenteni, majd hozáadni a projecthez a project ablakban a source file alá.
Javaslom, hogy keresd meg a gyártó oldalán az MPLAB Getting Started with MPLAB IDE tutorialját, és tanulmányozd át, illetve az alapján indíts egy projectet.
(#) icserny válasza cassis hozzászólására (») Nov 12, 2010 /
 
Idézet:
„Gondolom itt pontosabban a Project/Add Files to Project et kell választani, de itt csak vagy meglevő filet lehet választani, vagy a filenévhez beírni egy új nevet.”
Eggyel mellényúltál, mert nem az Add Files to Project menüpontot kell választani, hanem az általam írt Add New File to Project menüpontot.
(#) cassis válasza icserny hozzászólására (») Nov 12, 2010 /
 
lassan azért haladok...
Már ott tartok, hogy az MPLAB elkezdi a fordítást, de hibával le is áll.
"cannot open linker script file p24HJ128GP502"
(#) watt válasza cassis hozzászólására (») Nov 12, 2010 /
 
Komolyan azt tervezed, hogy minden lépést megkérdezel, ami egyébként az előbb ajánlott dokumentumban le van írva? Egyrész már igen égő ez a bocaság, másrészt visszaélsz a türelmünkkel!
(#) icserny válasza cassis hozzászólására (») Nov 12, 2010 /
 
Én is csak azt tudom tanácsolni, hogy olvasd el a gyári dokumentációt, ha már úgyis ott van a telepítési könyvtárban. Egy magyar leírást pedig itt találsz.

Be kell állítani a korábban már emlegetett Set Language Toolsuite menüpontban az elérési útvonalakat. Be kell állítani a projekt opciókat. Be kell állítani az MPLAB IDE opciókat (de csak akkor, ha már tudod, hogy mi az, amit módosítasz!).
Következő: »»   833 / 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