willyp
http://www.020it.nl - Industriële elektronica ontwikkeling. - http://www.procircuits.nl
Ik wilde even gauw een variable timer maken maar dit lukte mem helaas niet, de timer gaat wel langzamer zoals gewenst(door H'00') maar als ik op korter druk (h'01') dan gaat hij plots MEGA langzaam worden!!
Iemand enig idee?
PS blame me niet om me slordige indeling! Dacht dat ik het wel "even" 123 uitschreef (inmiddels al sinds 18u)
LIST P=16F84A
INCLUDE <P16F84A.INC>
VARIABLE1 EQU 0X0C
TIMER1 EQU 0X0D
TIMER2 EQU 0X0E
TIMER3 EQU 0X0F
VOLLETIMER EQU 0X01
ORG 0
BANKSEL TRISB
CLRF TRISB
MOVLW 0XFF
MOVWF TRISA
BANKSEL PORTB
CLRF PORTB
MOVLW D'50'
MOVWF VARIABLE1
GOTO START
;TIMER
DELAY
MOVF VARIABLE1,0
MOVWF TIMER1
HERVUL2 MOVLW 0X2F
MOVWF TIMER2
HERVUL1 MOVLW 0X0F
MOVWF TIMER3
LEGEN1 DECFSZ TIMER3,1
GOTO LEGEN1
LEGEN2 DECFSZ TIMER2,1
GOTO HERVUL1
DECFSZ TIMER1,1
GOTO HERVUL2
RETURN
;START
START
MOVLW B'00110100'
MOVWF PORTB
CALL BITSCANSENLEGEN
CALL DELAY
HH CLRF PORTB
CALL BITSCANSENLEGEN
CALL DELAY
GOTO START
TOEVOEGEN1 MOVF VARIABLE1,0
ADDLW D'1'
MOVWF VARIABLE1
RETURN
AFHALEN1 MOVF VARIABLE1,0
SUBLW D'1'
MOVWF VARIABLE1
RETURN
BITSCANSENLEGEN BTFSC PORTA,H'00'
GOTO TOEVOEGEN1
BTFSC PORTA,H'01'
GOTO AFHALEN1
RETURN
END
contact dender.
een druktoets maakt of verbreekt niet ineens maar de uitgang denderd tussen 1 en 0 dus 1x drukken is 100X tellen.
beter is om de actie uit te stellen
testknop
ingedrukt?
nee-------geen actie
Ja -------- 10mS pauze
nog ingedrukt?
Nee ------ einde
ja------- actie
end
hierdoor doet de controller niets tijdens de dender en is het dus wel 1x drukken 1x tellen.
Of een andere benadering, zonder contact dender:
Bepaal eerst met schakelaars in stand hoog of laag
wat de tijd gaat worden.
Druk dan op een maakknop en je pic 'kijkt' wat de schakelaars vertellen.
(niet direkt drukken anders heb je nog dender)
Dit kan je laten zien op een lcd of 7segments.
In het loopje dat volgt kan je dan om een bevestiging
vragen door nog een keer op die knop te drukken.
(tegenlijkertijd kan je een ledje aanlaten gaan dat
je verteld dat je keuze is bevestigd.)
Enzovoort.
LaStei
carpe cerevisi
Nog wat leuke dingen gevonden (even topic kapen):
in de simulator voor een timer 1 interrupt (Timer is 0x0000):
DECF TMR1H,F ;to reset for the next trigger
DECF TMR1L,F ;
BCF PIR1,TMR1IF
Werkt niet, je moet op zijn minst TMR1L terug laten tellen tot 0xFFFE, ander krijg je geen interupt.
Ook
CLRF STATUS
Doet't ook niet.
Einde topic kaping
willyp
http://www.020it.nl - Industriële elektronica ontwikkeling. - http://www.procircuits.nl
Zoals gezegd heb ik een delay ingevoert zodat hij kijkt wanneer de knop laag is pas weer verder te gaan.
Nu is het nog steeds opmerkelijk(voor mij dan) dat hij als je hem sneller wilt maken dat hij bij de 1x drukken juist langzamer gaat en na nóg een keer drukken weer evensnel gaat!
Sneller is h'01'
Langzamer is h'00'
Als ik op langzamer druk dan werkt dit maar 2 keer (vermoed ik!) want het verschil tussen 1x en 2x drukken is zeer nehil. Dit is de code
LIST P=16F84A
INCLUDE <P16F84A.INC>
;;;;; EQUALIVENT DEFINITIES;;;;;
VARIABLE1 EQU 0X0C
TIMER1 EQU 0X0D
TIMER2 EQU 0X0E
TIMER3 EQU 0X0F
VOLLETIMER EQU 0X01
ORG 0
;;;;;;;;;;;;;;INIT;;;;;;;;
BANKSEL TRISB
CLRF TRISB
MOVLW 0XFF
MOVWF TRISA
BANKSEL PORTB
CLRF PORTB
MOVLW D'50'
MOVWF VARIABLE1
;;;;END INIT;;;;;;;;;;;;;
GOTO START
;;;; DELAY TIMER ;;;;;
;;;; TIMER DUUR IN TE STELLEN DOOR VERANDEREN VAN GEHEUGENBNK VARIABLE1;;;
DELAY
MOVF VARIABLE1,0
MOVWF TIMER1
HERVUL2 MOVLW 0X2F
MOVWF TIMER2
HERVUL1 MOVLW 0X0F
MOVWF TIMER3
LEGEN1 DECFSZ TIMER3,1
GOTO LEGEN1
LEGEN2 DECFSZ TIMER2,1
GOTO HERVUL1
DECFSZ TIMER1,1
GOTO HERVUL2
RETURN
;;;;EINDE DELAY;;;;;
;START
START
MOVLW B'00110100'
MOVWF PORTB
CALL BITSCAN
CALL DELAY
CLRF PORTB
CALL BITSCAN
CALL DELAY
GOTO START
BITSCAN BTFSC PORTA,H'00'
GOTO TOEVOEGEN1
BTFSC PORTA,H'01'
GOTO AFHALEN1
RETURN
;;;Routine om van geheugenbank VARIABLE1 een waarde op te tellen
TOEVOEGEN1 MOVF VARIABLE1,0
ADDLW D'50'
MOVWF VARIABLE1
LOOP1 BTFSC PORTA,H'00'
GOTO LOOP1
RETURN
;;;Routine om van geheugenbank VARIABLE1 een waarde af te halen
AFHALEN1 MOVF VARIABLE1,0
SUBLW D'49'
MOVWF VARIABLE1
LOOP BTFSC PORTA,H'01'
GOTO LOOP
RETURN
END
\EDIT; iets overzichtelijker gemaakt de code
[Bericht gewijzigd door willyp op ]
willyp
http://www.020it.nl - Industriële elektronica ontwikkeling. - http://www.procircuits.nl