Fórum témák
» Több friss téma |
Köszönöm a hozászolásokat. Azt a példát megnézném mert jelenleg nem nagyon értetem amiket irtatok
Ezt kitudnád fejteni egy kicsit bövebben?
Idézet: „Az A/D értékétől függően(0..1023) meghatározni a létetési frekit és kiadni sorban a hozzá tartozó kimenetre.” Ezt hogy kell csinálni?
Ebben elég sok hiba van, ahogyan elnézem. Egyrészt, ha binárisan adod meg a literális értéket, akkor célszerű lenne kiírni mind a 8 bitet. Ha a W tartalmát akarod a portokra tenni, akkor a GPIO-ra tedd, ne az 1 bites GP4-re (szerencsésebb lenne a bcf, bsf utasítás). Aztán, mivel ez egy 8 bites kontroller, ezért 600-at nem tudsz betölteni egy 8 bites regiszterbe (max 255), ráadásul szubrutint hívsz, ami nem tér vissza returnnel. Annyi Led villogtató program van a neten, miét nem keresel egyet, ami alapján megérted a működését?
üdv,
kösz a gyors választ. kiírtam mind a nyolc bitet. Nem értem, hogy mit értesz GPIO alatt ok a 600-at azt értem hogy miért nem jó. Az az igazság, hogy ezt a programot egy netesből alakítottam át nem sok sikerrel
ezt olvasom csak sajnos nem ilyen picem (12F683-m van) van ezért nem ilyenek a kimenetek.
Amúgy ezt a programot próbálom átszerkeszteni de valahogy nem megy
már sokmindent kipróbáltam de cask nem jött össze az egy led villogtatása. Szerintem a beállításoknál van még mindig a gond. Ha valaki ki tudná javítani a programomat annak hállás lennék.
A hobbielektronikán van fennt egy oktató villogóval azt próbáltam átírni de az sem sikerült. Idézet: „Nem értem, hogy mit értesz GPIO alatt” Azt meg én nem értem, hogy mit nem értesz, hiszen a forrásfájlodban már használtad. Egyébként General Purpose I/O, így hívják a portot. Célszerű lenne először az adatlappal és magával a vezérlővel megismerkedni. Nem látom a konfigurációs beállításokat sem a forrásodban. Megírtam egy ledvillogtató programot, felteszem a mellékletbe projektestől mindenestől. Próbáld ki, a GP4-en kell a lednek meg az előtétnek lenni. Az MCLR funkciót nem tiltottam le, tehát amennyiben az MCLR lábat alacsony szintre húzod, a kontroller resetben marad (10 k felhúzó ellenállás szükségeltetik). A 100 nF kerámia kondiról se feledkezz meg, melynek a táplábak között kell lennie.
Én eddig csak pozitív és egy negatív kábeleket kötöttem a PICre (Vdd+5; Vss 0), meg a ledet ellenállással. Mást is kell? Kondenzátort miért kell és hova??? :eek2:
A 10 kOhm felhúzó az MCLR bemenetre -függetlenül attól, hogy engedélyezve van-e a konfigurációs szóban a reset- mindig kell, egyébként a külső zavaroktól bizonytalan lesz a működés, akár programozói módba is kerülhet a kontroller. A 100 nF kerámia kondenzátor másik kötelező elem a CMOS áramkörök táplábainál, azokhoz fizikailag minél közelebb. Ha érdekel a mikéntje, javaslom nézd át a PIC-es topikokat, gyakorlatilag 3 oldalanként le van írva, miért és hogyan.
Idézet: Nézegesd a másoknak írt válaszokat is, hadd ne kelljen már minden héten leírni (Bővebben: Link) Ez egyébként nem PIC specifikus dolog, hanem a digitális elektronika elemi ismeretei közé tartozik! „Kondenzátort miért kell és hova???”
Egyik lehetőség, hogy egy Timer megszakításban léptetsz egy számlálót, amit összehasonlítasz az AD mért értékével. Ha egyezik, akkor kiadod a követező lépésimpulzust, majd törlöd a számlálót. Így sorban minden kimenetre.
köszi a programot. Már 4 ledet tudok villogtatni.
amúgy a GPIO azért nem értettem, mert a beállítás részt nem én írtam, hanem kimásoltam a pic könyvéből. viszont nem értem a programodban az időzítőt teljesen. Hogy lehet az időtartamot változtatni?
Üdv.
A PIC16F268A -t ugy kell programozni hogy benne van az áramkörben, vagy ki lehet venni és külön foglalattal rá a programozóra? A segítséget nagyon megköszönném.
Ha megnezed az egy ures ciklus ami teker onmagaban ameddig a T1 ill T2 valtozok le nem nullazodnak -- igy vesztegeti el az idot... Ha Call Delay elott a T2 valtozot feltoltod egy ertekkel, akkor csokkenni fog a varakozas ideje (jelenleg a maximalis idotartamot varja amit 2 valtozoval ilyen modon elerhetsz -- feltetelezve a ciklus torzsen es az oszcillator frekijen nem valtoztatsz persze).
Probald ki, hogy:
helyett:
...erre kb 2x gyorsabban kell villognia...
Megcsinálom ugy hogy egy külön foglalaton van a programozó. De mivel nem kaptam választ csak reménykedek hogy jó...
Talán azért nem kaptál választ, mert csak akkor jössz ide, ha kérdésed van, az fel sem merül benned, hogy mások kérdéseiből is lehet tanulni. Ezt a hozzáállást pedig nem szeretjük, mint ahogy azt sem, ha valaki reklamál azért, mert nem kapott azonnal választ. http://wattmep.tvn.hu/PIC_kezdoknek/ICSP_roviden.html
Bocsánat, igazad van. Csak most ez elég hirtelen kellett. Köszi a segítséget.
Trudnai már leírta a működést, így én csak kiegészíteném a hozzászólását egy javaslattal.
Nagyon hasznos az MPLAB IDE fejlesztői környezetbe integrált MPLAB SIM szimulátor (Debugger menü). Itt a StopWatch eszköz, illetve breakpointok segítségével pontosan meg lehet határozni, hogy egy-egy programrészlet mennyi idő alatt fut le. Érdemes kipróbálni és kísérletezgetni egy kicsit. Ha rászánod magad, akkor még egy dolgot érdemes tudni, mégpedig, hogy az órajelet a szimulációhoz be kell állítani a Debugger/Settings alatt, esetedben 4 MHz-re. Így valóban az utasítások végrehajtásának idejét fogja mutatni a StopWatch.
Sajnos nem boldogulok ezzel az analóg konverzióval.
A picem (16f877)2 es lábára kötöttem egy potit így azon a lábon 0-4,56Voltig tudom állítani a feszültséget. A program egy jobbra-balra futó fény és ezzel a potival állítanám a sebességet ezért a lemért feszültséget ráakartam tenni a T2 változóra. Ránézne valaki hogy mi a baja a proginak?
Szia!
A MOVF ADRESH -hoz kellene a ',W' is... Tehat:
kulonben nem teszi be neked a W-be!
átírtam
de most sem foglalkozik a poti tekergetésével.
Maradt ott meg egy movf W nelkul...
Szerintem bontsd ket reszre a feladatot. az AD-t kozvetlenul tedd ki a portB-re, akkor latod, hogy tekergeteskor beolvassa-e. Aztan adatlap alapjan mehetsz tovabb, hogy mit kellett volna meg beallitani. En azert az interrupt vektor helyet kihagynam a progi elejerol.
Ha megnezed a DELAY az 3 egymasba agyazott ciklussal valositja meg a szukseges varakozasi idot. A legkulso ciklusvaltozo a T1, nem a T2 -- tehat a T1-be kellene inkabb tolteni a beolvasott erteket. Annal is inkabb, mivel a T2 erteke igy csak a legelso kulso ciklus-kor lesz egyenlo a beolvasott ertekkel... Utana mindig 256-okat fog tekerni neked. Ja es ertelem szeruen a DELAY-en belul a T1 inicializalasat ki kell venni, hiszen azt az ADRESH-bol kivulrol fogod megtenni...
Most arra keresném a választ hogy egy 4mhz kvarccal működő picben 1/256 os prescalernél kb hány ms alatt jelez a timer0 ill mennyi alatt 1/2 nél.
Vagy egy képlet kellene vagy valami.Köszi.
4 MHz --> 1 gépi ciklus 1 us ( 4/4 MHz ) --> 256-os előosztó --> 256 us-ként lép egyet a TIMER számlálója, túlcsorduláshoz 256 impulzus kell --> 256*256 us !
A 2-es osztót ez alapján ki tudod számolni, ill. szimulációval le tudod mérni ! Steve
Nem mondtad, hogy milyen PIC. Feltételezem, hogy PIC16, vagy hasonló...
Azt mondod, hogy az Fosc frekvencia 4 MHz (Tosc = 250 ns). Akkor az utasításciklusok frekvenciája Fcy = Fosc/4 = 1 MHz, a preriódusidő pedig 1 us. Az előosztóra Fcy jut. Ha 1:256 az előosztási arány és 8-bites Timer0, akkor a túlcsordulás T = Tcy * 256 * 256 = kb. 65,5 ms időközönként történik. Ha pedig az előosztási arány 1:2, akkor pedig T = Tcy * 2 * 256 = 512 us (kb. 0.5 ms)
Igen azzal, nem gondoltam hogy számít milyen pic, mivel azt hittem csak a kvarc határozza meg a sebességet....
|
Bejelentkezés
Hirdetés |