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.

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

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 ]