- Fosc n
- -------------------
- 20 MHz 4165
- 40 MHz 8332
- 48 MHz 9999
Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
A 3.sor 2. oszlopában azt írja hogy 300-as baud-rate esetén 20MHz-nél a BRGH bitet 1-re kell állítani, a BRG16-ot szintén 1-be (hogy 16 bites osztót használjon), SPBRG értéke pedig 16665. Hogy ez utóbbit hogy tudod megtenni? Hát úgy hogy hogy SPBRG-be 0x19-et, SPBRGH-ba pedig 0x41-et írsz, mert a 16665 = 0x4119.
A bibi ott van, hogy a kérdező szerint 20 MHz a kristály és nem az oszcillátor frekvenciája. Az utóbbiról még semmit sem tudunk.
A megoldás nyitja valóban a BRG16=1 beállítás, az SPBGRH:SPBRG = n értéke viszont "attól függ"... n = Fosc/(16*baudrate) -1 Itt most baudrate = 300 tehát:
Igen, igazad van, a 20MHz-es kvarcról PLL-es beállítással lehet 48MHz, 32MHz, 24MHz, 16MHz, PLL nélkül pedig 20MHz, 10MHz, 6,66MHz és 5MHz -es Fosc frekvenciát kihozni.
az n = Fosc/(16*baudrate)-1 csak BRGH = 0 esetén évényes, BRGH = 1 esetén (amit én megadtam) az n = Fosc/(4*baudrate)-1 képlettel kell számolni (241.oldal alja). Azért választottam a BRGH = 1 -et mert ott 0% hibával lehet a 300 baudot kihozni szemben a másik 0,02%-os hibájával. Idézet: „Azért választottam a BRGH = 1 -et mert ott 0% hibával lehet a 300 baudot kihozni szemben a másik 0,02%-os hibájával.” Igazad van, a BRGH=1 jobb választás. Tanulság: a 20-3. táblázat folytatását is érdemes megnézni, mert ugyanarra az adatsebességre jobb közelítést is találhatunk.
Az odyssey program az EPIC plus programozóhoz készült, annál az LPT port bitkiosztása feltehetően más, mint az általad megépített kapcsolásnál.
Megoldási lehetőségek: - Watt programozójához használd az általa ajánlott programokat. - Az odussey programhoz építsd meg a mellékelt kapcsolást. - Elvi lehetőség az odyssey program átírása. - További lehetőség: a Vasco Parallel Port programmer megépítése
Az itt található szoftveres pwm -et tanulmányozgattam, és egy valamit nem értek, ezt írja:
Idézet: „This program will enable you to use 4 software PWM channels on the PIC16. The PWM frequency is about 400Hz using a 8 MHz crystal.” Hogyan jött ez ki neki? Azt írja, hogy a timer2 -t használja (16F88, 8-bites a timer2 ) megszakításnak és a PR2 -t feltöltötte 5 -el, ha jól értelmezem, akkor ez 251 -et tud előre fele számolni ( hogy idézzem trudnai egyik korábbi hozzászólásában írt elméletet, ehhez még hozzávettem szilva -szintén korábbi- hozzászólásában közölt számolást ), az tehát 2e06/251 =~ 8KHz, azt írja, hogy Idézet: , nos akkor ez kb.: ~80Hz -nek tűnik nekem így, jobbról-balról számolva is. Én számoltam félre, vagy rosszul értelmeztem a számolás menetét ? „The PWM resolution is in 100 steps, from 1 to 100”
Nem számoltam a többinek utána, de ha a PR2-be 5-öt tölt, akkor a Timer2 0-tól 5-ig számol, nem pedig 5-től 255-ig.
Köszönöm a tanácsokat!
Watt programozója is párhuzamos porton át vezérel, ennélfogva nem csak Watt programja jó hozzá, hanem pl.: éppen az odyssey is. Ezért nem építem meg okvetlenül az EPIC programozót, ha már megvan Watt-é. Esetleg később megépítem. Vasco programozóját is talán később megépítem, de most minek, ha megvan Watt-é? Az odyssey program átírása fölösleges, hiszen csak be kell állítanom, hogy az LPT port melyik pin-jének mi a szerepe, és hogy inverz-e a pin. Az egész beállítás csupán egyetlen szöveges állomány megszerkesztése, /etc/odyssey.conf és az LPT meghajtó kiválasztása, majd az LPT portot esetlegesen lefoglaló kernel modulok letiltása. Íme a jelen beállításom! # rmmod parport_pc parport /etc/odyssey.conf -----------------> [io] driver=directpp port=0 # WPB_F18_PCB_v2_Prog Watt programozója clkpin=3 rdatapin=10 wdatapin=-2 pwrpin=4 vpppin=5 Magyarázat: clkpin - vezérli az órajelet rdatapin - ki/bekapcsolja a PIC Vcc-jét wdatapin - a PIC-be írja az adatokat vpppin - vezérli a programozó feszültségét, a Vpp-t Lehet, hogy én ezeket a pin-eket állítottam be rosszul, pedig néztem Watt kapcsolási rajzát!
Hopsz hülye vagyok, hisz a szoftveres pwm -nél is a PR2 regiszter értéke határozza meg a periódusidőt; ha a programot is nézem - 4 lépésben változtatja a fényerőt - , így már kijön a közel 400Hz. Köszönöm szépen.
Idézet: „Az odyssey program átírása fölösleges, hiszen csak be kell állítanom, hogy az LPT port melyik pin-jének mi a szerepe, és hogy inverz-e a pin.” Igazad van, én voltam a figyelmetlen, hogy nem találtam meg ezt a konfigurálási lehetőséget (pedig direkt kerestem!). A konfigurációs állományt biztos, hogy megtalálja a programod? A dokumentáció szerint ugyanis /usr/local/etc/odyssey.conf és a $HOME/.odyssey/config helyeken keresi alapértelmezetten. (ha a configure script futtatásakor lebeszélted az /usr/local-ról, akkor nyilván rendben van...) A lábkiosztást szerintem jól adtad meg, a polaritáshoz nem tudok hozzászólni.
Én nem ismerem az odyssey-t és most nem is nagyon van időm utánanézni, de az elnevezések nekem kicsit mást sugallnak, mint amit leírtál. Én így gondolnám a lábak jelentését (watt rajzából néztem vissza a jeleket, amiket zárójelbe írtam a csatlakozó lábszámával együtt, remélem nem tévedtem):
# WPB_F18_PCB_v2_Prog Watt programozója clkpin=3 rdatapin=10 wdatapin=-2 pwrpin=4 vpppin=5 Magyarázat: clkpin - vezérli az órajelet (D1, pin3) rdatapin - PGD láb olvasási iránya (ACK, 10) wdatapin - PGD láb írási iránya (D0, 2) vpppin - vezérli a programozó feszültségét, a Vpp-t (D3, 5) pwrpin - vezérli a PIC tápfeszültségét (D2, 4) Szerk: úgy látom, a lábak ezek szerint jól vannak beállítva, szerintem már csak a polaritást kellene jól eltalálni.
Segítségeteket szeretném kérni! Most ismerkedek a 18F -es picekkel és egy kisebb problémába ütköztem. Többek között az RLNCF, bitforgató utasításnál -ellenben a 16F sorozattal- van egy 2. operandus. Utána néztem az adatlapban, hogy a BSR regiszter értékét állítja, de nem világos, hogy hogyan s miért!
Szia!
A 16F sorozatnál az ilyen utasításnak két paramétere van: f - az operandus címe és d - az eredmény elhelyezésének kódja. A 18F sorozatnál egy harmadik is van: a - Ram Access bit: Ha a=0, akkor a tényleges címet az Access Ram módszerrel képzi: Ha a cím 7. bitje 0, akkor a Bank0 alsó felét, ha a cím 7. bitje 1, akkor a Bank15 felső felét, a speciális célú regisztereket címzi meg az utasítás. Ha a=1, akkor a tényleges címet a BSR regiszter értéke 8 bittel balra léptetve és az utasításban megadott cím adja.
Szia! Köszi a gyors válaszod, azt hiszem már kezdem kapisgálni...
Hiba a magyarázatban:
clkpin - vezérli az órajelet pwrpin - ki/bekapcsolja a PIC Vcc-jét rdatapin - adatot olvas a PIC-ről wdatapin - adatot ír a PIC-re vpppin - vezérli a programozó feszültségét Ezt az öt pin -t kell megadnunk odyssey-nek!! odyssey test módban a következő pin-ek kapcsolhatók ki/be: p - power v - vpp c - clk d - data (out) pl.: % + p parancs bekapcsolja a PIC Vcc-jét, míg % - p parancs kikapcsolja azt. Idézet: „Szerk: úgy látom, a lábak ezek szerint jól vannak beállítva, szerintem már csak a polaritást kellene jól eltalálni.” Akkor már ketten hisszük így! A polaritást viszont Watt utasítása alapján adtam meg, miszerint: Égető programok beállítása: Az oshon és a WPB_F18_xxx programok beállításai: Vdd, Vpp, Adat be, Órajel(PGC), nem inverz (nincs pipa) Adat ki inverz(pipa) Más programoknál(pl. IC-Prog) szintén a fázisokat(inverz, nem inverz) kell jól beállítani. No, most akkor, nem mindegyik égetőprogramnál kell így beállítanunk? odyssey esetén a mínusz jel inverz logikai jelet jelent, annak hiánya meg nem inverz logikai jelet. Nálam most csak a wdatapin inverz, mint ahogy Watt sugallja.. Vagy nem jól értem Watt-ot?
Ha csak az invertálás volna a probléma, akkor a tápfeszültség ki/be kapcsolásnak működnie kellene (legfeljebb fordított fáziban). Mivel ez sem működött, a Printer port-tól kezdve követni kell a jel útját és egy voltmérővel minden kritikus ponton ellenőrizni kell, amíg ki nem derül, hogy hol tűnik el. Kezdheted pl. a Vdd-vel...
Igen, watt leírása alapján úgy kell lennie, és tudom, hogy ő ellenőrizetlen dolgokat nem ír le. Itt csak az a kérdés, hogy maga az Odyssey program hogyan értelmezi a szinteket.
Mindenképpen meg kellene vizsgálni egy multiméterrel a szinteket az Odyssey kezelőfelületéről egyenként kapcsolgatva a vonalakat, ahogy icserny is javasolta. Amíg ez nem működik helyesen, addig felesleges továbblépni.
Kerestem közben egy klasszikus printerportkapcsolást, ezen lehet követni, hogy melyik jel milyen átalakulásokon megy keresztül az adatbusz és a csatlakozó között:
Bővebben: Link
Tokeletesen igazatok van, bar ettol fuggetlenul csak azt nem ertem miert kell ezzel ennyit szenvedni. Ott van watt oldalan az a program amivel O hasznalja es amit O ajanl. Azzal kell kiprobalni es ha mukodik akkor legalabb bebizonyosodik a hardver jo -- kesobb mg mindig el lehet szorikazni az Odyssey beallitasaival...
Annyit meg hadd fuzzek hozza, hogy ha nem adod meg a 3. parametert, akkor az alapertelmezett (a=0) access ram hozzaferes valosul meg -- emiatt sokszor 18F kodokban a specialis regiszterek hozzaferesekor tipikusan nem talalni 3. parametert mivel (lustasagbol) nem irjak oda.
A masik tipikus dolog amit 18F-eknel gyakran lehet latni, hogy az osszes olyan valtozot az access ram teruletre szerveznek amivel kozvetlenul kell muveleteket elvegezni (ill ha az nem elegendo az access ram terulet akkor egy erre kivalasztott bank teruletet is kijelolnek amit a BSR allando jelleggel kivalaszt, tehat nem valtogatjak a program vegrehajtasa kozben). A tobbi cimrol pedig MOVFF utasitassal olvassak ki ill irjak vissza az adatokat. Ez a fajta szervezes sokkal jobban hasonlit egy regiszter szervezesu architekturahoz (noha a PIC nyilvan ennek ellenere nem az) es csokkentheti a bankvaltasok szamat ezaltal is novelve a futtatasi sebesseget ill. csokkentve a kodmeretet.
Az access bit alapértelmezését mindenképpen el kell olvasni az adott assembler doksijában, én az MPLAB helpjében ezt találtam:
a RAM access bit a = 0: RAM location in Access RAM (BSR register is ignored) a = 1: RAM bank is specified by BSR register (default) Ennek ellenére tudom, hogy az SFR-ek címzésekor nem kellett az access bitet külön jelölni, mert a címből tudta a fordító. A HiTech C18-as manualban is azt láttam, hogy a "banked" az alapértelmezett. Igaz, ott le is írják ez alól a kivételt, az abszolút címmel megadott, access-területre vonatkozó címeket (ilyenek pl. az SFR-ek).
Egyik ok az, hogy Watt programjában nincs meg a tesztelési lehetőség, vagy én tévedek?
Másik ok az, hogy nem mindenki szereti a Windows operatív rendszert. Harmadik ok: a játék kedvéért. Itt vannak a képek az alappanelről, és a külső panelről, amit én készítettem a tanulóimmal. Vasalásos technikával készültek a panelek, s azért lettek ilyen recések a vonalak, mert a nyomtatópapír nem volt a megfelelő: nem lehetett beszereznünk. Az alappanel közepetáján, a tranzisztorok táján a Zener diódáknál látható, hogy néhány helyen nem lett fölforrasztva semmi. Ide kellettek volna a diódák, meg a Zener diódák. Watt azt tanácsolta nekem, hogy ha egy 12 V-os Zenert teszek, az is jó lesz. A többi dióda, ill. Zener helyét át kell kötni. No, én lehet, hogy ezt az utóbbit szalasztottam el. Nézzétek már meg, s adjatok tanácsot, hova forrasszak még SMD rövidzárat? Idézet: „Egyik ok az, hogy Watt programjában nincs meg a tesztelési lehetőség, vagy én tévedek?” Port check néven találod
A Port check csak a program felé adja az LPT bitjeinek beállításait, vagyis én egyáltalán nem vagyok abban biztos, hogy Watt programja ugyanakkor az LPT felé is kapcsolgatja az áramot.
Azt akarom mondani, hogy amíg nem kezdte el valaki Watt programjából a PIC programozását, addig nem is mérhetők ezek a feszültségek, szerintem. Nekem meg még nincsen egyetlen PIC-em sem itthon, viszont az odyssey program meg lehetővé teszi ezeknek a feszültségeknek a ki/bekapcsolását, kimondottan a hardver tesztelése céljából. Watt programjának Port check-je szerintem nem ebből a célból van, hanem csak abból a célból, hogy leellenőrizhessük, vajon a program majd a megfelelő pin-eken, a megfelelő jelet FOGJA-e adni a PIC programozásakor?
Ez után igazából nem értem, hogy neked mi kellene. Ha nem az LPT porton billegtetné a lábakat, akkor szerinted mit csinálna?
Üdv!
Megint egy kezdő kérdésem lenne:Hogy adom meg mplabban a config word-öt? 16F819-ről lenne szó. Eddig 16F84-nél így kezdtem pl: LIST P=16F84 #INCLUDE "P16F84.INC" __CONFIG _XT_OSC &_CP_OFF &_WDT_OFF &_PWRTE_OFF ERRORLEVEL-302 Ennél hogy állítom be pl az oszcillátort INTIO1-es módba: Adatlap: FOSC2:FOSC0: Oscillator Selection bits 101 = INTRC oscillator; CLKO function on RA6/OSC2/CLKO pin and port I/O function on RA7/OSC1/CLKI pin de hogy adom meg vagy van más módja is? Úgy látom ez nehezebb, mint gondoltam, de nem adom fel. Ez az integrált oszc. mennyire pontos? Szokjátok használni? Köszi Tomi
Arra gondoltam, hogy ugye eddig csak off-okat írtam. Itt is alkalmazhatom? Amit ki akarok kapcsolni, azt ugyanígy soroljam fel OFF-okkal?
pl: .... &_FOSC1_OFF & ... az FOSC2 és FOSC0 on, úgyhogy azt nem kell beírni?
Azt a néhány config szót igazán kiírhatod, ha ON, ha OFF kell belőle. Keresd meg a p16F819.inc fájlt, abban fel van sorolva az összes config lehetőség.
A belső oszcillátor pontossága az adatlapban meg van adva valahol az electrical characteristics részben. Keress rá ezen belül az internal szóra, és vagy táblázatosan, vagy grafikusan megadják. Alkalmazása feladatfüggő, ha elegendő a belső oszcillátor pontossága, akkor használjuk. Ha nem, akkor teszünk kvarcot.
Én úgy szoktam megnézni, hogy az egyes mikrovezérlőknél milyen konfigurációs biteket használhatok, hogy megnyitom az adott típushoz tartozó include filet. Az, hogy hány Hz -es legyen, az OSCCON regiszter bitjeivel ( adatlap ) tudod beállítani. Hogy mennyire pontosak azt én sem tudom, még nem csináltam időkritikus dolgokat. Van még az OSCTUNE regiszter is, ha jól tudom ez finamhangolásra való, igazából még sose szorultam rá, nincsen benne tapasztalatom.
Az .inc file szerint belső oszcillátornál két választásod van: _INTRC_CLKOUT, _INTRC_IO nézzed meg adatlapban, hogy mit takar az IO, vagy CLKOUT, elég részletesen leírják. Esetleg még ellátogathatsz ide, elég sok minden le van írva, nem mellesleg magyarul. |
Bejelentkezés
Hirdetés |