Fórum témák
» Több friss téma |
Bizonyára sokat javít majd a helyzeten
Hát 2 óra alat 1 percet késik.... igy is más ötlet???
kódot csatoltam.
Idézet: „A megszakítási rutinod rettentő hosszú.” Bocs a tájékozatlan kérdésért, de C és egyéb nyelveken mikor nem hosszú egy megszakítási rutin? Csak azért kérdem, mert assembly-ben egy 2000 soros programon belül nekem 116 sor hosszú a megszakítási rutin, és még a kijelző vezérlő 1-Wire kommunikációját sem zavarja meg. Több különböző programom tartalmaz órát. Mindegyik a megszakítási rutinon belül végez el minden órához kapcsolódó műveletet, még az ébresztési idők ellenőrzését is. Viszont minden esetben órakvarc működteti az órát. Nem bohóckodom a proci órajelének leosztásával. Így az mehet akár max. frekvencián is, hogy minden beleférjen.
Kicsit nehezen látom át a kódodat. Én általában MikroPascalt használok.
De a hiba felderítéséhez lenne javaslatom. Ebben a kódban sokminden benne van. nyomógombok figyelése , ébresztő, hőmérő.Így egyszerre sok a hibakereséshez. Szerintem csinálj egy olyan kódot amiben csak egy sima óra van. Mást ne csináljon. Ha ez is késik, akkor addig kell masszírozni amég meg nem találod a hibát. Ha ez már pontosan megy raksz hozzá új funkciót, pl az ébresztést.
Valóban ez nem teljesen kézzelfogható érték.
De az tény, hogy ha a 16 bites számlálódat órakvarcal hajtod, sokkal több időd marad két megszakítás között mint órajelről hajtva akár a legnagyobb osztást hasnálva.
Kedves Elektro.on
A tesztett gombok nyomogatása nélkül használom elinditom és kész igy tesztelem. De kiprobálom ugy ahogy mondtad ![]() Fölösleges dolgokat kiszettem és most inditottam el a tesztett A hozzászólás módosítva: Márc 18, 2017
Én a mellékletben található módon csinálnám, azonkívül a feleslegesen 16 bites változókat 8 bitessé alakítanám.
Nem vagyok otthon C-ben, de a !count-- kiértékelésekor nem téved egyet a számolás?
Igen, téved. Pont egy százalékkal fog ez miatt lassabban járni. Át kell írni if(!--count) -ra azt a sort.
Lassan 1 órája megy a teszt és egy másodpercet sem késik MÉG...
![]() if(!--count) és if(!count--) mi a külömbség???
Az egyik a vizsgálat előtt csökkenti az értéket a másik vizsálat után.
sziasztok ismét én
![]() ![]() ![]()
Ez lehet a problémáma???
Ha jól számoltam ez ~60ppm, szerintem belefér a kvarc pontatlanságába. Most kell hosszabb ideig hagyni, és pontosan megmérni a különbséget, és az alapján korrigálni.
Sziasztok!
Akadt egy kis problémám az ADC-vel, egy potin olvasom be a feszültséget, de nagyon könnyű úgy beállítani, hogy két érték között ugráljon, ami eléggé zavaró. A programrészlet: ADCON0bits.ADON = 1; Delay10TCYx(3); ADCON0bits.GODONE = 1; while(ADCON0bits.GODONE); POT=ADRESH; ADCON0bits.ADON = 0; Delay10TCYx(3); POT>>=2; A potit 300ms-ként olvasom be egy alacsony prioritású megszakításban. A felső 8 bitet olvasom, de és a 0-255 közötti értéket még osztom is 4-el, a kapott 0-63 közötti értéket kiíratom az lcd-re, de ahogy említettem, nagyon érzékenyen viselkedik. Maga a léptetés is nagyon érzékeny, de két érték közötti ugrálást is könnyű megvalósítani. Mit lehet ezzel kezdeni? Van valami jó ötletetek?
Átlagolás. Ne a pillanatnyi értéket, hanem az utolsó x mérés átlagát írd ki.
Mennyire stabil az a feszültség, amit mérsz? Mennyire stabil a referencia/táp feszültség? Mennyi zavart szedhet össze a kapcsolás? Valami nagyon nem jó, én 12 bites ADC esetén, mindenféle szűrés nélkül tapasztalok +- 6-8 LSB ugrálást. Igaz, a referencia feszültség nem a tápfeszültség, hanem direkt erre való IC (MCP1541).
Én így csinálnám:
Az AdEvent függvényt kellene megírnod, amely paraméterként az aktuális AD értéket kapná meg, de csak abban az esetben kerülne meghívásra, ha a potit eltekerted.
A poti ugyan azt a feszültséget használja mint a mikrovezérlő, ami elég stabil 7805 stab. után csak egy schottky dióda van a polaritásvédelem miatt szóval kb. 4,7-4,8V között van fejből már nem tudom, de nem változik. Egyébként is a referencia feszültség a picé, szóval nem itt van a baj.
Zavart is szedhet össze, majd cserélem a kábelt árnyékoltra, de ha kizárok minden zavaró jelet és csak az ADC megy akkor is simán be lehet állítani, hogy ugráljon két érték között, szóval az alapprobléma ez. Amúgy milyen szűrést érdemes rátenni vagy elég ha árnyékolt kábelt használok? Az átlagolás ugyan megoldás lehet, az ugrálásra, de a másik érdekesség, hogy néha olyan mintha tömöttebben lennének az értékek. Alig érek hozzá a potihoz és máris ugrik 1-2 értéket. Idézet: „Ha jól számoltam ez ~60ppm, szerintem belefér a kvarc pontatlanságába. Most kell hosszabb ideig hagyni, és pontosan megmérni a különbséget, és az alapján korrigálni.” Ezt hogy kell megcsinálni?? PR2 = 249; ezt kell állítgatnom?
Valami hasonlót kipróbálok, hátha segít ez a hiszterézis féleség.
A hozzászólás módosítva: Márc 19, 2017
Én a kvarc kondijaival játszanék (ha késik csökkenteném, ha siet növelném az értékét).
Nem. Vegyük a példádat: ha jól számolom futott az órád 13 óra 42 percet, ez 49320 másodperc. Ez alatt sietett 3 másodpercet. Ez azt jelenti, hogy a 100Hz-es megszakításod igazából 99,99391Hz. Hogy ezt a kis különbséget ki tudjam korrigálni felszorzom pl. ezerrel így 99 993,91-et kapok 100 000 helyett. Tehát csinálok egy számlálót (a 100 000 miatt long-ot), 100 000-ről indulva minden IT-ben levonok 6-ot (ugye a 100 000-99 994). Amikor ez a szám negatív lesz (emiatt ugye előjeles kell), újra hozzáadom a 100 000-t, és ki kell hagynom egy növelést az IT-ben.
Egy poti temérdek sok módon tud zavart összeszedni. A szénrétegessel van főleg baj. Ha referencia beállításnak kell a poti, és probléma az ugrálás, huzalpotmétert használj.
Oszcilloszkóppal mérd meg, mennyire stabil az az 5 V. A 7805 bemenetére 330 nF, a kimenetére pedig 100 nF dukál. Az se mindegy, honnan veszed a mérendő feszültséget. Ha túl nagy a forrás ellenállása, szintén problémát okoz. ADCON2-ben milyen beállítást használsz és milyen órajelen a kontrollert? Egyáltalán milyen PIC-ről van szó?
A táp stabilitásában nem érdemes bízni, főleg ha a PIC belső referenciáját használod, mivel az stabilabb lehet mint a táp, főleg ha terheléseket kapcsolgatsz közben. Esetleg megoldás lehet egy kondi a poti csúszkájára.
Huuu.... Ezt megtudnád mutatni kódba vagy folyamat ábrába ??
Valami ilyesmire gondolsz?
![]()
Gondolom az IT rutinba az az interup nem??
Ha igen else után növelem a másodpercet??? így:
Interupom igy nézki:
A hozzászólás módosítva: Márc 19, 2017
|
Bejelentkezés
Hirdetés |