Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Idézet: Megfeledkezni látszol, hogy ez nem csupán egy latch, hanem címezhető, programmal írható, sőt - bizonyos feltételekkel - korábban (PORT néven) is olvasható volt. Tehát a regiszter minden elvárható tulajdonsága teljesült rá.„En meg azt, hogy a latch celja nem informacio tarolas, csupan egy kimeneti allapot rogzitese, ezert nem regiszter, hanem egy buffer.” De célszerűbb volt a beolvasását elválasztani a bemenetekről, ezért beiktatták a korábban mutatott ábrán megjelölt kapuáramkört. Én arra próbáltam rávilágítani, hogy csupán ennyi a különbség a korábbiakhoz képest.
Kedves Fórumtársak,
Adott egy állítható frekvenciájú és kitöltésű PWM jel. Ezt jelet egy FET-es végfokra vezetve, egy R terhelést kapcsolgatok (valójában speciális, indulás/kikapcsolás kapacitív, de utána sima R terhelés). A feladat lényege hogy, "szabályozni" kellene az áramot (a DC áramot). Van is az áramkörben egy 0,1R sönt és egy műveleti erősítő, így a mikrokontroller AD-vel is mérhető a teljes tartomány (jelen esetben ez most 1,2A, az erősítés 37 (NINV), MCP6031). Nos a probléma ott kezdődik, hogy hogyan is lehetne a közép vagy effektív értéket megmérni, vagy más szavakkal fogalmazva, amit az Hallos, vagy digitális multiméter mérne. Jelenleg 8 mérés van másodpercenként, majd átlagolás, és hát nem igazán azt méri mint a multiméter (de ez erősen függ a frekvenciától és kitöltéstől). A kérdésem az lenne hogy milyen algoritmus alapján kellene mérni és kalkulálni a "DC" áramot egy adott számú mintából? Az hozzászólásokat előre is köszönöm Üdv
Na akkor lenne itt még egy dolog, ami szerintem nem eredményez majd ilyen hosszú beszélgetést.
18f46k22-t a PICKit 2 tud programozni de legújabb (8.63) MPLAB-ban a Programmerek között inaktív a PicKit2. Mit lehet tenni? Ami érdekes még, hogy a konfigurációs biteknél bármilyen oszcillátort állítok be átmegy a PICKit progamjába, kivéve ha olyat, amilyen pont kéne. CONFIG FOSC = HSHP Van ötlet?
Elkezdődött. A PICKit2 hanyatlása. :levele:
Naszóval nem tehetsz semmit, mert ha a következő verzióban sem lesz támogatva, akkor csak a PK3 fogja kezelni. A második kérdésed pedig nem értem.
Szia!
Device leíró állomány frissítés a PICKit2 oldaláról: Device File 1.62.3 Ha az MpLab nem ismerné fel továbbra sem, akkor a PICKit2 kezelő programjával lehet programozni. Egyébként letölthető a PICKit3 önnálló kezelőprogramja is: PICkit 3 Stand Alone Programmer App V1.0 Windows
A programban beállítok mindenféle konfigurációs biteket.
Mivel az MPLAB-bal nem tudom programozni, a fordítás során létrehozott HEX fájlt importálom a PICKit programjába. Az össze konfigurációs bit helyesen meg is jelenik a PICKit programjában, kivéve az oszcillátort beállító. Pontosabban az is jól jelenik meg, kivéve egy esetben, ha 16Mhz-nél nagyobb oszcillátorra állítom, mert akkor 0 lesz.
Hali
Ha minden igaz, akkor a PK2devicefile.dat tartalmazza a programozhato eszkozok listajat, es ezek tulajdonsagait. Le kell tolteni az utolsot, es akkor elvileg tudja az osszes eszkozt kezelni. Talalhato a neten editor is hozza. Peldaul ez. Idézet: „Megfeledkezni látszol, hogy ez nem csupán egy latch, hanem címezhető, programmal írható, sőt - bizonyos feltételekkel - korábban (PORT néven) is olvasható volt. Tehát a regiszter minden elvárható tulajdonsága teljesült rá.” Pontosan, 18F-ben cimezheto, midrange-ben nem -- tehat 18F-ben megjelent regiszterkent. Korabban PORT neven nem volt olvashato, epp ezert jelentkezett az RMW hiba... Ahelyett, hogy egy kapuval megoldottak volna, hogy ha kimenetnek van kapcsolva akkor a latch-bol olvasson, inkabb egy kulon regiszter file-t definialtak ra -- biztosan igy egyszerubb vagy olcsobb volt, nem tudom.
Biztosan megengedett bitkombinációt szerenél beállítani?
Eddig mindig az MPLAB-ban volt a PK2 dev fájlja, lehetséges, hogy most már csak külön lehet letölteni? A másik, hogy elegendő szerintetek a PK2 dev fájlja? Az MPLAB debug részét nem kell felkészíteni? Mert programozni a saját programjából is lehet, illetve szerintem abból érdemes, a debug lenne a fő atrakció...
Szia!
Én a PIC-es panelmérőimben olyan rutint írtam, ami vesz egymás után 80db mintát, ezeket eltárolja egy 80*2 bájtos táblában, majd szépen megkeresi a nyolc legkisebb és nyolc legnagyobb mintát. Ezeket ez után kitörli (nullázza), majd a 80db mintát (ami igazából már csak 64db) összeadja és osztja 64-el. (Meg kerekíti is.) Nézd meg az oldalamon a videót, látszik rajta hogy ezzel igen jó pontosság érhető el. Persze hozzá kell tenni hogy ehhez a hardvernek is megfelelőnek kell lennie! (Külső referencia, csillagpontos huzalozás stb.) Írtam egy másik rutint is ami nem 80db hanem 8192db mintából dolgozik és számtani közép, valódi effektív és csúcsértékeket is számol rögtön. Ezzel bármilyen jelet mérni lehet. De azt mondtad hogy neked DC kell szóval az előző megoldást javaslom neked is.
A .dat fájlt már frissítettem, de sajnos nem lett jobb.
Az editoros dolgot viszont megnézem. Kösz szépen!
Nem azt írta, hogy DC-t kell mérnie, hanem azt, hogy egy nagyfrekis jelből kéne átlag áramot mérnie. Nos ez nem egyszerű feladat és ezen kívül nem PIC kérdés...
Biztos? Én azt olvastam ki a hozzászólásból hogy van egy 0,1Ohm-os sönt meg rajta egy műveleti erősítő és DC áramot kell mérni, aminek a maximuma 1,2A. vagy rosszul értem?
PWM vezérelte FET áramát kéne mérnie. Nem látom, hogy integrálná valahol, de még úgy sem egyszerű. De ez itt nagyon off... Ha én érteném félre, és a programról kérdez, nem az árammérésről, akkor elnézést kérek!
Valóban PWM vezérelte, tulajdonképpen felfoghatjuk négyszögjelnek, és annak kéne a középértékét mérni. Jah azt nem tettem hozzá, de még 5% eltérés belefér.
Szerintem ez programozás téma, mert arra kérdeztem rá, hogy AD-vel hogyan tudom, valamilyen algoritmus alapján megkapni az értéket, ha egyáltalán ez lehetséges. Idézet: PIC12F675 volt az első PIC amit programoztam, abban is olvasható. Az RMW hiba nem azt jelenti, hogy nem olvasható a regiszter, hanem azt, hogy nem minden körülmények között:„Korabban PORT neven nem volt olvashato, epp ezert jelentkezett az RMW hiba...” 1. A külső terhelés visszahat, a kimeneten meglassítja a jel változását. Ha ezt nem várod ki, akkor visszaolvasásnál rossz lesz az eredmény. 2. A bemenetnek kapcsolt biteken nem a kimenő regiszter állapotát, hanem a bejövő vonal állapotát olvasod. Ez "elrontja" a kimenő regiszter előzőleg beállított értékét a bemenetnek állított biteken minden rmw utasítás hatására. Az 1. probléma nem jelentkezik, ha nincs megterhelve a kimenet, vagy nem túl gyors a program (a legelső - még naív tudatlanságomban - megírt PIC12F programomban abszolút kifogástalanul működnek a bsf, bcf utasítások). A 2. probléma pedig nem játszik, ha a port minden bitje kimenet. Tehát valóban számolni kell az RMW problémával, de nem minden körülmények között.
Na akkor viszont vegyél a lehető legtöbb mintát, ügyelve arra hogy a mintavételezési frekvencia ne egész számú többszöröse legyen a PWM frekvenciájának.
Mondjuk fél másodpercenként akarsz kijelezni egy új értéket. Akkor durván 500ms időd van arra hogy mintákat vegyél és feldolgozz. Ki lehet számolni vagy meg lehet mérni, hogy ennyi idő alatt mennyi mintát tudsz venni. Célszerű kettő valamely hatványával megegyező darabnyi mintát venni, mert azt könnyű lesz majd osztani. Veszed az első mintát, majd bemásolod egy regiszterbe. Veszed a másodikat, majd azt hozzáadod az előzőhöz. Egy másik regiszterben számolod hogy mennyi mintát vettél eddig. A következő mintát megint hozzáadod és a számláló regisztert megint inkremeltálod. Ha elértük a mondjuk 1024db mintát akkor a szép nagy összeget elosszuk 1024-el és megvan a számtani közép. Ha az egyes mintavételek után nem csak egyszerűen összeadogatod a mintákat hanem előbb négyzetre is emeled, majd a legvégén az osztás előtt négyzetgyököt vonsz belőle, akkor megvan a valódi effektív ("true RMS") érték.
Egy 18F sorozatú 3.3V os PIC adatlapjában olvastam a következőt, ahol a Vdd max. értéke 3.6 V lehet:
Idézet: „PMPTTL: PMP Module TTL Input Buffer Select bit 1 = PMP module uses TTL input buffers 0 = PMP module uses Schmitt Trigger input buffers ” Mit kell itt érteni TTL input alatt?
Másik dolog, hogy a PIC18F67J50 adatlapja szerint a Config3 H-L regiszterekben csak a 80 lábú PIC18F87J50 -en van kialakítva PMPMX, ECCPMX, WAIT, BW, EMBx, EASHFT bitek. Érdekes módon a Pickit2 Config Word Editorában a 67J50 esetében a PMPMX, ECCPMX is szerkeszthető, a többi szürke ahogy lennie kell. Most akkor kinek lehet hinni? Az errata nem említi a fentieket.
Az első kérdésre megtaláltam a rém egyszerű megoldást:
TTL kompatibilis a bemenet... Idézet: „Digital-only I/O ports with TTL buffer: min: 0.25 VDD + 0.8V, max: 5.5 V, Udd< 3.3 V esetén. ”
A probléma szerintem is az, hogy a másodpercenként 8 mintavétellel maximum 4Hz-es jeleket lehetne elméletileg is feldolgozni. A PWM nyilván sokkal gyorsabb, ezért a minták valamilyen aliaszt fognak eredményezni, és közük sem lesz az eredeti hullámformához, akkor meg semmi értelmes nem fog kiderülni belőlük, bárhogy is számolgatunk velük. Vagy a mintavétel frekijét kellene minimum a PWM freki duplájára felvinni (ez szerintem túl nagy falat lenne), vagy még a hardverben, elektronikusan átlagolni a jelet. A műveleti erősítős illesztéshez szerintem egyszerűen be lehetne tenni átlagolótagot, gyakorlatilag egy aluláteresztő szűrőt kell kialakítani ott.
Van itt olyan, aki használta már a 18F46K22-t problémamentesen? Lehet, hogy én vagyok, hülye (inkább, mint hogy az IC legyen rossz ), de itt van pár dolog ami nem akar rendesen menni...
Idézet: „Idézet: „Korabban PORT neven nem volt olvashato, epp ezert jelentkezett az RMW hiba... ” PIC12F675 volt az első PIC amit programoztam, abban is olvasható.” LAT-ot akartam irni, elnezest. Idézet: „Az 1. probléma nem jelentkezik, ha nincs megterhelve a kimenet, vagy nem túl gyors a program (a legelső - még naív tudatlanságomban - megírt PIC12F programomban abszolút kifogástalanul működnek a bsf, bcf utasítások).” Szinten zenesz, 629/675-tel kezdtem, aztan sokat vacakoltam 10F202-vel is. Ez utobbiban nekem is jol mukodtek egy darabig a bitbillegtetesek. Ez az RMW problema eleg alattomos tud lenni, es lehet a teszt asztalon jol mukodik a dolog, aztan a felhasznalonal nem, vagy csak nem mindig. Epp ezert kell erre a hibara mindig felkeszulni -- ha lehet arnyek regiszterrel, de ha ere lehetoseg nincs (mint ahogy nekem sem volt a 10F202-ben) akkor idozitesek beiktatasaval. Sajnos nyilvan ez a nyers bitbillegtetesi sebesseget befolyasolja, de a legtobb alkalmazasnal ez nem jelethet problemat.
Pontosan ez volt az ami bennem is képpé alakult.
Bocsi, hogy ide belekontárkodok, csak lenne egy kérdésem.
A PIC-es pontos időzítést hogy szokták megoldani? Akarok csinálni 1 bináris órát,és fél másodperces időzítéssel NOP-okkal kitöltve, 4 megaherczes kristállyal megy,ami nem a belső,hanem egy külső a pontosság miatt. PIC 16-os széria. Valahogy kilehet számolni,hogy egy utasítást,egy assembly utasítást mennyi ideig tart neki lefutni? azt tudom,hogy pl egy addlw,vagy egy xorlw müvelet 1 utasítás ciklus,ami 4 gépi ciklusnak felel meg. Szóval egy add müvelet 4 hz alatt fut le? Vagy ez nem ilyen egyszerü? Vagy ezt hogy szokták? tudom, van benne timer,de gondolom ki is lehet számolni. Megköszönném,ha ezt nekem valaki elmagyarázná, fontos lenne ez nekem
Szia!
A 16F szériában vannak 1 és 2 utasításciklus alatt végrehajtott utasítások. A goto, return, retlw mindig, a btfsc, btfss ha ugrik, 2 utasítás végrehajtási időt használ fel. Az utasítás végrehajtási idő az órajel periódusidejének négyszerese. Ha az órajel 4MHz, akkor egy nop ideje 1us, egy goto ideje 2us. A pic kontrollerben van időzítő, felhasználásával mentesülhetünk az utasítások szémolgatásától...
Hali
Mondjuk ez a "NOP" dolog egy eleg nehezkes eljaras kesleltetes megvalositasara. Van tobbfele megoldas. Pl egy keslelteto rutin, ahol is egy valtozot csokkentesz egy hurokban es akkor lepsz ki amikor a valtozo nulla lesz. a masik jo megoldas, valamelyik HW szamlalot hasznalni. Bel lehet allitani valami kezdo erteket, es amikor atfordul ker egy megszakitast. Ennek az idozitese pontosan szamolhato. Oranak hasznalhatunk meg kulso HW-t (RTC), vagy vannak ujabb PIC-ek amikbe bele van epitve. Ezek az RTC-k altalaban ugy mukodnek, hogy egy stabil oszcillator hajt fix szamlalokat, amik lekepzik az idot. Idonkent kiolvassuk ezeket a szamlalokat, es feldolgozzuk az adataikat. Ajanlanam a figyelmedbe a konyvtarat, ahol talalhatsz leirasokat, mintapeldakat, probapaneleket a PIC-ek megismeresehez. (esetleg egy kis ZENET). Van egy ASM csomag, ami kimondottan kezdoknek szol. Elvezet a LED villogtatastol a LCD kezelesig. Toltsd le a tartalmat, es vagj bele! Egy fontos dolog: Ne probalj meg elso nekifutasra egy raketa iranyito eszkozt, vagy egy atomreaktor vezerlest csinalni. Eleg ha elsore villog a LED.
Abban jol gondolkodsz, hogy lehet NOP es mas utasitasokkal idot vesztegetni. Azonban ora alkalmazashoz ilyet nem szokas csinalni mert ehhez minden egyes reszletet figyelembe kell venni. Pl ha vannak elagazasok, akkor meg kell oldani, hogy minden agat ugyanannyi ido legyen vegrehajtani (pl kijelzesnel lehet neked ilyen elagazas).
Szmaolni ugy kell, hogy adatlapbol kinezed melyik utasitas hany ciklus alatt hajtodik vegre (okolszabaly, hogy mindegyik 1, kiveve amelyek a program szamlalot befolyasoljak, tehat ugro utasitasok, elagazasok). Pl van egy 4MHz-es kavicsod, akkor a egy ciklus ugye FOSC/4 tehat 1MHz. Ebbol kovetkezik, hogy egy 1 ciklusos utasitas pontosan 1us (0.000001 masodperc) alatt hajtodik vegre, 2 ciklusos ugye ennek duplaja. Namost csinalsz egy idozito procedurat, kiszamolod, hogy hany utasitas ciklus azt meghivni, hany inicializalni a ciklust, hany a ciklus magban csokkenteni a szamlalot es ugrani a ciklus elejere, mikor vegzett hany vissza terni a procedurabol. Ez mikor csupan egyetlen ciklusra van szukseg meg viszonylag egyszeru kiszamolni, de egymasba agyazott ciklusoknal mar azert van fejtores. Legtobbszor a legjobb, ha a legbelso ciklus pl 100 us-et veszteget el, azt meghivja egy masik ciklus 100-szor, hogy kapj 10ms-et, amit 100-szor meghiv egy masik, hogy kapj 1s-et. De mindegyiknel figyelembe kell venni a meghivashoz szukseges idoket stb, szoval a feladat nem is annyira egyszeru mint tunik, ha szukseged van a 'halal pontossagra'. Es akkor meg nem is beszeltunk, hogy a kijelzesi resz is idoba telik, azt is figyelembe kell venni. Ehelyett hasznalhatnal HW-es idozitot, pl orakvartz-ot kothetnel a PIC-re (32768Hz). Az fuggetlenul vegzi a dolgat, es mindig pontos lesz.
Én még annyit tennék hozzá, hogy ha használod a szimulátor StopWatch ablakát, ott meg lehet nézni, hogy mi mennyi ideig tart. Előtte be kell állítani a frekit a projectben(ide a kristály frekijét kell beírni)!
De én sem ajánlom, hogy NOP-os várakozásokkal oldj meg egy órát! |
Bejelentkezés
Hirdetés |