Fórum témák
» Több friss téma |
Korábban már felvetettem az alábbi kérdésemet:
" Tudna nekem valaki segíteni a következő rövid kis progi megírásában? 16F887-es procihoz Van egy belső időzítő, ami elszámol egy bizonyos összegig, mondjuk 3 másodpercig, akkor kér egy megszakítást és fellvillant egy LED-et, majd folytatódik tovább a program. Köszi előre is a segítségeteket!" És az alábbi választ kaptam rá: A megszakítás beállításához ezek kellenek, ha timer1-et használsz: BANKSEL PIE1 BSF PIE1, TMR1IE ; Enable Timer1 interrupt BANKSEL PIR1 BCF PIR1, TMR1IF bsf INTCON,GIE bsf INTCON,PEIE A megszakításban: regiszterek mentése... clrf TMR1L MOVLW felso ; Value to load into TMR1H MOVWF TMR1H ; Write High byte MOVLW also ; Value to load into TMR1L MOVWF TMR1L ; Write Low byte bsf LED nop nop nop bcf LED bcf PIR1,TMR1IF regiszterek vissza.. retfie Lenne valaki olyan rendes, és leírná egészbe a programot? Mármint, úgy hogy le lehessen fordítani, és rá tudjam küldeni a processzorra, hogy működjön? Tudom elég hülye vagyok hozzá, de sajnos ez lenne egy beadandó feladatom... Nagyon megköszönném
Üdv!
16F628 mikrovzérlőre meg tudnám oldani a TIMER0 - val, azt ki is tudnám próbálni. 877 - es nekem nincs itthon
Hello!
Szerintem felesleges volt új topikot nyitni, megfelelt volna bármely PIC témájú is.. Meg nem oldanám helyetted a feladatot, mert szerintem nem azért kaptad.. De egy kis program részlettel támogatnám a dolgot. Innen kis erőbefektetéssel, már megoldhatod vagy eldöntheted mit szeretnél. A feladat megoldásához tanulmányoznod kellene a DS30292C adatlapot. A feladatban kis ellentmondás van. A Timer1 időzítő egység egy 16bites számláncból, és egy előosztóból áll. A számlánc így 65536-al, az előosztó (prescaler) 1:8-al tud maximálisan osztani. Tekintettel arra, hogy a Timer órajele, vagy saját kvarccáról, vagy a rendszeróráról (fosc/4) tud működni, így a hagyományosan a 4MHZ-es oszcillátorról, nem lehet a 3sec megszakítást közvetlenül létrehozni. Ha 3sec megszakítási időt számolunk, annak frekvenciája 0,33333..Hz. Ezt megszorozva 65536-al, majd 8-al és 4-el, 699kHz renszeróra frekvenciát kapunk eredményül. Tehát ha a belső órajelt használjuk Timer1 meghajtásának, akkor a maximális osztási szám esetén is a processzor órajele nem lehet nagyobb a 699kHz-nél. Ebből az okból kifolyólag, vagy a Timer1 T1OSO/T1OSI bemenetére, (a processzor órajelétől független) kisfrekvenciás kvarcot rakunk, vagy a processzor órajelét szolgáló kvarcot cseréljük kisebb értékűre mint 699kHz. A szokványos 32768-as kristállyal, már mind két módon elérhető a közvetlen 3sec-os megszakítás. Az osztási számot úgy számoljuk ki, (belső órajel esetén) hogy a kvarc frekvenciát elosztjuk 4-el, (ez lesz a Timer1 órajele) majd a választott előosztó osztási számával (1:1 1:2 1:4 1:8). (Tekintve, hogy a Timer1 osztóval csak egész számmal oszthatunk, ennek még egész számnak illik lenni.) Ez után a megszakítás idejét frekvenciára számoljuk (f=1/t) és megnézzük, hogy a megszakítási időben hányszor van meg az előosztó után számolt frekvencia. Ha ez az érték egész, és kisebb mint 65536, akkor nyertünk. Ha nem, más előosztási arányt, vagy kristályt választunk.. (Ha Timer1 külső órajelét használjuk, akkor nem osztunk 4-el, mert ez közvetlenül hajtja meg az előosztót, nem a rendszerórajel negyedével.) A mintapéldában, a megszakítás 10msec-onként jön létre, amit aztán a megszakítási kiszolgáló rutinban tovább számlálunk. A Timer1 üzemmódjának beállításához a T1CON regiszter bitjeit, a megszakítás aktiválásához, az INTCON és PIR1 megfelelő bitjeit használjuk. üdv! proli007 Idézet: Ez így olyan zavaros, kétlem, hogy így szólna a feladat! „Van egy belső időzítő, ami elszámol egy bizonyos összegig, mondjuk 3 másodpercig, akkor kér egy megszakítást és fellvillant egy LED-et, majd folytatódik tovább a program.”
Szia!
Egy ötlet: A Timer2-t PWM módban be lehet állítani 250, 1000, 4000 -rel való osztásra (PR2=.249, Timer2 előosztás 1, 4, 16), a pwm kitöltését 125-re állítva a pic lábára kihozható az órajel 250, 1000, 4000 -rel leosztott frekvenciájú jele. Ezt a Timer1 külső órajelére kötve, az említett időzítésnél jóval hosszabb is megvalósítható magasabb órajel frekvencia esetén is: Fosc=20MHz, PWM kimenet 20kHz, Timer1 megszakítás kérés 26.2144 másodpercenként, Fosc=20MHz, PWM kimenet 5kHz, Timer1 megszakítás kérés 104.8576 másodpercenként... |
Bejelentkezés
Hirdetés |