Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Én egyébként az írtam, hogy
Idézet: , mivel szerintem mind a két névvel illetik. „árnyékregiszter (regiszterverem)”
Hali!
Nem tudjátok véletlenül hogy a PIC18F45K20 analóg bemenetének a belső ellenállása mennyi kellene h legyen? PORTE,2-n használok ADC-t és 3 V mellett 15mA belemegy. Kicsit sokallom....
Az árnyékregiszterrel vigyázni kell, mert olyan megszakítások kezelése esetén (pl. időzítési kiszolgálás), amely már egy futó megszakítás kiszolgálásából (pl. beérkezett karakter feldolgozása) lett meghíva, hibás esredményt ad, mivel csak 1 mélységű a verem. Igaz, ki lehet tiltani a megszakításokat is a feldolgozás alatt erre érzéketlen esetekben.
Sziasztok!
Nem is tudom kinek kellene válaszolni... Egy nagyon népszerű típus (18F2550) errata -jából Idézet: „If an interrupt occurs during a two-cycle instruction that modifies the STATUS, BSR or WREG register, the unmodified value of the register will be saved to the corresponding Fast Return (Shadow) register and upon a fast return from the interrupt, the unmodified value will be restored to the STATUS, BSR or WREG register. For example, if a high priority interrupt occurs during the instruction, MOVFF TEMP, WREG, the MOVFF instruction will be completed and WREG will be loaded with the value of TEMP before branching to ISR. However, the previous value of WREG will be saved to the Fast Return register during ISR branching. Upon return from the interrupt with a fast return, the previous value of WREG in the Fast Return register will be written to WREG. This results in WREG containing the value it had before execution of MOVFF TEMP, WREG. Affected instructions are: MOVFF Fs, Fd where Fd is WREG, BSR or STATUS; MOVSF Zs, Fd where Fd is WREG, BSR or STATUS; and MOVSS [Zs], [Zd] where the destination is WREG, BSR or STATUS.” Nagyon sok típus küzködik még ezzel a hibával...
Ott valami gáz van! A bemeneti ellenállásra most nem emlépkszem, de arra igen, hogy max. 10k forrásimpedanciát szoktak megadni. Egy rajzot csatolj, hogy lássuk, hogy kötötted be!
Biztosan A/D bemenetnek van állítva a láb, nem Digit kimenetnek?
Működni végülis működik. A PIC-en (kikapcsolt állapotban foglalatból kivéve) a PORTE,2 és a GND között mértem ellenállást 220 Ohm volt.
Légyszi, olyan forátumban tedd fel a kapcsolást, amit a böngésző meg tud nyitni!
Viszont a mért érték szinte biztosan nem jó, azaz a PIC sérült. De ha működik, akkor próbáld használni! Idézet: „Affected instructions are: MOVFF Fs, Fd where Fd is WREG, BSR or STATUS; MOVSF Zs, Fd where Fd is WREG, BSR or STATUS; and MOVSS [Zs], [Zd] where the destination is WREG, BSR or STATUS” Milyen utasítást kell érteni a MOVSF, MOVSS alatt? Egyébként nagyon hasznos volt nekem az errata idézet, próbálok emlékezni majd szükség esetén rá... :yes:
Szia!
Sok 18F képes az úgynevezett "Extended Instruction Set" kiegészítéssel is működni. Ide tartoznak ezek az utasítások. Bővebben pl. a 18F2620 adatlapjában... Érdemes a típushoz tartozó errata dokumentumot is végigolvasni - sok fejfájástól megóvhatjuk magunkat...
És ha már az errataknál tartunk milyért van az, hogy belőle több verzió is fellelhető. Pl: B0, B2 stb.
Ezek hol rövidebbek, hol hosszabbak a korábbinál. Akkor tehát adott processzorra melyik errata igaz? Ha jól emlékezem ki lehet olvasni a procból olvasni valami azonosítót, ez segíthet a beazonosításban, de honnan tudjam, ha legközelebb veszek egy IC-t az milyen errataval fog rendelkezni? Kérdezzem meg az eladót milyen REV -el rendelkezik? (Ráadásul úgytudom az errata gyűjtemény a microchip tapasztalati úton komoly fejlesztőktől begyűjtött visszajelzéseire épül, így koránt sem biztos, hogy minden esetben teljeskörű....) Avagy hogy is van ez?
Szia!
Kétféle errata lehet: Datasheet errata / clarification: az adatlap hibáit, esetleges homályos megfogalmazásait javítják benne. Néha az adatlapot is módosítani kell az újabb verzióhoz... Az adatlap végén van a Revision History... Silicon errata: A chip tervezésénél becsúszott hibákat gyűjti. Minden errataban minden hibánál fel van sorolva melyik kontroller (Device Id) és melyik verziójára (Revision Id) vonatkozik. A hibákat az újabb reviziókban javítják, de volt amikor a javítás hozott be újabb hibát...
Rendben, de itt van példának egy ethernet kontroller az ENC_28J60. Ennek aztán bőven van (B1-B4-B5-B7) Silicon errataja. Device Rev '000 0010' hez ez tartozik, míg például a Device Rev '0000 0110' hez már ez .
Az a fura, hogy a B7 ben már 15 hibáról tesznek említést, addig az első kiadású B1 ben csak 6 ról. Tehát egyrészt nem világos merre fele fejlődik a processzor. Másik dolog pedig továbbra is az, hogy amikor veszek egy ugyanolyan típusú IC-ből kettőt nem tudom meg milyen a Device Rev érékűek, tehát lehet nem is fognak egyformán működni ugyanazon körölmények között (más-más hibáik lesznek). A Fenti controller csak egy példa, de erről mi a véleményed?
Hellósztok,
csak egy egyszerü kérdésem lenne,adott 1 programozó,pickit3 ha mplabból beállitom,hogy ne a programozó adjon feszültséget, és adok külső tápról 5v-ot,akkor programozáskor lekell vennem a programozót, vagy ilyesmi? vagy maradhat rajta,és nem lesz tőle semmi baja? eddig onnan (a programozóról) adtam a feszültséget,és úgy programoztam,futattam,de most kellessz egy nagyobb áramerősséget is elbiró külső táp(labortápról) Idézet: Mit is akartál kérdezni? A PK2 nél - ha jól emlékezem - be lehet állítani, hogy auto modban felismerje Udd jelenlétét. „akkor programozáskor lekell vennem a programozót, vagy ilyesmi?”
Egyszer már írtam neked, hogy ezek nem processzorok!
A felvetett problémádra pedig nincs megoldás, te is tudod. Ha fejlesztesz egy adott verzióval, akkor annak az errata-ját kell figyelembe venned. Ha később cserélni kell a kontrollert, és olyan szerencsétlen helyzetbe kerülnél, hogy az akkor kapható verzióban több és más hibák vannak, és azok érintik a működést is, akkor annak az errata-ja alapján kell módosítanod a programot. Ilyen az élet, de megnyugtatlak, ezek nem olyan hibák, amik mindig, mindenhol belédütköznek, de nem ért felkészülni rájuk az erratákkal. Idézet: „Ha jól emlékezem ki lehet olvasni a procból olvasni valami azonosítót” A kiolvasott 16 bites adatból a legalsó 5 bit a revízió kódja, a többi a CPU azonosítója. PIC18 példa:
Kisvé:
Igen. Amiatt írtam. MPi-c: Mivel én PIC24-et használok - ahol mindig így hivatkoznak rá a doksikban - én is ezt az elnevezést használom. A PIC18 adatlapokon vagy az "FRS", vagy a "Shadow Registers" kifejezést használják. (pl. RETFIE utasítás leírásánál) Mindkettő ugyanazt takarja. trudnai: Tudom hogy az adatlap is veremként említi, de valójában nem nevezhető annak. (épp a mélysége miatt) Egyébként meg ezzel kapcsolatban (FAST mód) igazad van, viszont a LAT és PORT regiszterekben már nem.
Ok, latom mar, hogy a RETFIE-nel a shadow registers elnevezest hasznaljak. Ez azert igy elegge zavaro, mivel ahol ezt reszletesen magyarazak ott a stack kifejezest hasznaljak -- es szamomra egyebkent is igy lenne logikus, hiszen egy stack-et kesobb lehet boviteni tobb melysegure, egy egyszeru tarolot azonban nem.
Na mindegy, a LAT-tal kapcsolatban nem tudom mi volt a szandekod, nehez ugy vitatkozni vagy akar csak elgondolkodni is egy probleman, ha egyszeruen csak kijelented nincs igazam es punktum
"Az arnyek regiszter a LATx regiszterek, a PORTx regiszterek arnyekai."
Na, ebben nem értek veled egyet. Miért is lenne a LAT regiszter a PORT regiszter árnyéka? PORTx: bemeneti tároló (láb aktuális állapota) LATx: kimeneti tároló (latch) TRISx: adatirány / a kimenet high-Z állapotú (tri-state)
Azert, mert a LAT csak az RMW hibak kikuszobolesere lett kitalalva. Tulajdonkeppen a midrange es a baseline csaladoknal megszokott szofteresen megvalositott arnyek regisztereket hivatott hardware-esen tamogatni. Ha megnezed a PORT biteket tovabbra is lehet birizgalni kimenetkent, hisz a LAT csak akkor tolja at az ertekeit a PORT-ba ha a LAT-ba irasi muvelet tortenik -- mindegy, hogy RMW vagy csak W.
De amugy mindegy minek hivjuk ezeket vegulis, lenyeg, hogy ertsuk hogyan mukodik es mikent kell hasznalni. Idézet: „Tulajdonkeppen a midrange es a baseline csaladoknal megszokott szofteresen megvalositott arnyek regisztereket hivatott hardware-esen tamogatni.” Ez azért nem egészen így van, illetve nem ebben rejlik a különbség, hiszen a mid-range mikrovezérlőknek is van kimeneti adatregisztere. A LATA, LATB stb. bevezetésével tehát a kimeneti oldalon nem raktak be újabb regisztert. A különbség csupán annyi lett, hogy a beolvasási útvonalat választották ketté, s LATA címen a kimeneti adatregisztert, PORTA címen pedig a lábak állapotát olvashatjuk. Ez a kettéválasztás természetesen a read-modify-write utasítások olvasási ciklusában is érvényes, ezáltal megoldja a korábbi RMW problémákat. Írásban azonban semmi különbség LATA és PORTA írása között, ugyanazt a kimeneti adatregisztert írják. Ezt kifejezetten írja is valahol az adatlap, de a sematikus áramköri felépítésből is látszik.
Pont ez az, hogy eddig nem volt regiszter a latch-hez rendelve, az csupan egy buffer volt azodaig. Azzal, hogy lere hoztak egy regisztert nem valtoztattak meg az adat utvonalat, hiszen a portrol tovabbra is tudsz olvasni meg ha kimenetnek van beallitva is -- ez a resze pontosan ugyanugy mukodik, mint a midrange-eknel. Azonban ha a LATx regisztereket olvasod, ahogy mondtad a latch-et olvasod a port helyett -- magyaran bevezettek egy uj regsztert aminek mas az olvasasi utvonala es a celja.
Abban termeszetesen igazad van, hogy a latch ott van mindket csaladban es, hogy airaskor minden esetben ezt a latch-et irja -- ezt rosszul irtam.
Áramkörileg a Data Latch környékén valóban nem lelhető fel különbség, ezen én is meglepődtem, de ki lehet olvasni a LATx-et is(ami nem más, mint a Data Latch tartalma)! Itt lesz az eltérés az RMW terén, mert ha PORTx-re írsz, akkor a PORTx-et olvassa be kiírás előtt, ha LATx-re, akkor a LATx tartalmát! Belátható, hogy a két módszer eredménye a kimenet valós szintjétől függően nem feltétlenül lesz azonos! Igazad van, hogy nincs külön regiszter a régihez képest, de nem mindegy, hogy mire írsz!
Közben megértettem, hogy ezt hogy értetted: Idézet: „Írásban azonban semmi különbség LATA és PORTA írása között, ugyanazt a kimeneti adatregisztert írják.” A teljes porta írási folyamatban nem mindegy mit írt, de valóban csak az írási részben nincs különbség, csak ezt elég nehéz elválasztani ezért értettem félre!
Kapkodtam, kicsúsztam...
Idézet: „A teljes porta írási folyamatban nem mindegy mit írt,” Akarom mondani: A teljes portra írási folymatban nem mindegy mit írsz(PORTx, LATx), ...
Mielőtt teljesen elbeszélnénk egymás mellett, tisztázzuk már, hogy ki mit ért regiszter, latch és buffer alatt!
Egy meghatározás szerint a regiszterek a CPU gyorsan írható/olvasható, ideiglenes tartalmú, és egyszerre csak egy gépi szó feldolgozására alkalmas tárolóregiszterei. Amikor tehát azt mondom, hogy a mid-range vezérlőknek is van kimeneti adatregisztere, akkor azon pontosan azokat a tárolóegységet kell érteni, amit te latch-nek, illetve buffernek nevezel. Tehát regiszter mert címezhető, írható és tárolja az adatot. Csak visszaolvasni nem lehetett, mert helyette az adatvonalak állapotát lehetett látni, ami csak akkor tükrözte a kimeneti adatregiszter állapotát, ha a TRIS regiszter megfelelő bitjének beállítása ezt írta elő. A LATA "regiszter" bevezetése csupán annyit jelent, hogy a korábban is meglevő adatregiszter egy tri-state kapu segítségével rá lehet kapuzni az adatbuszra (lásd a mellékelt ábra pirossal megjelölt részét). Ezt szerintem nem tekinthetjük új regiszter implementálásnak, hiszen nem jött létre új tárolási egység, csak az amúgy is meglevő tároló olvashatóvá tételét szolgálja egy kapuáramkörrel. Idézet: Na, akkor javítsunk rajta még egyet! Csak az olvasási ciklust is tartalmazó műveleteknél (R, vagy RMW) nem mindegy, hogy PORTx, vagy LATx. „Akarom mondani: A teljes portra írási folymatban nem mindegy mit írsz(PORTx, LATx), ...” Egy movwf PORTA vagy movwf LATA között nics különbség. A bcf PORTA,1 vagy bcf LATA,1 között nyilvánvalóan van, hiszen RMW művelet. Sajnálatos módona bitenkénti logikai műveletek is ez utóbbi kategóriába esnek, hiszen a port olvasása nélkül nem lenne előállítható a végeredmény.
En szerintem a regiszterben nem feltetlen tarolodnak ideiglenesen az adatok, de ebbe most ne menjunk bele, nem ide tartozo tema.
Valoszinuleg mas szemmel nezzuk a dolgot, ugyanis Te azt allitod, hogy mert a latch megorzi a kimeneti allapotot, ezert regiszternek kell nevezni. En meg azt, hogy a latch celja nem informacio tarolas, csupan egy kimeneti allapot rogzitese, ezert nem regiszter, hanem egy buffer. Azonban abban a pillanatban mikor megcsinaltak hozza a kiolvasasi lehetoseget mar regiszterbek lehet nevezni. Ez pedig ugye nem csupan egyetlen vezetekbol all amit pirossal bekarikaztal, de hozza tartozik egy memoria mappingeles is ami nelkul ez az adat elerhetetlen lenne. Vegeredmenyben ez is egyfajta IO mapping csak mig a PORTx eseteben ez a port labakra vonatkozik, addig a LATx-nel a latch bufferre. |
Bejelentkezés
Hirdetés |