Fórum témák
» Több friss téma |
Igen kell hozzá legalább 2 db. tranyó a cikk szerint, ha a B és D bemenet negált jele nem áll rendelkezésre. Az ic cseréje 74ls48-ra se sokkal bonyolultabb.
![]()
Köszi a képet. Most már nem variálok vele. Majd ha építek egy másikat magamnak, akkor megcsinálom.
sziasztok, ezekkel a PIC-es órákkal mindig bajban vagyok.
Most egy stoppert készítek, és óránként több másodpercet késik. Ami egy századmásodpercet kijelző stoppernél elég gáz... A választás a 16,384 MHz-es kvarcra esett: 16384000/4/256/32 = 500 megszakítást generál másodpercenként, tehát minden ötödiknél+ 1 századmásodpercet ad hozzá. Tettem trimmer kondit a kvarc lábához, próbálgattam állítani, de csak nem jó. Sajnos szkópom nincs. Adjatok valami tippet legyetek szívesek, hogy hogyan állíthatnám be precízre. Hangkártyás szkóppal próbálgattam, de az erre nem való. Egy egyszerű olcsó kézi stopper pontossága megfelelne már. Köszönöm!
Tudnál mutatni kódrészletet? Mert a nagyfrekvenciás kvarcok nem egetrengetően pontosak, de azért nem kellene óránként több másodpercet késniük.
abszolút egyszerű az egész, csak egy ciklus van ami figyeli, hogy túlcsordult e a timer0 és 100ad másodpercenként váltogatja a kimenetet. ami egy Számláló ic-t hajt. Basicben van...
Most látom más kvarcot használtam végül.. 4,9152MHz lett. pic: 12F629
azt eléggé kizárnám, hogy nincs idő az utasítások végrehajtására, hiszen egy-egy túlcsordulás közt kb. 4000 utasításnyi idő van. Ez a ciklus meg van kb 25? Annyira egyszerű, hogy még a Basic sem kavarhat bele... Tehát gondolom hardveres probléma. Őszintén meg modnom, hiába tekertem bármerre is a kondit, semmi változás nem volt érzékelhető.
írtad, hogy a nagyfrekis kvarcok nem túl pontosak. Rakjak bele 32768Hzes óra kvarcot? Azzal is hasonló problémáim voltak egy másik projektnél, az sietett állandóan napi 5-6 percet. Pedig az interruptal ment a timer1-ről. Nem értem mit csinálok rosszul állandóan az órákkal kapcsolatban. Lehet megkeresem vicsys-t, az órák mesterét.
![]() 32768 esetén itt azzal lenne problémám, hogy állandóan új értéket kéne raknom a timer1-be, hogy tudjam a 100-ad másodperceket mérni. 17* kellene 65536-328 at és 8* 65536-327-et beleraknom a timer1 be miután túlcsordult és mielőtt 1 lenne. ... vmi ötlet?
Üdv! 4 mhz- kvarcal is lehet elég pontos órát készíteni, az órakvarcal meg még inkább. Napi több perces késés sietés nem megengedhető
![]() A 100-ad másodperc mérése nem lehet gond, mert 1000000-t kell osztanod, úgyhogy marad bőven óraciklus a méréshez. A Tom025 féle órában lévő megoldást tudnám ajánlani: Itt veséztük: Link Üdv!
az rendben, hogy az 1 milliót kell osztanom, de azt csak szoftveresen tudom, vagy úgy, hoyg értéket adok a timer1-nek miután túlcsordul de még nem 1. azt meg nem lehet így, hogy ugyanarról a órajelről jár a pic mint a timer, mert timer írásakor az előosztó nullázodik, innentől kezdve a hardveres kilőve. Ha meg nincs előosztó akkor meg nincs idő túlcsordulás és 1 között átírni a timer-t.
32768 kvarcnál van, főleg ha a pic 20Mhz-n pörög....
Üdv! Bocs nem tudom/értem miért kell átírni a timer1-et? A csatolt példában 256 utasításonként lefut a timer0 megszakítás rutinja. Itt egy változó értékét csökkentjük, ha negatívba fordul, letelt a mérendő időtartam (a példában 1 mp, de veheted a századrészét is, maximum nem kell akkora változó) 20Mhz kvarcnál ez még 5x olyan gyorsan jár tehát még több ciklusod van a feldolgozásra a megszakítási rutinban.
Mert én hardveresen szeretném mérni az időt, mert közben a picnek más dolga is van mint a saját órajelének a számolása.
Ok. Bár azért egy órakapcsolásban (lásd pl. a nixis órák) is csinál mást is a pic mint a saját órajelét számolgatja pl. kijelzőt multiplexel, gombokat figyel stb. (ad abszurdum dcf jelet dekódol, öröknaptárt, infra távirányítót kezel, stb)
![]() ![]()
Valamelyikőnk nem ért valamit. Tehát, ez egy stopper lesz, ami századmásodpercet mér és multiplexelve küldi ki 7 szegmenses kijelzőre. Közben néha ráppillant az akkufeszre, figyeli az usartot, mert rádiósan vezérelt és természetesen közben nagyon pontosan mér.
A timer innterruptja a legfelsőbb prioritású, utána jön az usart. Miközben egy végtelen ciklusban multiplexel. Amit nem értek, hogy hogy mérjek századmásodpercet hardveresen úgy, hogy nem írom át a timer értékét? Mivel csak 2 hatványaval tudom osztani az órajelet és a timer is 255 vagy 65535 után generál interruptot. Tegyük fel megvan az interruptom, túlcsordult a timer. Ez után, hogyan tovább? Mikor növeljem a századmásodpercet tartalmazó változómat? Minden 1000000/100/256 =39,0625 interruptnál?
Írd már le, hogy pontosan milyen hardverrel is próbálkozol. Mert emlegettél itt pic12f629-et, most meg usartot, meg hogy multiplexelve ír hétszegmenses kijelzőre, ahhoz pedig a 12f629 nem rendelkezik elég lábbal. Meg volt szó 16,384MHz-es és 4,9152MHz-es kvarcról is. Alapesetben az itt felvázolt feladatot sima ügy megoldani pontos időméréssel (már amennyire a kvarc pontos).
Bocs. Kicsit már én is megkeveredtem azért beszélek össze vissza. Van egy kész működő stopperem és egy most készülő.
Ami van és nem vagyok megelégedve a pontosságával az 12f629 + 4,9152MHz +cd4026 számláló ic-k. Itt a picnek csak annyi a feladata, hogy gombnyomásra indulva billegeti a lábát 100-ad másodpercenkén és így adja az órajelet a cd4026-nak amikből 5db sorba van kötve. Az új, amit szeretnék, az már multiplexelt, mert nem csak számolni fog felfele hanem mást is, tehát cd4026 kiesik, 868MHz-en vezérelve indulna, állna meg a stopper. Ebben lenne 16,384MHz-es kvarc. Segítség egyedül a pontos óramű megalkotásában kellene. Elméletileg tudom, hogy hogy a jó, de mégsem lesz pontos. Csináltam már órát 32768-as óra kvarcal a microchip application note szerint, az se lett jó. Lehet, hogy valami hulladék kvarcokat sikerül begyűjtenem innen a közeli boltból? Idézet: Ez az amit én is tudok, azt mégsem akar összejönni. Ott a program kód lejjebb. Azon mi lehet rossz? Az pörög a 12f629-ben. „Alapesetben az itt felvázolt feladatot sima ügy megoldani pontos időméréssel (már amennyire a kvarc pontos).”
Ez kicsit hasonlít a TIL-306-os órámnál követett módszerre, mert abban is van a kijelzőben beépített számláló ic, csak órajelet vár a pictől (meg resetet stb.). Én csak azt próbáltam felvázolni, hogy ha az interrupt nem pontosan érkezik, mert 256 utasításonként fut le, akkor is el lehet dönteni, hogy az adott megszakításnál eltelt-e a századmásodperc és ha eltelt, lehet a kimenetet váltani. (És ez tényleg a kvarctól függően minden x. interrupt lesz, amiben az általam említett változó értéke alulcsordul)
Ha befordítod, hány utasítás lesz ez a basic programrészlet? Nem lehet, hogy túl lassú lesz és valami interferencia jön így ki a kimeneten 100hz helyet? Meg van benne egy fixhosszúságú pause is. Ha órkvarcot használnál 3,2768 Mhz minden 32-re mehetne egy állapotváltás ez még basicben is egyszerű lenne.
a fix hosszúságó pause az nem lényeges az 6 sec, az csak a kijelzést állítja meg stop gombra. akkor már nem mér időt.3,2768MHz helyett a 4,9152MHz-et használom így: 4 915 200 / 4 /16/256 így egy másodpercre jut 300 overflow, és mint a kódban látszik, minden harmadikra 1 lesz a gpio.2 és minden elsőre 0. tehát lesz egy 1/3 kitöltési tényezőjű 100Hz-es órajelem a gpio.2-es lábon.
A ciklus 28 szó hosszú lefordítva, kompletten. Ha nem számolom bele az 6 sec-es ifet akkor: 22
Gondolom a változók le vannak nullázva a progi elején és akkor gen=0, jön az első megszakítás valamikor (?) és gen=1,intcon2=0, gpio2=0 ,jön a második megszakítás, gen=2,intcon2=0, gpio2=0, jön a harmadik megszakítás gen=3, gpio2=1,intcon2=0,gen=0 jön a negyedik megszakítás gen=1, intcon2=0,gpio2=0,jön az 5. megszakítás gen=2,intcon2=0,gpio2=0, jön a 6. megszakítás gen=3,intcon2=0, gpio2=1, gen=0
Szóval minden attól függ, milyen ütemben lesz az intcon.2 lenullázva, ami máris hibát visz a programba és ettől késik. Az interruptot csak figyelni kellene, és nem állítgatni, mert az kieső órajeleket okoz. Ha megcseréled a sorrendet és előbb lesz 0 az intcon.2 mint ahogy növeled a gen értékét már kevesebbet fog késni szerintem.
az intcon.2 az csak a timer 1 overflow flag-je, akkor lesz 1 ha túlcsordult a timer1, szoftveresen kell 0-ázni még mielőtt újra 1 akar lenni. Nincs hatással a timer1-re ha jól olvastam.
Ja én is most olvasom a datasheetet, nekem is úgy tűnik, hogy szoftveresen kell nullázni, de ennyiszer, nem csak akkor, ha így akarod használni, (nem számláló üzemmód)? Nem tudom, hátha valaki jobban benne van ebben a pic-ben
![]() ![]()
A megszakítást ez a flag bit csinálná ha engedélyezve lenne, de nincs, gondoltam minek megszakítás, itt nincs más dolga a picnek, pöröghet egy végtelen ciklus.
De nem is ez a lényeg hanem a pontatlanság. Egyre jobban kezdek a kvarcok minőségére gyanakodni.
Talán frekimérővel (egy pontossal) meg kellene mérni a kimenő frekvenciát, hogy tartja-e és hogy hol van a 100 hz-hez képest. Az, hogy szoftveresen detektálod a flag változását, mindenképpen hibát visz bele, de a nagyságrendjét nem tudom megítélni. A kvarcra írtad, hogy tettél trimmerkondit és gondolom a 33pF-ek is rajta vannak. Nekem a wordclocknál volt lineáris késés, egy rossz eeprom olvasó utasítás miatt. Végül is a kvarc is lehet pontatlan.
![]()
Miért mondod, hogy hibát visz bele? 4*256*16 azaz 16384 órajel után átállítódik a flag bit hardveresen, ez nincs hatással semmire és attól hogy épp mikor olvasom ki és mikor nullázom az sincs hatással a timer1re. Az overflow bit mindig másodpercenként 300* fog 1 lenni. Most, hogy ebben a 300-ad másodpercben mikor olvasom ki és nullázom le nem számít, maximum pár utasításnyi csúszás lesz időnként és 1 századmásodperc néha kicsit több lesz vagy kevesebb, de egy másodpercen belül midig marad a 300 db overflowolódás.
Normális frekimérőt nem tudtam szerezni. Próbáltam a hangkártyás, szópot de az erre nem való. Egyszerűen már akkor eltérő frekiket mutatott mikor a minatavételezést átállítottam. Tipikusan az az eset volt, hogy akinek egy órája van az mindig tudja a pontos időt akinek több az sose lehet biztos benne... ![]()
Sziasztok!
Azt szeretném kérdezni, hogy építettetek-e már karórát? Nemrég elvesztettem a karórámat, és ebből az apropóból szeretnék építeni egy LED kijelzős karórát. A Lomexban kinéztem néhány fajta kisméretű Kingbright SMD LED kijelzőt. Kétféle számmagasságú tetszik: 5,08mm magas, és a 7,62mm magas kijelző. Szerintem ezekből össze lehet hozni egy karóra méretű áramkört. Azt szeretném, hogy másodperc kijelzés is legyen rajta, tehát 6 db kijelzőre lesz szükségem. Az órajel generátor egy DS32kHz IC lenne, ez nagyon pontos órajelet ad, ettől pontos is lenne az óra. Van ebből is SMD itthon. A kijelzők meghajtására szerintem valamilyen SMD tranyó kellene, a kis méret miatt. Tápellátáshoz valami tölthető Lítiumos cella kellene. A vezérlésnek egy PIC-et gondoltam, szerintem multiplex vezérlés jó lenne. (nézegettem a kapcsolásokat és ez tűnik a legkevesebb lábszámot kihasználó kapcsolásnak.) Tudásra nem kellene valami nagy dolog, elég lenne, ha a dátumot, és az időt kijelezné. Alapértelmezettként a kijelző sötét lenne, és egy gombnyomásra megmutatná az időt, vagy a dátumot. Ki lehetne választani, hogy 24, vagy 12 órás kijelzés lenne, lenne egy SET gomb amelyet hosszan megnyomva beállítható lenne vagy az óra, vagy a dátum. Még egy olyan funkciót szeretnék, hogy a másodperc nullázható legyen. Tudnátok nekem ebben segíteni, hogy ez megvalósuljon? Elsősorban a PIC programjának megírásában kérném a segítségeteket, a kapcsolást megpróbálom én összehozni, és a nyákot megtervezni. A tokozást még ki kellene találni, hogy vízálló legyen.
Ok. 5 perc késés naponta az 0,34 % egy átlagos 100 ppm-es kvarc naponta kb.9 mp-et késhet/siethet ( 0,01%) egy 20 ppm-es órakvarc kb.2 mp-et (0,002%) akkor ezek tényleg nagyon hibás kvarcok.
![]()
A végén az lesz, hogy összeütök egy ilyen 100Hz időalapot (a meglévő óra szoftveremet kiegészítve) egy próbapanelen és megmérem frekimérővel a hecc kedvéért
![]() |
Bejelentkezés
Hirdetés |