Fórum témák
» Több friss téma |
Már bocsi. De ha azt írtam volna, hogy" Majd megirod, hogy mire jutottál?" ez kérdés lett volna. De nem ezt írtam...
Egészen egyszerűen mondtam, illetve írtam neked, hogy tudasd velünk az eredményt. Ez nem kérdes. ![]() A hozzászólás módosítva: Jún 21, 2016
Idézet: „Majd írd meg mire jutottál.” Ez egy felszólító mondat akar lenni, és ennek megfelelően felkiáltójel kellene a végére. ![]() (Bocsi a kukacoskodásért és a témától való eltérésért, de szeretek nyelvtani dolgokon vitázni! ![]() giskard: Egyébként meg elismerésre méltó a kitartásod a probléma megoldását illetően. Gratulálok! A hozzászólás módosítva: Jún 21, 2016
Igazad van! De semmi képp nem kérdő mondat.
![]()
Sziasztok! Csak egy gyors elméleti kérdésem lenne. Tapasztalataim alapján bármely PIC-nél az ADC konverzió 10 bites eredménye ingást mutat, úgy, hogy a bemeneti jel nem változik (műszerrel ez az ingás nem mérhető). Próbáltam a bemenetre kondit rakni, semmi. A tápfeszültségben sincs benne az ingás ( A ref pontok miatti ingásra gondolok). Az ingás mértéke impulzus szerű, 2-8 érték az 0-1023 érték tartományban(10 bites felbontású ADC). Ez normális, vagy valamit én csinálok rosszul...
Szoftveresen javítható a dolog, ha mondjuk 3 mérést csinálok, és abból átlagolok. De ez sok változót, így relatív nagy erőforrást igényel. Minek 4db unsigned int változó, ha egy is elég?
Ez jellemző sajnos a 10 bites ADC-knél.
Mindegyik projektemnél észleltem kisebb nagyobb ingást. Pufferelek és átlagolok, ha zavar, vagy kevesebb időközzel jelenítem meg az értéket a kijelzőn.
Milyen műszerrel mérted?
Ha 5V-os tápfeszt használod referenciának akkor 5/1024=0,00488Voltos lépésak vannak. Ezt max szkóppal tudod mérni. Ezenkívűl több helyen is említették, hogy ebben az esetben a PIC működése is megzavarhatja a referencia feszültséget. Véleményem szerint ez annyira kicsi ingadozás, hogy egy próba panelen összedugdosott áramkör esetén egy hosszabban hagyott vezeték is okozhatja. Átlagolni kell.
Üdv!
A megfelelő beállításokat kell alkalmazni az ADC-re és átlagolni kell mindenképpen. Nem tudom te milyen nyelven programozol, de nekem BASIC-ben elég 2 változó is. FOR ciklusban veszek mintát, ezt a mintát minden egyes alkalommal hozzáadom a kimeneti változóhoz. Ezt én 60x szoktam, majd a FOR ciklus végeztével elosztom a 60-al amit ugyan abba a változóba írok vissza.
Relatív nagy erőforrást? Veszel egy 16 bites széles változót (nem tudom, hogy C vagy assembly) 64 darab mintát hozzá adsz ehhez a változóhoz (max 64*1023) és elosztod 64 avagy a gyorsabb 7x jobbra lépteted és kész is van.
Szerintem ehhez nem kell erőforrás.
Köszönöm a választ. Megnyugodtam, hogy ez ilyen. Marad a szoftveres pufferelés.
Idézet: „hogy egy próba panelen összedugdosott áramkör esetén egy hosszabban hagyott vezeték is okozhatja” Értelek, de az a baj, hogy ezt megépített nyákon is csinálja. Egyébként a 4-5mV ingás kisebb feszültségeknél (mondjuk 50-100mV) műszerrel is mérhető lenne, persze, ha a digit műszer mintavételezése épp elkapja az ingást... ![]() De szerintem don_peter társunknak igaza lehet, ez valóban ezt tudja. Idézet: „...és elosztod 64 avagy a gyorsabb 7x jobbra lépteted és kész is van.” 64 = 2^6, tehát 6 léptetés kell csak.
Bocsánat arra gondoltam, csak hirtelen ránéztem a számológépen hogy hanyadik bit = 64-el és ott rontottam el ezt, hogy nem 0-val kezdtem a számolást
![]()
"A világon tíz féle ember létezik. Azok, akik értik a bináris számokat, meg azok, akik nem."
![]()
Igen ezt már, hallottam és akkor "sem" értettem
![]() ![]()
Pontosabban 10-féle ember van: az egyik érti a kettes számrendszert, a másik nem...
(gyengébbek kedvéért: 10 = 2)
Sziasztok!
PIC18f14K5-en mit kellene beállítani előre, ha a következőket szeretném? Egyáltalán lehet együtt a kettőt? RA = digitális in (nyomógombok) RC = digitális out (ledek) RB = analóg in (poti) Gondot okozhat ha a PGD PDC lábat digit bemenetként használom? Az LVP-t azért kapcsoljuk ki nem? A fordító lefordítja, a hardveren kimértem a dolgokat, szerintem valami alap dolgot szúrtam el vagy előlről kell az egészet átgondolnom...egyelőre csak az RC7RC6 ledek villognak bolond módon. ![]() Ezt szeretném:
Köszönöm!
Amit hirtelen észre veszek és kérdezném, hogy miért teszed az ADCONx regiszter beállítását az első while() függvényen belülre?
Szerintem az nem állítódik el, így mehetne while elé a main függvénybe. Analóg érték mérésénél, vedd figyelembe, hogy amit mérsz értéket és osztod akkor ott lebegőpontos számot fogsz kapni, tehát ha nem egész az eredmény, veszíthetsz egy értéket. (bár gondolom ez nem számít túl sokat) LVP az az alacsony programozási módhoz kell. Ha be van kapcsolva, akkor fel kell húzni VCC-re. (bár ez lehet fordítva van, nem tudom megnézni most az adatlapot.) Ha ha nem használod azt a lábat, akkor érdemes felhúzni és bekapcsolni. Független attól, hogy nem használod a többi PORT-ot azokat is állítsd kimenetre. PGD, PGC lábakat csak programozásra használod külön, programból arra állítod amire akarod. A hozzászólás módosítva: Jún 22, 2016
Bocsi az LVP-t hirtelen összekevertem az MCLR-el.
LVP csak az alacsony programozási módhoz kell. Idézet: „LVP: Single-Supply ICSP™ Enable bit 1 = Single-Supply ICSP enabled 0 = Single-Supply ICSP disabled”
- ANSEL, ANSELH beállítása hiányzik.
- A RA0 és RA1 az adatlap szerint Vusb+0.3V a megengedett maximális szint. Be van kapcsolva az USB LDO? Kívülről adsz a Vusb -re 3.3V -ot? - A RA0 és RA1 maximálisan csak 3.6V -os szintet kaphat. - Ha a Low Voltage Programming lehetőséget bekapcsolva hagyod, az RC3 -at alacsony szintre kell húzni. Ha letiltod, az RC3 portbit felszabadul. Továbbá:
A felső feltétel szeinti részletre bemegy akkor is ha a PORTAbits.RA4 akármilyen szintű. Az alsó feltétel szerinti részlet egyből végrehajtódik, ha PORTAbits.RA4 ==0. Jó ez így? Hasonló problémák vannak a többi elágazással is.
Igazad van. Mindent sikerült beállítani, ennél a logikánál megbukott.
Azt szerettem volna elérni, ha RA5 alacsony, akkor van valami. Ha RA5 alacsony és mellette RA4 is alacsony akkor más valami. Egyszerre csak egy állapot áll fenn, ezért nem gondolkodtam megszakításban. RA5 RA4 RA0 1 0 0 Led1 villog 1 1 0 Led1 egyet villan 0 1 1 Led2 egyet villan 0 0 1 Led2 villog Gondoltam ha egyik nyomógomb nyomva van történik valami, de ha mellette egyszerre vele még egy másik is, akkor más valami. Mi a probléma a "logikámal"?
Bocs, csak most jutottam gép közlébe... Ez mekkora ötlet?! Tényleg, hogy ez nekem nem jutott eszembe. Nem kell minden kiolvasásnak egy másik 16 bites változó. Köszi az ötletet.
A következő átlagot így csak újabb 64 minta után tudod számolni, ha jól értem...
![]()
Ha súlyozott átlagot számoltatsz akkor minden mérésnél kiegyenlítheted a kiugró értékeket.
Bár ez matematikailag több számítást igényel.
Venni kell 64 mintát, átlag, és kész az eredmény újabb eredményhez újabb 64 minta, átlagolás és kész az új eredmény. Ha jól értettem a kérdésed.
Ha folyamatosan akarod az új mérési eredményeket is mindig "belefésülni" az addigi adatokba, és azonnal az addigi átlagot tudni minden mérés után, valójában a 64 minta átlagolásához egy 64 elemű fifo-dnak kell majd lennie (sima tömb ügyesen kezelve körforgó írás pointerrel). Ha nincsen annyi erőforrás, akkor persze csak az marad, hogy 64 mintánként egyszer lesz "kimenet", és az új minták beérkezése során nem lesz új adat, csak a régi lebufferelve.
Ha egy 64 elemes FIFO tárat használsz akkor nem kell újabb 64 mintáig várni. A legrégebbi mintát eldobod, az újat meg hozzáadod plusszba. Így mindig a legutolsó 64 mintát használod feldolgozáshoz.
(pajti2 megelőzött) A hozzászólás módosítva: Jún 23, 2016
Még annyi hogy 64 minta kell a FIFO első feltöltéséhez, hogy mindig 64-gyel kelljen osztani.
Ehhez vagy a legelső mintával töltöd fel a FIFO-t kezdéskor, vagy csak 64 beérkező minta után kezded felhasználni őket.
A súlyozott átlag közel ugyan azt az eredményt adja. Nem kell hozzá fifo, és minden mérós után használható az eredmény.
Először természetesen a 64 mintából matematikai átlag. Utána aktuális átlag *63 +új minta /64. A hozzászólás módosítva: Jún 23, 2016
Teljesen igazad van. Ez a megoldás ugyan kicsit lassabban reagál a változásra, de cserében sokkal kisebb az erőforrásigénye. Gyakorlatilag 4 utasítással kiszámolható a következő átlagérték: 2 léptetés (*64, /64) + 1 kivonás + 1 összeadás. Hatékony.
Persze, én is így használom (szerintem a 64 elemű FIFO FSR-el címezve nem egy bonyolult, ugyanakkor nagyon hatékony dolog!), de a kérdező csökkenteni akarta az erőforrásigényt és erre kapta megoldásként a fentebb írtakat...
Sziasztok!
Van egy PIC16F1512-es PIC-em aminek az adatlapját tanulmányozva kérdések merültek fel bennem az RC3 és RC4 kimenetekkel szemben. Mint a többi kimenethez, ide is oda van írva, hogy CMOS general purpose I/O de alatta az I2C funkcióhoz azt is írja, hogy OD (Open Drain). Most akkor ezek a lábak kétfajta kimenettel rendelkeznek és csak I2C módban OD egyébként CMOS, vagy csak szimplán open drain és nem tud H szintet kiadni? |
Bejelentkezés
Hirdetés |