Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Problem sa interaptima

[es] :: Elektronika :: Mikrokontroleri :: Problem sa interaptima

[ Pregleda: 2072 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Marko1991
N.Beograd

Član broj: 203898
Poruke: 63
*.beogrid.net.



Profil

icon Problem sa interaptima04.01.2011. u 02:18 - pre 162 meseci
Od skoro sam poceo da ucim programiranje mikrokontrolera (uzeo sam za pocetak pic16f84),i zaboo sam kod interapata. Kod treba da radi sledece:glavni program treba da prikaze brojeve od 0-7 u binarnom zapisu na 3 LED PORTA a u interapt rutini treba da se uvecava brojac i da se proverava da li je doslo do prekoracenja. E sad,ja mislim da nisam lepo vratio vrednost brojaca iz interapt rutine u glavni program,ali nisam uspeo da provalim kako to da uradim pa molim za pomoc. Evo koda

list p=16f84 ;Definise upotrebljeni kontroler

#include <p16f84.inc> ;Ubacuje nazive registara u program

__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
;Podesava konfiguracione bitove
ORG 0X00 ;Definise start programa
TEMPW equ 0x0C ;Cuva W na 0x0C
BROJAC equ 0x0D ;Brojac

;Interapt rutina
org 0x00 ;Ovde PC dolazi po ckljucenju i resetu
goto Main ;Idi na glavni program
org 0x04 ;Ovde pocinje obrada interapta
movwf TEMPW ;Privremeno cuvanje W registra
incf BROJAC,F ;Uvecaj brojac
btfsc BROJAC,3 ;Testiraj treci bit BROJAC registra.Ako nije setovan preskoci sledecu instrukciju
clrf BROJAC ;Upisi 0 u brojac.Ako je brojac posle uvecanja preskocio dozvoljenu vrednost(7) sada 0,a ako nije sada je uvecan
movf TEMPW,W ;Vrati predhodni sadrzaj W registra
bcf INTCON,INTF ;Obrisi INTF-dozvoli nove interapte
retfie ;Kraj interapt rutine
;Glavni program-inicijalizacija
Main movlw b'10010000' ;bit 7 GIE-dozvoli interapte(1)
;bit 4 INTE-RB0 izabran za spoljasnji interapt(1)
;bit 1 INTF-interapt fleg resetovan(0)
movwf INTCON ;inicijalizuj INTCON registar
bsf STATUS,RP0 ;Prebaci program u Bank1
movlw 0x01 ;b'00000001' u TRISB
movwf TRISB ;RB0/INT kao ulaz,ostali kao izlaz
clrf TRISA ;Svi pinovi na PORTA su izlazni
bsf OPTION_REG,INTEDG ;Interapt pri rastucoj ivici signala
bcf OPTION_REG,NOT_RBPU ;Ukljuceni interni pull up otpornici na PORTB
bcf STATUS,RP0 ;Povratak u BANK0
clrf BROJAC ;Stavi 0 u BROJAC
;Glavni program-petlja
Pri movlw BROJAC ;Iz BROJACa u W
movwf PORTA ;a odatle u PORTA
goto Pri ;Vrati se na pocetak petlje
;Kraj programa
end ;Kraj programa

P.S.Uvek sija samo jedna led(na portu ra0)

Unapred hvala
 
Odgovor na temu

foxhunter1
KN03NL

Član broj: 234323
Poruke: 238
87.116.155.*



+48 Profil

icon Re: Problem sa interaptima04.01.2011. u 16:41 - pre 161 meseci
Code:

   MOVWF W_TEMP ;copy W to temp register,
   ;could be in either bank
   SWAPF STATUS,W ;swap status to be saved into W
   BCF STATUS,RP0 ;change to bank 0 regardless of current bank
   MOVWF STATUS_TEMP ;save status to bank 0 register
   : ovde dodje tvoj
   : ISR
   : kod
   SWAPF STATUS_TEMP,W ;swap STATUS_TEMP register into W, sets bank to original state
   MOVWF STATUS ;move W into STATUS register
   SWAPF W_TEMP,F ;swap W_TEMP
   SWAPF W_TEMP,W ;swap W_TEMP into W


Problem je u snimanju i vracanju tzv contexta .. Ovo je primer za PIC16F628, a slicno (ili isto) je i za tvoju '84. Pogledaj data sheet za 16F84, tamo je sigurno opisano kako treba da se to uradi. Poenta je da pre ulaska u ISR rutinu, pored W registra, moras da snimis (i vratis po izlasku) i STATUS registar, a ako u ISRu koristis FSR registar - moras i sa njim da uradis isto!

BTW Srecna Nova godina i samo navali na PICxxxx :-)
73 de YU1OL
 
Odgovor na temu

elektrostudio
Vladimir Pavkovic
SZR Elektrostudio, servis idustrijskih
masina i software developer
Novi Sad

Član broj: 201423
Poruke: 283
*.dynamic.isp.telekom.rs.

Sajt: elektrostudio.com


+25 Profil

icon Re: Problem sa interaptima07.01.2011. u 12:59 - pre 161 meseci
Greska je u liniji

Pri movlw BROJAC

moras staviti movfw BROJAC
Elektrostudio
 
Odgovor na temu

Marko1991
N.Beograd

Član broj: 203898
Poruke: 63
*.beogrid.net.



Profil

icon Re: Problem sa interaptima07.01.2011. u 20:04 - pre 161 meseci
Nece i dalje,imate jos neki predlog?
 
Odgovor na temu

Stojan Trifunovic

Član broj: 15156
Poruke: 366
*.rs
Via: [es] mailing liste



+8 Profil

icon Re: Problem sa interaptima07.01.2011. u 22:37 - pre 161 meseci
Greška je ovde:
Code:
Pri movlw BROJAC ;Iz BROJACa u W

Ovo je ekvivalentno movlw b'00001101' budući da je BROJAC equ 0x0D. Pomešali ste instrukcije.
Onda se ta vrednost b'00001101' šalje na PORTA u sledećoj instrukciji.
Budući da niste definisali kako ste povezali LED (od pinova ka GND ili od pinova ka +5V) ne mogu dati objašnjenje zasto svetli samo LED na RA0.

Nakon interapta, ponovo se uzima ista vrednost, koja se nikada ni ne može promeniti, i ponovo šalje na PORTA, I opet, i opet...


Umesto:
Code:
Pri movlw BROJAC ;Iz BROJACa u W

stavite
Code:
Pri movf BROJAC,W

ili
Code:
Pri comf BROJAC,W

u zavisnosti od povezivanja LED.

Ovaj deo mi je nejasan!
bsf OPTION_REG,INTEDG ;Interapt pri rastucoj ivici signala
bcf OPTION_REG,NOT_RBPU ;Ukljuceni interni pull up otpornici na PORTB

Ukoliko su uključeni pull-up otpornici, zbog čega ste stavili da se interapt izaziva pri rastućoj ivici? Pretpostavljam da imate prekidač povezan od RB0 ka masi (GND). U tom slučaju, program će raditi, samo će se interapt izazivati prilikom otpuštanja, a ne prilikom pritiska prekidača.

Ukoliko ste stavili prekidač od pina ka +5V, interapti se neće ni izazivati, jer je na pinu neprekidno visoko logičko stanje izazvano uključenim pull-up otpornikom. Kada je prekidač pritisnut napon +5V će na RB0 dolaziti preko njega, a kada je otpušten preko (uključenog) pull-up otpornika. Budući da nikako nema potrebne tranzicije (sa GND na +5V) nema ni interapta.


@foxhunter1
Nije problem u snimanju STATUS registra, već se navedenim primerom želelo pokazati (i dokazati) da ponekad nema potrebe snimati STATUS registar. Razlog je jednostavan. STATUS registar se u glavnom programu ne koristi. Jedino u interaptu. Štaviše, budući da se W ne koristi nigde u interaptu, jedino u glavnom programu, čak se i njegovo snimanje moglo izostaviti, bar za ovaj konkretan (početnički) primer.

Naravno da će se pri svakom komplikovanijem programu i W i STATUS morati snimati (kod 16F84 nema potrebe za snimanjem FSR, ali kod 628 već ima), ali ovde to nije slučaj. Snimanje STATUS registra detaljnije je objašnjeno u narednim poglavljima uputstva koga čita Marko1991.
 
Odgovor na temu

Marko1991
N.Beograd

Član broj: 203898
Poruke: 63
*.beogrid.net.



Profil

icon Re: Problem sa interaptima08.01.2011. u 01:43 - pre 161 meseci
Hvala,sad radi.
Greska je bila u tome sto sam ukljucio pull up otpornike(skroz bespotrebno) i u glavnom programu ispravio movlw BROJAC na comf BROJAC,W.
Ucim dalje pa ako zakucam eto mene opet
 
Odgovor na temu

foxhunter1
KN03NL

Član broj: 234323
Poruke: 238
87.116.155.*



+48 Profil

icon Re: Problem sa interaptima10.01.2011. u 14:08 - pre 161 meseci
@Stojan Trifunov
Kada sam pisao odgovor, prvo sto mi je skrenulo paznju je postojanje ISRa. Main rutinu nisam ni gledao, zato sam i napisao ono sto sam napisao. Generalno - ne bi skodilo

Pozdrav,
73 de YU1OL
 
Odgovor na temu

Stojan Trifunovic

Član broj: 15156
Poruke: 366
*.rs
Via: [es] mailing liste



+8 Profil

icon Re: Problem sa interaptima10.01.2011. u 18:44 - pre 161 meseci
Nije problem. Tu smo da se pomažemo.
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: Problem sa interaptima

[ Pregleda: 2072 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.