Podprogram za PIC

Rasprava o PIC mikrokontrolerima, PIC projekti i drugo vezano za PIC-eve...

Moderators: pedja089, stojke369, [eDo], trax

Post Reply
User avatar
dejanmaksa
Napredujem
Napredujem
Posts: 159
Joined: 28-10-2008, 22:15
Location: Velika Plana

Podprogram za PIC

Post by dejanmaksa »

Interesuje me da li je moguce da PIC radi dve operacije nezavisno jedna od druge.
Naime, ako napisem neki program u MicroCode studiju i treba da se odvija odvojeno tj. nezavisno jedan od drugog kako bih to mogao napraviti. Treba mi kao da imam dva programa u jednom.
User avatar
dejanmaksa
Napredujem
Napredujem
Posts: 159
Joined: 28-10-2008, 22:15
Location: Velika Plana

Re: Podprogram za PIC

Post by dejanmaksa »

Na ovako nesto sam mislio.
Da li ovako moze?
treba mi da prikazuje brojeve necekajuci tu 1 sekundu koliko traje brojanje na pinu senzor.


brojenje:
count senzor,1000,broj1
BROJ=BROJ1*60
brojac1=broj dig 3
brojac2=broj dig 2
brojac3=broj dig 1
brojac4=broj dig 0
gosub blinkanje

BLINKANJE:
FOR I=1 TO 50
portb=bROJAC1
high portb.4
pause 100
low portb.4
pause 100
portb=bROJAC2
high portb.5
pause 100
low portb.5
pause 100
portb=bROJAC3
high portb.6
pause 100
low portb.6
pause 100
portb=bROJAC4
high portb.7
pause 100
low portb.7
pause 100
NEXT I
return

end
User avatar
WhiteHead
Pravi forumaš
Pravi forumaš
Posts: 1627
Joined: 28-06-2007, 18:36
Location: 75,35k; B&H

Re: Podprogram za PIC

Post by WhiteHead »

Mislim da bi u ovom tvom primjeru PIC samo jednom izvrsio brojanje pa bi onda uletio u beskonacnu petlju sa prikazom vrijednosti (labela blinkanje).
A sa onim primjerom iz kursa to bi se odradjivalo tako da bi samo prvu sekundu po startanju imao prazan displej a kasnije pri ponovnom brojanju (count) na displeyu bi tu sekundu imao poslednju prikazanu vrijednost. Znaci nekako ovako:
Brojenje:
x
x
x
goto blinkanje
end
Blinkanje:
x
x
x
goto brojenje

Nadam se da sam pomogao
Ako kaniš pobijediti, ne smiješ izgubiti
User avatar
dejanmaksa
Napredujem
Napredujem
Posts: 159
Joined: 28-10-2008, 22:15
Location: Velika Plana

Re: Podprogram za PIC

Post by dejanmaksa »

Mislim da ne mogu na kraj prve labele da stavim end onda mi se tu zakoci i ne mrda dalje.
Problem ne bi bio ako bih koristio lcd ali koristim 7-seg displeje u multipleks modu pa zbog one labele blinkanje moram da imam tu labelu konstanto jer dok cekam tu jednu sekundu displeji su mi pogaseni.
Ne mogu da prevazidjem taj problem.
User avatar
WhiteHead
Pravi forumaš
Pravi forumaš
Posts: 1627
Joined: 28-06-2007, 18:36
Location: 75,35k; B&H

Re: Podprogram za PIC

Post by WhiteHead »

Prije tog end-a imas goto,
u stvari nisam bas siguran moze umjesto end-a i goto brojenje
a u labeli blinkanje promijeni kod .........
a mozda i nemoze (multiplex) , vjerovatno to i nemoze tako kao sto sam u prvi mah mislio posto se radi o multipleksiranju,
mozda neko drugi ima neku bolju ideju..
Ako kaniš pobijediti, ne smiješ izgubiti
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7874
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: Podprogram za PIC

Post by pedja089 »

da se to resiti ali je komplikovano...
pic ima jedan procesor tako da ne postoji mogucnost paralelnog izvrsavanja programa...
ono sto se moze uraditi je da se istovremeno broje impulsi i prikaz na displeju, ali je to malo komplikovano i nezgodno...
User avatar
dejanmaksa
Napredujem
Napredujem
Posts: 159
Joined: 28-10-2008, 22:15
Location: Velika Plana

Re: Podprogram za PIC

Post by dejanmaksa »

Najverovatnije cu iskoristiti LCD posto na njemu mogu to da uradim, a ujedno cu da ubacim i merenje temperature ili da uzmem neki PIC sa vise pinova pa da ne koristim multipleksiranje.
micromatic
Penjem se :)
Penjem se :)
Posts: 58
Joined: 23-02-2005, 14:13
Location: Hrvatska - Cakovec
Contact:

Re: Podprogram za PIC

Post by micromatic »

Ovakve probleme u pravilu rješava korištenje interupta - timera - countera. Pošto s PIC kontrolerima nisam baš na ti kao s 8051 serijom kontrolera opisati ću samo konceptualno riješenje. Iz navedenog sam zaključio da se radi o nekakvom multipleksiranom displeju koji pokazuje stanje brojača (s znamenkama 1 do 4) na portu b i to niži nibl je znamenka a gornji bitovi su segmenti.
broj=vrijednost koju želiš prikazati na displeju (0...9999) i definirana je u glavnoj beskonačnoj petlji programa
znamenka=jedna znamenka broja1
segment= segment 1...4


;1. treba podesiti nekakav timer na izvršavanje svakih npr. 10ms (ovo je trajanje svjetljenja jednog
;segmenta i ovisno o tom vremenu i broju segmenata može se vidjeti treperenje ili ne)

main:
;glavna petlja programa koja definira vrijednost broj1
...
goto main

timer:
broj=broj1*60 ;ovoj je tvoj dio računice koji sam prepisao
portb=0 ;isključi sve
segment=segment+1 ;novi segment

if segment=1 then ;za jedinice
znamenka=broj dig 0
portb=znamenka ;postavi donji nibl
high portb.7 ;"1" na PB7 uključuje segment jedinica
end if

if segment=2 then ;za desetice
znamenka=broj dig 2
portb=znamenka ;postavi donji nibl
high portb.6 ;"1" na PB6 uključuje segment desetica
end if

if segment=3 then ;za stotice
znamenka=broj dig 3
portb=znamenka ;postavi donji nibl
high portb.5 ;"1" na PB5 uključuje segment stotica
end if

if segment>3 then ;za tisučicice ili bilo što drugo
znamenka=broj dig 4
portb=znamenka ;postavi donji nibl
high portb.4 ;"1" na PB4 uključuje segment tisučica
segment =0 ;ispočetka
end if
return


Kod ispred nemožeš doslovno prepisati i ovisan je o programu koji koristiš. Navedeno je samo nekakav BASIC okvir za riješenje problema. Nadam se da če PIC korisnici dopuniti ovo s potrebnim djelovima koda (definiranje timer interupta ...). Interupt dio se umjesto s if..then da bolje riješiti matematikom i logikom ali trebao bi bolje poznavati korišteni BASIC.
__________________
http://www.micromatic.hr
__________________
User avatar
dejanmaksa
Napredujem
Napredujem
Posts: 159
Joined: 28-10-2008, 22:15
Location: Velika Plana

Re: Podprogram za PIC

Post by dejanmaksa »

Iskopao sam na netu jednu schemu sa PIS16F84A sa 7-seg pokazivacem u multiplex modu i lepo radi.(probao sam u proteusu.)
Attachments
TACHO_84(2).rar
(27.93 KiB) Downloaded 151 times
User avatar
dejanmaksa
Napredujem
Napredujem
Posts: 159
Joined: 28-10-2008, 22:15
Location: Velika Plana

Re: Podprogram za PIC

Post by dejanmaksa »

Evo i ASM .

Code: Select all

        LIST    P=16C84,R=HEX
;
;       TACHOMETER FOR R/C MODEL ENGINE
;       SUN, PU-NENG
;       MAY/02/2004
;
;     	
;	VERSION 1.2: (09/12/2004)	;CALIBRATE ACCURACY
;	VERSION 1.1: (MAY/02/2004)
;       VERSION 1.0: (NOV/16/2002)
;       
;       
;       DEFINE RAM
;-----  SYSTEM  ---------
	__CONFIG	H'3FF1' 
TMR0	EQU 1		;TIMER 0
PC      EQU 2           ;PROGRAM COUNTER
STATUS  EQU 3
FSR     EQU 4           ;BUFFER OF INDIRECT ADDR
RA      EQU 5
RB      EQU 6
EEDATA  EQU 8           ;EEPROM DATA
EEADR   EQU 9           ;EEPROM ADDR
PCLATH  EQU H'A'
INTCON  EQU H'B'        ;INTERRUPT CONTROL
OPTIONF EQU 1           ;0X81 
TRISA   EQU 5           ;0X85
TRISB   EQU 6           ;0X86
EECON1  EQU 8           ;0X88 IS EEPROM CONTROL1
EECON2  EQU 9           ;0X89 IS EEPROM CONTROL2
;----  USER DEFINE  ------
TCNT0   EQU H'C'        ;= (0.6SEC /INT* PRESCAL*CLOCK)
INTR0   EQU H'D'        ;AFTER INT, SAVE W VALUE 
INTR1   EQU H'E'        ;AFTER INT, SAVE STATUS 
DD1     EQU H'F'        ;DATA FOR INPUT RPM
DD2	EQU H'10'
DD3     EQU H'11'
DS1     EQU H'12'       ;DTAT FOR DISPLAY
DS2     EQU H'13'
DS3     EQU H'14'
;
;
;	DEINE VARIABLES
;
TMR     EQU H'B5'       ;(PRESCALE 64*1uS) * 75 = 4800 uS
TCNT    EQU H'7D'       ;(256-125),4.8mS*125=600mS
;
;       DEFINE BIT
;
W       EQU 0           ;d VALUE FOR INCF......
F       EQU 1           ;d VALUE
OFF     EQU 0           ;FLAG BIT 0,
RP0     EQU 5           ;STATUS BIT 5 & 6 =REGISTER BANK SELECT
RP1     EQU 6          
INPUT   EQU 7           ;RB7 AS INPUT PORT
TOIF    EQU 2           ;INTCON TMR0 OVERLOW INT FLAG
TOIE    EQU 5           ;INTCON TOIF ENABLE
GIE     EQU 7           ;INTCON GLOBAL INT ENABLE
;
;
;==========   MAIN PROGRAM   =========
;
;
        ORG     0
        GOTO    START
;
;----------------------------------------	
;
	ORG	4		;INTERRUPT BEGIN
INTB    MOVWF   INTR0           ; SAVE W 
        MOVF    STATUS,W        ; SAVE STATUS
        MOVWF   INTR1
        BCF     STATUS,RP0      ; MAKE SURE SELECT BANK0
        MOVLW   TMR             ; RESTORE TIMER0
        MOVWF   TMR0            ; 
        DECFSZ  TCNT0,F         ;SKIP IF ZERO
        GOTO    SWEEP
RELOAD  MOVLW   TCNT            ;RELOAD TCNT0
        MOVWF   TCNT0
        MOVF    DD3,W           ;MOVE COUNTER DATA TO DISPLAY
        MOVWF   DS3
        MOVF    DD2,W
        MOVWF   DS2
        MOVF    DD1,W
        MOVWF   DS1
        CLRF    DD1
        CLRF    DD2
        CLRF    DD3
;---------------------------------------------------
SWEEP   MOVLW   H'FF'
        MOVWF   RB              ;OFF ALL DIGITALS  
        BTFSS   RA,1            ;IS RA1 LIGHT ON?
        GOTO    RA1             ;IF YES GOTO RA1
        BTFSS   RA,2
        GOTO    RA2
RA3     BSF     RA,3            ;RA,1 & 2 ARE OFF, MUST BE RA,3
        BCF     RA,2            ;NEXT TIME SHOULD BE RA,2
        MOVF    DS2,W
        CALL    TABLE           ;HEX TO BCD CODE
        GOTO    DISP            ;PISPLAY DS3
RA2     BSF     RA,2
        BCF     RA,1            ;NEXT TIME SHOULD BE RA,1
        MOVF    DS1,W
        CALL    TABLE
        GOTO    DISP
RA1     BSF     RA,1
        BCF     RA,3            ;NEXT TIME SHOULD BE RA,3
        MOVF    DS3,W
        CALL    TABLE
DISP    MOVWF   RB
;-------------------------------------
INTE    MOVF    INTR1,W         ; RESTORE STATUS
        MOVWF   STATUS
        MOVF    INTR0,W         ; RESTORE W
        BCF     INTCON,TOIF     ; RESET FLAG OF INT T0
        RETFIE
;   
;
;-------------------------------------------------     
;
TABLE   ADDWF PC,F      ; REMEBER PCH=00000B
        RETLW H'C0'     ; 0
        RETLW H'F9'     ; 1
        RETLW H'A4'     ; 2
        RETLW H'B0'     ; 3
        RETLW H'99'     ; 4
        RETLW H'92'     ; 5
        RETLW H'82'     ; 6
        RETLW H'F8'     ; 7
        RETLW H'80'     ; 8
        RETLW H'90'     ; 9
;
;
;=======================================
;---------- PROGRAM BEGIN -----------
;----------------------------------------
;
START   BSF     STATUS,RP0      ;SET 3,5 ENABLE BANK1
        MOVLW 	H'80'
        MOVWF 	TRISB		;SET PORTB 0-6 OUTPUT, 7 INPUT 
        MOVLW 	0
        MOVWF 	TRISA     	;SET RA0-RA4 TO BE OUTPUT
        MOVLW 	B'10000101'
        MOVWF   OPTIONF         ;INTERNAT CLOCK,TRM0,1:64
        BCF     STATUS,RP0      ;ENABLE BANK0
        MOVLW   H'F7'
        MOVWF   RA              ;RA,3=0, OTHERS=1  
	MOVLW 	H'7F'
	MOVWF	RB		;SET DISPLAY 000	
        CLRF    DD1             ;DISPLAY DATA
        CLRF    DD2
        CLRF    DD3
        MOVLW   TMR             ;75
	MOVWF	TMR0
	MOVLW	TCNT		;128
	MOVWF	TCNT0
	BCF	INTCON,TOIF
	BSF	INTCON,TOIE
	BSF	INTCON,GIE	;ENABLE INT
;----------
        MOVLW   1
        MOVWF   DS1
        MOVLW   2
        MOVWF   DS2
        MOVLW   3
        MOVWF   DS3
        
;----------------------------------
MAIN1   BTFSC   RB,7            ;IF INPUT=0, SKIP
	GOTO	MAIN1
MAIN2	BTFSS	RB,7		;IF INPUT=1, SKIP	 
	GOTO MAIN2
MAIN3   INCF    DD3,F
	MOVLW	H'0A'
        SUBWF   DD3,W
        SKPZ                    ;DIGITAL 1 =A, MUST AJUST
        GOTO    MAIN1
        CLRF    DD3
        INCF    DD2,F
	MOVLW	H'0A'
        SUBWF   DD2,W
        SKPZ                    ;DIGITAL 1 =A, MUST AJUST
        GOTO    MAIN1
        CLRF    DD2
        INCF    DD1,F           ;DIGITAL 3 WILL NOT >9, SO NO CHECK
        GOTO    MAIN1
        END
;==============================================
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7874
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: Podprogram za PIC

Post by pedja089 »

@dejanmaksa hajde pogledaj PM, imas poruku vise od mesec dana koju nisi procitao
User avatar
dejanmaksa
Napredujem
Napredujem
Posts: 159
Joined: 28-10-2008, 22:15
Location: Velika Plana

Re: Podprogram za PIC

Post by dejanmaksa »

Nisam obracao paznju. Vazi za na dalje.
Post Reply