Fórum témák
» Több friss téma |
Szia!
32 MHz esetén a CLK/4 periódusideje 125 ns ( 1/8 MHz), ebből minden 256-ik lépteti a számlálót --> 32 us ( 256*125 ns ) és ebből minden 256-ik okoz megszakítást --> 256*32 us = 8,192 ms, ami kb. 122 Hz-nek felel meg ! Steve
Én csak arra hívom fel a figyelmedet, ha már XC8-at használsz, hogy a htc.h helyett xc.h kellene írni. Tudom, hogy fordító - gyökereire tekintettel - simán fordítja az előbbivel is. Ezt a "define" sort a legelsőnek, minden más előtt illik megadni.
Arra figyelj, hogy a megszakításkezelő rutinod, most bármilyen megszakításnál ugyanazt hajtja végre, mert a megszakítás forrását nem vizsgálod - gondolom ez most szándékos(?)
Szia!
Köszönöm az észrevételeket! A Hi-Tech könyvtárában talált példa alapján deklaráltam a függvényt: void interrupt timer0_isr(void) Gondoltam, csak a timer0 mnegszakításakor hajtódik végre. Egyelőre nincs más megszakítás, de beteszem az ellenőrzést.
Szia!
Köszönöm szépen! Kifelejtettem a képletből a TMR0-t...
Tovább kellett gyorsítani a megszakítások frekvenciáját, mert vibráltak a ledek. Attól függően, milyen színt állítottam be hol gyorsabban, hol lassabban.
Az előosztót kikapcsoltam és feltöltöttem előre a TMR0-t 128-al. Így most folyamatosnak látom a ledek világítását. Azért szeretném megérteni. Ennyire gyors lenne a szemünk? Az elején úgy gondoltam, hogy 50Hz-re teszem a frissítést úgy, hogy egy periódust további 255 részre osztok. Így egy kis rész frekvenciája 12 750 Hz lett volna. A színeket ezáltal megadhatom RGB kódban. A megszakításban látszik is, hogy számolom a kis részeket és amíg adott szín kódja magasabb, mint a számáló értéke, addig világít a szín. Az algoritmust meghagytam, elég volt gyorsítani. Most, hogy a színkeverés működik, szeretném a fényerősséget is szabályozni. Ehhez a ledek közös anódját kell PWM-el vezérelni?
Szia!
Miért a timer0 -t használod? A timer2/4/6 -t rugalmasabban lehet beállítani. (Fosc / 4, prescaler: /1/4/16/64, 8 bites regiszter, postscaler: /1../16)
Szia!
Ennek nincs különösebb oka: ez volt előbb az adatlapban Meg fogom nézni a Timer2/4/6-ot is, hátha egyszerűbb. Idézet: Nem ez számít, hanem a kép frissítési frekvencia, az meg marad 50 Hz ! Ha nagyon leveszed a kitöltést, akkor ez érzékelhetővé válhat!„Az elején úgy gondoltam, hogy 50Hz-re teszem a frissítést úgy, hogy egy periódust további 255 részre osztok. Így egy kis rész frekvenciája 12 750 Hz lett volna.” Steve
Az az 50 az előosztó miatt 60 valamennyire jött ki.
Ha jól számoltam, a gyorsítások után kb 245 Hz lett az 50-ből. Ezt látom vibrálás nélkül folyamatosnak. Ezért se értem. Vagy ennyire gyors a szemem, vagy nagyon elszámolom valahol.
50-60Hz az még simán vibrál kb. mindenkinek. Ha a hálózati feszültségre kötött izzóval sorbakötsz egy diódát, akkor az is bőven vibrál, pedig annak még hőtehetetlensége is van. 100Hz-el is vibrál az izzó, csak azt már a hőtehetetlenség annyira kisimítja, hogy a szemünk nem érzékeli, de műszerrel mérve továbbra is mérhető vibrálása van. Fénycsőnek is van 100Hz-es vibrálása, az is észlelhető, hiába van ott is fénypor, ami szintén visz tehetetlenséget a rendszerbe. Ha máshogy nem, kifárad a szem tőle hosszabb időn át. Egy lednek több nagyságrenddel kisebb a tehetetlensége, ezért az 50Hz az bőven vibrál. Nemis értem, honnan jön ez, hogy 50Hz elég arra, hogy ne vibráljon. Ezekkel a mai kontrollerekkel meg lehet küldeni akár kHz nagyságrendű frekvenciával is a kijelzőket, nem kell nagyon colozni a frissítési frekvenciát.
Úgy tudom, hogy a videót 25fps-től látjuk mozgónak. Ezért gondoltam, hogy megduplázom és 50Hz elég lesz a ledeknek.
Így már értem, köszönöm szépen a magyarázatot!
Csak ugy halkan megkerdem, hogyha ilyen eromuvet hasznalsz (16F1938) amiben van 5 PWM csatorna, akkor miert kell kinlodni SW PWM megirasaval? Akar 5 szinu ledet is vezerelhetsz PWM segitsegevel, es nagyon egyszeruve valik a program.
Igen, azzal is vezérelhetném a ledeket.
Lehet, hardveresen fogom. Első körben egyszerűbbnek tűnt szoftveresen megoldani, mert így egy az egyben használhatom az RGB kódokat és nem kell duty cicle-ket számolgatni. Más feladata úgyse nagyon lesz a PICnek.
Mar bocs, de igyis-ugyis szamolni kell a dutyt. Viszont egyszerusitheted a dolgot, hogy berugsz 3 csatornat, majd idonkent betoltod a megfelelo regiszterekbe a Duty-t (pl TMRx IT hatasara). Viszont elony, hogy a PWM freki akar 31,2kHz is lehet 10 bites felbontas mellett. Itt mar nem fogod latni a LEDek villogasat.
Most nem kell számolni a dutyt, mert egyezik a szín RGB kódjával. Ezért osztottam 255 részre egy kört.
Tehát, ha a szín kódja: R: 45 G: 150 B: 255, akkor ezek az értékek a megfelelő csatornák dutyjai.
A mozgónak érzékelés és a vibrálás nem egészen ugyanaz.
Nem tudom mit kell szamolni. Ugyebar a PWM duty felso 8 bit a CCPRxL regiszterbe toltodik, ami ugye 8 bites. Ez ugye 0-255. Mas dolgod mar nincs is. Beallitod a PWM csatornakat a TMR2 regiszterhez, Beallitod a TMR2 IT-t, es mikor beut az IT feltoltod a 3 CCPRxL csatornat. El is lehet felejteni az egeszet, mar csak az egyes csatornak ertekeit kell valami modon eloallitani, de ez masik kerdes.
Köszi!
Igazság szerint ebbe még nem mélyedtem bele, de meg fogom nézni.
Üdv.
Két esetleg lámának tűnő kérdésem van: -milyen eszköz létezik I2C LCD használatra? -milyen szintaktikával lehet a "printf" és " putc" utasításokkal (C18) numerikus változó értékeket kiiratni? Piccolo projecben outdec() nem használható erre a feladatra ha jól értelmezem, csak USB kapcsolat esetében.
Köszi, közben megtaláltam a függvények használatát.
Az I2C LCD úgy értem hogy a buszon vezérelni az LCD-t, valahol olvastam vannak ilyen eszközök.
Üdv!
Egy kis segitséget szeretnék kérni. Első alkalommal probáltam 16f1503-at programozni. Nem jött össze a gond a progi elején a config beállításokkal van. Sajna kezdőként képtelen vagyok kihámozni a leírásból, hogy mit hogy kell beállítani. Ha be tudnátok linkelni bármilyen példa progit hozzá, akár csak a config-részt nagyon meg köszönném. Assembly-ben kellene. Ha lenne tippetek a 16f1507-hez az is jól jönne. Előre is köszi.
Addig rendben van, hogy az udata_acs, res direktívák használatával csak rellokálható módban lehet a programot fordítani, de ezt honnan lehet tudni, tekintve, hogy sehol nem olvastam ere való utalást? (Vagy csak az én figyelmemet kerülte el...?)
A rellokálható/absolut fordítási mód közti különbséget valaki el tudná magyarázni? Mikor hasznos az egyik, mikor a másik? Esetleg egy példát is tudna mutatni?
MPLAB Helpjeben benne van ez, az egy nagyon hasznos olvasmany, sokat lehet onnan tanulni.
Roviden: Az un abszolute modnal kozvetlen adod meg a valtozoid memoria cimet, es emiatt teljesen rad van bizva, hogy melyik valtozot hova teszed. Relokalhato modban csak azt hatarozod meg mekkora teruletre van szukseged es majd a linker eldonti hova lehet azt elhelyezni. Ennek koszonhetoen ha pl modularis felepitesu programot csinalsz, ahol kulon object file-ok vagy library-kat (konyvtarakat) adsz a projectedhez, akkor a valtozok amiket a modulokban, objectekben, konyvtarakban hasznalnak nem fogjak meg csak veletlenul sem ugyanazt a teruletet hasznalni es ezzel sok fejtorestol kimel meg ez a modszer. De mas elonyei is vannak, pl figyelmeztet ha nem fersz bele a memoriaba. De akar olyat is tud, hogy a kulonbozo fuggvenyek amelyek egy idoben nem kerulnek meghivasra automatikusan ugyanazt a memoria teruletet hasznalhassak anelkul, hogy ez problemat okozna neked, hogy ezzel csokkenthesd a teljes memoria szuksegleted.
Lényegében értem a választ, de az alábbi dolog még nem tiszta:
Ha a Idézet: figyelembe veszem, miért fogadja el a fordító a következő sort?„Relokalhato modban csak azt hatarozod meg mekkora teruletre van szukseged es majd a linker eldonti hova lehet azt elhelyezni”
Itt én adtam meg, hogy a Access RAM -ban hol legyen a kezdőcím és nem a linker.
Megadhatod a terulet kezdo cimet (bar felesleges, csak speci esetekben van erre szukseg). Azonban a valtozok cimet tovabbra sem te adod meg. Ez csupan azt a teruletet fogja definialni ahova az ezutan letrehozott valtozoidat fogod elhelyezni. Ezeket is amugy celszerubb az un. linker szkriptben definialni es nem a forras kodban.
Azt hiszem így értem. Tehát pl. 0x20 tól lesz a váltózóim kezdőcíme megadva, de az sem biztos, hogy már elsőt pont ide fogja tenni. Gondolom ha csak 1 object file van, akkor 0x20 -ra kerül.
Üdv mindenkinek!
Segítségeteket szeretném kérni az IC-prog beállításához Windows 7 rendszeren az alábbi fájl mellékleten látható égetőhöz mert igencsak kezdő vagyok. Köszönettel : István |
Bejelentkezés
Hirdetés |