Fórum témák

» Több friss téma
Fórum » fordulatszámmérő R/C motorhoz PIC-el
Lapozás: OK   1 / 1
(#) Ksanyi hozzászólása Jún 4, 2008 /
 
Sziasztok!
Megépítettem egy fordulatszámmérőt,3 digit kijelzésű,
elvileg 99900 f/mint mér(az első 3 számjegyet írja ki.
Működött is rendesen,de átalakítás közben zárlatot csináltam,amit nem vettem észre és félig megedta magát a 16F84A. csináltam másik nyákot,beégettem egy másik PIC-et és nem műxik,az MPLAB lefordítja az asm-et,de elakad a program egy pontján(main2) és nem megy tovább.beillesztem ide az ASM-et és megkérnék egy hozzáértőt,hogy nézzen rá,lehet neki 2 perc,mig rájön mi a hiba,nekem 2 hét sem elég.

;
;
TMR0 EQU H'0001'
PC EQU H'0002'
STATUS EQU H'0003'
FSR EQU H'0004'
PORTA EQU H'0005'
PORTB EQU H'0006'
EEDATA EQU H'0008'
EEADR EQU H'0009'
PCLATH EQU H'000A'
INTCON EQU H'000B'

OPTION_REG EQU H'0081'
TRISA EQU H'0085'
TRISB EQU H'0086'
EECON1 EQU H'0088'
EECON2 EQU H'0089'
RB EQU H'0006'
RA EQU H'0005'
;---- 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 OPTION,F ;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
;==============================================
előre is kössz.Ja,még annyit,hogy az A port első 3 bitje a multiplex, a B port 0-6 bitje a szegmens, a B port 7 bitje a bemenet. A mért jel a bemenet előtt 2-vel osztva van (2 ágú légcsavar) .
(#) nemgyuri válasza Ksanyi hozzászólására (») Jún 4, 2008 /
 
Helló!
Egy picit belenéztem, de igy nem látok semmit sem, viszont, ha komoly a dolog emilben elküldhetem a saját változatomat.
PIC16F628-ra készült 2x16-os LCD-re és 1-255 jel/fordulat állitható be rajta. (nekem is 2 az alapbeállitás a szokásos légcsavar miatt.) Minimálisan mérhető fordulatszám 60/perc. (ha több a bemenőjel fordulatonként akkor kisebbet is lehet mérni)
emailom: gynemeshazi@vnet.hu
(#) kissi válasza Ksanyi hozzászólására (») Jún 4, 2008 / 4
 
Szia!

Ebben a sorban van szintaktikai hiba és így nem fordul le:
MOVWF OPTION,F ;INTERNAT CLOCK,TRM0,1:64

Helyesen:

MOVWF OPTION_REG ( A pontos vessző utáni rész csak megjegyzés, ha akarod akkor azt is beírhatod, de nem kell!).

Jó munkát!

Steve
(#) Ksanyi válasza kissi hozzászólására (») Jún 4, 2008 /
 
Köszi,kipróbáltam,ez valóban el van irva,főleg mert OPTION_REG-nek van deklarálva,de nem itt áll meg,ettől függetlenül tényleg ez is okozhat rossz működést.Bekapcsolás után kiír 123-at,utánna,ha jól műxik kialszik jel nélkül a kijelző,de ez nem alszik ki,marad a 123 a kijelzőn,innen nem lép tovább.
(#) kissi válasza Ksanyi hozzászólására (») Jún 5, 2008 /
 
Ha valamikor ment, akkor gondolom most is menni kellene... Ugyanazt a projektet égetted be, vagy megint be kellett gépelned? A konfigurációs bitek és a fordítási paraméterek jól lettek beállítva, mert szerintem ezt könnyebb eltéveszteni?!

Steve
(#) Ksanyi hozzászólása Jún 5, 2008 /
 
Hát ez-az!
Meg van az ASM és a HEX file is az eredeti tömörítve,inkább kicsomagoltam mégegyszer és az istennek sem megy,holott elsőre jó volt.Igaz,közben újra telepítettem a gépem,bár annak itt nem hiszem,hogy lenne jelentősége.
(#) tothz válasza nemgyuri hozzászólására (») Jún 7, 2008 /
 
Helló!
Érdekelne az általad készitett LCD-s fordulatmérő. Van egy bigfoot modellem (sebváltós), és épitenék hozzá egy fordulatmérőt. Sikerült szereznem ilyen PICet, el tudnád küldeni a kapcs rajzot, meg a programot?
Zoli (tothz26@yahoo.com)
(#) Ksanyi hozzászólása Jún 7, 2008 /
 
Mindenki okulására megírom a megoldást is.
Igazából jó az ASM és a HEX file is,jó volt a beégetés is.
Ami nem volt jó, az a labortápom, ami idáig hibátlanul működött,de ezt abbahagyta. Van a kimenetén feszültségtől függetlenül 40 mV szélessávú zaj és úgy látszik,hogy a PIC-nek ez bőven elég,hogy megbolonduljon.Akkura kapcsolva hibátlanul működik és másik tápról is!
Köszönöm a segítőkész hozzászólásokat,ezekből én is és ha mások olvasták azok is tanulhattak talán újat.
Következő: »»   1 / 1
Bejelentkezés

Belépés

Hirdetés
K�rlek v�rj...
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem