You are here

Pic tmr1 és analóg port tanulásához segitséget kérek.

14 posts / 0 new
Last post
bubuc17
bubuc17 picture

Sziasztok.
Pic segítségével kéne egy vezérlést megoldanom.
Sajnos a határidő már véges.
Így lehet hogy egy pic nélküli áramkörrel kell megoldanom amit nem szeretnék.
Programoztam pic 16f szériákat de csak alap szinten. (asembler és PIC SIMULATOR IDE)
Most hogy nekiálltam tanulni az analóg port és a TMR használatát nem úgy haladok sajnos ahogy kéne.
Adatlapokat kinyomtattam tudom már mit hogy kéne konfigurálni de ezt assemblerbe leírni már nem megy.
Ebben kérnék segítséget hogy tud-e valaki segítenie az elindulásban.
Vagy interneten vagy el is mennék személyesen.
Persze nem kérem ingyen a fáradozást.

Comments
bubuc17
bubuc17 picture

Hobbielektronikás timer0 programban sok parancsot nem fogadott el a pic simulátor ide.
Így remélem jól átírtam azokat.
Már egyre világosabb a működése is.
A problémám csak az hogy a timer0 és timer 1 szépen számol de nem lép ki a goto loop ciklusból. Ha jól értem mikor timer0 telítődése megszakítást kellene generálnia.

; HOBBI ELEKTRONIKÁS PROGRAM

SAVE EQU 0X70
STATUSSAVE EQU 0X71

ORG 0
GOTO MAIN ;BEUGRIK MAINBA

ORG 4
;ELMENTJÜK A STATUS REGISZTEREKET
MOVWF SAVE ;ELŐSZÖR A WORK REGISZTERT
MOVFW STATUS ;STATUST BELE A MÁR LEMENTETT WORK REGISTERBE
MOVWF STATUSSAVE ;STATUST STATUSEVEBA TÖLTI A WORKÖT

BCF INTCON,T0IF ;TÖRLI AZ RBIF FLAG BITET
MOVLW B'11111111'
XORWF PORTD,F ;XOR PORTD BITJEIT

;VISSZATÖLTJÜK A WORK ÉS STATUS REGISZTEREKET
MOVFW STATUSSAVE
MOVWF STATUS
MOVFW SAVE

RETFIE ;VISSZAJÖVÜNK INTERPUTBÓL

MAIN
BANKSEL TRISD
MOVLW B'00000000'
MOVWF TRISD ;MIND KIMENET A 0 MIATT
MOVLW B'00000111'
MOVWF OPTION_REG ;BETÖLTJÜK ELŐOSZTÓT 1:256
BANKSEL PORTD
MOVLW B'01010101'
MOVWF PORTD

;BEÁLLÍTJUK AZ INTERPUTOT
BSF INTCON,T0IE ;ENGEDÉLYEZZÜK AZ INTERPUTOT A TIMER0-RA
BSF INTCON,GIE ;GENERAL INPUT ENABLE BITET 1-RE ÁLLÍTVA BEKAPCSOLUNK MINDENT

LOOP
NOP
GOTO LOOP ;VÉGTELEN CIKLUS
END

0

rainbow555
rainbow555 picture

Szia!

Nem írtad milyen kontrollerbe való a program, pedig nem mindegy...

Én így szoktam (16F628):

;--- megszakitas kezeles ---
MEGSZAKITAS
MOVWF WTEMP ;elmentjuk W-t
SWAPF STATUS,0 ;es status-t ugy hogy
MOVWF STATUSTEMP ;ne valtozzon flag

BTFSC PIR1,TMR2IF ;TIMER2 megszakitas?
GOTO I_DISP ;ha igen akkor kiirjuk a szamokat
BTFSS INTCON,T0IF ;TIMER0 megszakitas?
GOTO K_END ;ha nem akkor kilepunk
BCF INTCON,T0IF ;TIMER0 megszakitas nullazas
INCF MP_C,1
.
.
.
.
SWAPF STATUSTEMP,0 ;status-t visszatoltjuk
MOVWF STATUS ;ugy hogy ne valtozzon flag
SWAPF WTEMP,1 ;W-t szintugy
SWAPF WTEMP,0
RETFIE

START ;portok, idozitok stb. beallitasa
CLRF PORTA ;PORTA nullazas
CLRF PORTB ;PORTB nullazas
MOVLW 0x07 ;komparatorok kikapcsolva
MOVWF CMCON
BSF STATUS,RP0 ;bank1
MOVLW .255 ;TIMER2 eddig szamol
MOVWF PR2
MOVLW B'00000010' ;TIMER2=PR2 megszakitas ON
MOVWF PIE1
MOVLW B'00111100' ;PORTA RA0-RA1 RA6-7 kimenet, RA2-RA5 bemenet
MOVWF TRISA ;
CLRF TRISB ;PORTB mind kimenet
MOVLW B'11000111' ;Option reg. beallitasa az idozites eloosztasa miatt
MOVWF OPTION_REG
BCF STATUS,RP0 ;bank0
MOVLW B'11100000' ;INTCON beallitas
MOVWF INTCON ;csak a TIMER0 es a TIMER2 megszakitas kell
MOVLW B'00000111' ;TIMER2 engedelyezes es elooszto beallitasa
MOVWF T2CON
.
.
.

Üdv.: Emil

0

bubuc17
bubuc17 picture

Szia
Már az első 3 sornál elakadtam.

WTEMP NEM ISMEREM ÉS A PIC SZIMULÁTOR IDE SEM FOGADJA EL.

SWAPF STATUS,0 SWAPF UTASÍTÁST ISMEREM, DE NEM TUDOM MIÉRT KELL FELCSERÉLNI AZ ALSÓ FELSŐ BITEKET

MOVWF STATUSTEMP ITT ISMÉT A TEMP MIATT AKADTAM EL.

Többi nagyjából világos.
Este sikerült használnom egy sokkal rövidebb programmal a megszakítást.
A kérdésem még az volna hogy a megszakítás fölé írjam többi programrészletet? Pontosan még nem tudom hogy kell elrendezni.
Program futása közben hogy tudom elindítani az időzítést, hogy utána ugyanott folytatódjon a program?
Például: Befejeződött a felfűtés kezdődhet az időzítés, és utána folytatódjon a fűtés kezelése.
Goto parancsal megszakításhoz ugrani és a megszakítás program sor végén visszaugrani?

File csatolás: 

0

rainbow555
rainbow555 picture

Szia!

WTEMP és STATUSTEMP változók W és STATUS regiszterek mentéséhez, először definiálni kell őket. SWAPF azért kell, mert úgy nem változnak flagek.

TIMER2 engedélyezése (16F628):
MOVLW B'00000111' ;TIMER2 engedelyezes es elooszto beallitasa
MOVWF T2CON

Elrendezésre példa:

LIST P=16F628
#INCLUDE "P16F628.INC"
__CONFIG _INTRC_OSC_NOCLKOUT & _CP_OFF & _WDT_OFF & _MCLRE_OFF & _LVP_OFF & _BODEN_ON & _PWRTE_ON
;watchdog timer OFF, code protection OFF
;belso 4MHz RC oszcillator, alacsony feszultsegu programozas OFF
;RA5/MCLR bemenet beallitasa, brown-out detection ON
;POWER-UP TIMER ON

;--- Port Bitek ---
#DEFINE OUT PORTB,0 ;vezerles kimenet
#DEFINE P10 PORTB,3 ;10 perc vezerles
#DEFINE P1 PORTB,4 ;1 perc vezerles
#DEFINE SEG_G PORTB,5 ;G
#DEFINE SEG_F PORTB,6 ;F
#DEFINE SEG_E PORTB,7 ;E

CBLOCK 0x20 ;memoria lefoglalas
TEMP
WTEMP ;WREG temp
STATUSTEMP ;STATUS temp
.
.
.
.
ENDC

ORG 0
GOTO START
NOP
NOP
NOP
GOTO MEGSZAKITAS

;--- megszakitas kezeles ---
MEGSZAKITAS
.
.
.
RETFIE
;--- megszakitas kezeles vege ---

START ;portok, idozitok stb. beallitasa
.
.
.
.

;--- foprogram ---
MAIN
.
.
.
GOTO MAIN
.
.
.
.
END

0

ty
ty picture

A megszakítás (interrupt) rutinnak egy adott címre kell kerülnie, ezt gondolom az ORG direktívával lehet definiálni.

Megtisztelhetnél minket azzal, hogy megírod a processzor típusát, ezt nem én vagyok az első aki kérdezte.

0

bubuc17
bubuc17 picture

Interput jó kis olvasnivaló hétvégére.
16f84 el gyakoroltam, de 16f887 amit kinéztem a feladatra.
Jó áron van, és még a későbbi fejlesztések is elférnek.

0

rainbow555
rainbow555 picture

Szia!

Régen írtam egy voltmérő programot, abból ollóztam az analóg port használatát (16F73):

config:
BSF STATUS,RP0 ;bank1
MOVLW B'00000101' ;RA0-RA1 analog bemenet, RA3 Vref
MOVWF ADCON1
MOVLW P_A_CFG ;PORTA beallitas
MOVWF TRISA
MOVLW P_B_CFG ;PORTB beallitas
MOVWF TRISB
MOVLW P_C_CFG ;PORTC beallitas
MOVWF TRISC
MOVLW B'11000010' ;timer0 1:8 elooszto, PORTB felhuzo ellenallasok off
MOVWF OPTION_REG ;1:8 eloosztonal digitenkent 122Hz a frissites
BCF STATUS,RP0 ;bank0
MOVLW B'01000001' ;A/D bekapcsolva, AN0 bemenet kivalasztva, A/D clk=Fosc/8
MOVWF ADCON0

;--- A/D atalakitas ---
AD_CONV
CALL WAIT_50US ;50uS kesleltetes mintavetelezeshez
BSF ADCON0,GO_DONE ;elinditjuk az atalakitast
BTFSC ADCON0,GO_DONE ;megvarjuk a konverzio veget
GOTO $-1
MOVFW ADRES
MOVWF BIN ;itt az eredmeny
RETURN
;--- A/D atalakitas vege ---

A timerek használata is elég egyszerű, az adatlapokban minden szükséges információ bent van. Konkrétan mire lennél kíváncsi?

Üdv.: Emil

Hogy tudok kódot bemásolni, hogy a tabulátorok megmaradjanak?

0

bubuc17
bubuc17 picture

Köszönöm.
Ez elég érthető program+leírás
Most nem keverem a timerekkel, de amit sikerült a timereket használnom folytatom az analóg por.

0

Jaca
Jaca picture
****

Szia bubuc17!

Kérlek, írd le pontosan, minél részletesebben a megoldandó feladatot, hogy ne csak vaktában adjunk olyan tanácsokat, amik amúgy is fellelhetők a neten.

Üdv: Jácint

0

bubuc17
bubuc17 picture

Szia
Egy füstölő berendezés vezérlése.
Bekapcsolásnál elindul egy ventilátor és közben megvárja a felfűtést.
Miután felfűtött kb 10 percenként kb 1 másodperc adagolómotor, 2 másodperc eloszlató motor.
Fűtés állíthatósága 150fok és 300fok körül, az időzítéseket is lehessen állítani. (állítások potméter vagy kb 6 állású kapcsoló )
Fűtőbetét megszakadása esetén tartalékra kapcsolás.
Ez lenne a lényeg.
Későbbiekben 7-szegmenses kijelzőt is tervezek de elsőre kijelzés nélkül is tökéletes.
Utána már ráérek fejlesztgetni ahogy haladok a tanulással.

0

ty
ty picture

Esetleg még azt írd le, hogy meddig jutottál, mivel akadtál el, interruptot akarsz-e (kell-e) használni.

Ebben a kérdésben legfeljebb elméleti tanácsot adhatok, (C kód gondolom nem segít ki), de többen vannak akik assemblyben is otthon vannak.

0

bubuc17
bubuc17 picture

Interruptot még nem használtam és azt sem tudom hogy szükségem van e rá.

Ameddig eljutottam: Futófény, kis időzített programok.
Bankváltások, porta, trisa ezekkel nincs gond.

Elakadások: Adatlapon érhetően le van írva mi micsoda, de ezeket nem tudom milyen formátumban, sorrendben kéne program elején beállítani.
Minden mintaprogram máshogy adja meg.
Timereket,analóg portokat végigtanulmányoztam tudom mi micsoda de programban leírni nem sikerült.
Szerintem csak egyszer kéne leírni elmagyarázva a program legelejétől és meg is érteném az egészet.

0

ty
ty picture

"Elakadások: Adatlapon érhetően le van írva mi micsoda, de ezeket nem tudom milyen formátumban, sorrendben kéne program elején beállítani."

Ezt kéne részletezned, hogy egy kérdés legyen belőle amire válaszolni tudok/tudunk.

Nem ártana tudnunk a processzorod típusát és az órajelet amiről működik.
Esetleg még azt, hogy melyik timerét nézted ki (tmr0/tmr1/tmr2/...)

de mielőtt leírnám amit már ezren leírtak javaslom olvasd el
ezekből
ezekből
és kérdezz ami nem világos

0

Sponsored links