Fórum témák
» Több friss téma |
Fórum » MikroPascal kérdések
Témaindító: bozsokiandras, idő: Máj 15, 2006
Témakörök:
16F628 4MHz órajellel 1us -el lépteti a timereit. A Timer2 1:1, 1:4, 1:16 előosztóval, egy 8 bites programozható osztóval (RR2) és egy 1:1 .. 1:15 utóosztóval rendelkezik. 1ms előállításához a timer2 -nek 1000 -rel kell osztania: 1:4 előosztó, 250 -es programozható osztó és 1:1 utóosztó.
PR2 = 249; T2CON = 5; A megszakítás kéréséhez PIE1 regiszter TMR2IE bitjét 1 -re, INTCON PEIE bitjét 1 -re, és az INTCON GIE bitjét is 1 -re kell állítani.
Így írtam meg a program időzítő részét, de 15másodpercen belül 2 másodpercet késik. Proteus-ban tesztelem a kódot. A begin..End között van még pár sor kód (nyomógombok állapot lekérdezése), de annak az időzítést tudtommal nem kellene zavarnia.
Ez egyre jobb!
Ugyanazt a hex fájlt ha futtatom a proteusban ill, kiírom a fizikai pic-re, akkor más-más sebességgel dolgozik. A proteus szimulációban késik, a gyakorlatban pedig egy keveset siet. A hozzászólás módosítva: Dec 6, 2013
A TMR2 -t nem kell írni, a hardware törli... A megszakításban a PR2 írása is felesleges, a beállított érték megmarad benne.
A hozzászólás módosítva: Dec 6, 2013
Most kiírva hardwarre 2 mp-et siet 1 percen belül.
A hozzászólás módosítva: Dec 6, 2013
Szia!
Tapasztalatból mondom, hogy nagyon nehéz egy önálló PIC-el úgy órát készíteni (mondjuk nem csak az órát számolgatja, hanem egyéb más program részek is vannak), hogy az tényleg patentosan pontos legyen! Én, ha órát fogok használni, a következő két módszert használnám! (BEVÁLT MÓDSZER). RTC -- link A DS1307 -es IC-nek konkrétan egyetlen egy feladata van, méghozzá a beállított idő tartása és rendkívül pontos számlálása. Ez az IC egy 32.768kHz - es kvarc -al működik, áramszünet esetén a ráköthető 3V -os (alaplapi elem PL: 2032) tartja, és működteti a számlálót. Ha jól emlékszek, akkor I2C buszon keresztül két vezetékkel könnyen kiolvasható a Regiszter táblákból a pontos idő értékei. Ha mégis számlálósat szeretnél készíteni, akkor is javaslom, hogy legyen ott ez az IC, ugyanis képes 1s -os impulzusokat kiadni az SQW/OUT lábán. Ebben az esetben csak a megszakítás vezérlő bemenetre kell rákötnöd, és a programban megszakításkor a szmáláót kell növelned. Alaphelyzetben I2C buszon keresztül kell beállítani a pontos időt, majd a belső timer-ét elindítani, és amíg más parancsot nem kap, vagy nem merül le az elem, a pontos időt tartani fogja. Csak egy ötlet A hozzászólás módosítva: Dec 6, 2013
Szia!
Raspberry-n nekem a Python programozási nyelv fogott meg, főleg azért, mert sok olyan modulja is van, amit nem kell előre megírni. OS-nek Raspbian -t raktam fel. Engem nagyon megfogott az I2C kommunikációs busz, és a fentebb leírt módon egy PIC16F887 -el szeretném összekötni.
Utánaolvastam rengeteg fórumon, és mindenhol a belső oszcillátor pontatlanságát írják.
A proteusz és a valóságban mért időeltérések oka pedig, valószínűleg a PIC hőmérsékletének betudható plusz ingadozás volt. Próbálom a költségeket alacsonyan tartani, így 32.768KHz-es külső kvarcra próbáltam tesztet készíteni. Mivel itthon nincs ilyenem, így egyenlőre proteusban tesztelem. Ebben is sikerült zátonyra futnom. Rengeteg kitartás kell a mikrokontrollerhez Az alábbi módon inicializáltam a timer1-et:
A regiszterek többi bitjét nullára állítottam. Ennek a kódnak a belső 4MHz-es órára igazított beállításaival tudja számolni az időt, csak ugye pontatlan. Ezzel a beállítással viszont meg sem moccannak a számok. Mintha az interrupt le sem futna. Mielőtt kitépném az összes hajamat, valaki tudna adni tippet, mit hagytam figyelmen kívül? Csatoltam a tesztáramkör rajzát. A hozzászólás módosítva: Dec 7, 2013
Annyival jutottam közelebb a megoldáshoz, hogy a OPTION_REG.NOT_RBPU := 0; bit-el sikerült engedélyeztetnem a PortB megszakításokat, és így a T1CKI lábra kötött nyomógombbal sikerült külső impulzussal számoltatnom a timer1 interruptot.
Sajnos kvarccal továbbra sem csinál semmit. A hozzászólás módosítva: Dec 8, 2013
Nem vagyok teljesen meggyőződve róla, hogy a Proteus képes külső oszcillátort szimulálni.
Nagyon javaslom, hogy inkább a valóságban próbáld ki. Óra kvarcot találsz bármilyen ócska vacak kínai órában, (pl. csipogós ébresztős) karórában stb. Bővebben: Link
Sajnos úgy sem jó.
Van valakinek erre biztosan működő példa programja pascalban?
Csináltam egy teljesen lebutított demot. Csatoltam a pascal kódot és a proteus szimulációs fájlt.
Tudná valaki tesztelni? Ha a T1CON.TMR1CS-t nullára állítom, akkor a belső óráról működik a timer1 számlálás, ha 1-re állítom, akkor nem megy külső kvarcról. Mi hiányozhat még belőle?
A hozzászólás módosítva: Dec 9, 2013
Csatoltam a kapcsolási rajz képét is...
Na apránként csak felrakok minden szükséges fájlt
A HEX lemaradt...
Az RB7-re köss egy külső oszcillátort a kvarc helyett, és működni fog. (Generator Mode - DCLOCK frekvenciát állítsd 32768Hz -re)
A valóságban inkább 2 darab 15pF kondit használj 33 helyett. A hozzászólás módosítva: Dec 9, 2013
Egy DCLOCK nevű eszközt találtam proteusban, és azzal valóban működik.
De miért van ez? Valóságban is összeállítottam a kapcsolást, és úgy sem működött kvarcal. Rossz kvarcot találtam volna? Egy régi alaplapból forrasztottam ki.
Biztosan nem. 32768 van ráírva.
Most szereztem még 4db használtat. Estére újra tesztelem ezekkel élőben. Sajnos rendelésre 5-7 nap mire újhoz jutok. A proteust viszont továbbra sem értem.
Nagyon köszönöm a segítséget!
Sikerült pontosan beállítani.
Szívesen, örülök hogy sikerült.
A nyákon majd a lehető legközelebb tedd a kvarcot és a 2 kondit a mikrovezérlőhöz. (a vezetékek a testhez a kondenzátoroktól is a lehető legrövidebbek legyenek a nagyobb pontosság eléréséhez)
Azért nem megy a kvarc, mert nem állítottad be rendesen az RB6-7 portokat. Egy kvarc önmagában nem oszcillál, csak ha oszcillátor kapcsolásba van kötve. Lehet látni jól a rajzon, hogy az RB6 ebben a kapcsolásban T1OSO. Vagyis kimenet. Az RB7 meg T1OSI, bemenet. Ezek között rezeg majd a kvarc. Alapból a TRISB mindent bemenetre állít. Két bemenetttel meg nincs kvarc.
A TRISB6_bit-et 0-ra kell állítani, a TRISB7_bit-et meg 1-re. Szerintem ezután a Proteus is felismeri a szándékot és szimulálja a kvarcot. A hozzászólás módosítva: Dec 11, 2013
A legelső próbálkozásaim egyike a portb lábak beállítása volt, de úgy sem működött. Most újra kipróbáltam és ismételten nem megy proteusban.
Próbapanelon összeállítva viszont az áramkört, a portb lábak állítgatása nélkül is működik szépen. A hozzászólás módosítva: Dec 11, 2013
Sziasztok!
Ebbe a hőmérős programba szeretném beleilleszteni az lcd kiiratást,de a kijelzőn semmi nem jelenik meg.Tudna segíteni valaki abban hogy hogyan kell konfigurálni az lcd kijelzőt? A kód mikropascal pro 6.0.0-ban lett megírva, és a "picplc6_ds1820.mpas"-ban nem jelenik meg semmi az lcd-n, a "MyProject.mpas"-ban jól működik a kiiratás. Köszönettel user
Nem olvastam végig az egész mpas fájlt, de ilyen nálam akkor fordult elő,amikor külső belső oszcillátort szerettem volna használni, de a mikropascal alapértelmezett, külső, HS oszcillátorával fordítottam le.
A másik ami még ilyet okozott, hogy az LCD_INIT(); után nem várakoztattam a programot egy delay_ms(100); -al, így nem volt idő az LCD inicializálásra, annak használatbavételéig.
" külső belső "
Korán van még. Tehát amikor belsőt szerettem volna használni.
szia
A mikropascalban XT külső oszcillátor van beállítva és egy 4megás külső kvarcot használok, szerintem ez jó. Kipróbáltam,amit írtál de nem segít a Delay_ms(100); sem sajnos. Az lcd világít, és a felső sorban végig tömör fekete négyzetek jelennek meg, az alsó sorban semmi. Azt nem értem hogy a "myproject"-ben meg jó.
Próbáld ki azért, hogy a belső kvarcal is ugyanezt csinálja-e.
Ha jól látom, a 16F886-nál a külső kvarcot a 9-10 (RA6-RA7) lábakra kell kötni, Te pedig a TRISA -t 255-re állítottad. Szerintem az nem jó, hogy mindkét láb bemenetre van állítva. A hozzászólás módosítva: Dec 15, 2013
Kipróbáltam, HS-el is ugyanaz a helyzet sajnos.
Egy 16F877-est használok a "picplc6_ds1820.mpas"-ban, a kvarc a 13-14-es lábon van.
Nem HS-el, hanem belső oszcillátorral: INTOSC oscillator ...
Az UART1_Init(9600);-et az LCD_Init után hívd meg, és mindkét init után tegyél egy 100 ms-os várakoztatást.
|
Bejelentkezés
Hirdetés |