Ik heb een heel gek probleem. In mijn simulatie werkt het schrijven naar CCPR3L niet. Als ik dan de 3 vervang voor 2 of 1 dan werkt het wel. Ik heb natuurlijk ook banksel CCPR3L goed staan. Ik heb echt geen ideeen meer waarom CCP3 niet werkt en de andere 2 wel. Ook kan ik handmatig via FileRegister dit register niet aanpassen, hij springt dan terug naar 00000000.

Ik heb verder PORTB wel als het goed is in digitale output gezet door 00001111 in ADCON1 te schrijven.

Wie weet er wat ik fout doe of vergeet.

Weet je zeker dat je de datasheet goed bekeken hebt?

Dit heb ik ooit gebruikt, werkend:


showcolor:
   CCP1CON.4 = redp.0 
   CCP1CON.5 = redp.1 
   CCPR1L = redp >> 2

   CCP2CON.4 = grnp.0 
   CCP2CON.5 = grnp.1 
   CCPR2L = grnp >> 2
   
   CCP3CON.4 = blup.0 
   CCP3CON.5 = blup.1 
   CCPR3L = blup >> 2
Return

init_pwm:
   TRISC.2     = 0            ' Enable PORTC.2 (CCP1) as output for PWM
   TRISC.1     = 0
   TRISB.5     = 0
   T2CON       = %00000110    ' Set the Prescaler for 1:4, and turn on TMR2 
   PR2         = 255      
   CCP1CON.2   = 1            ' Turn on PWM Module one, 
   CCP1CON.3   = 1            ' by setting bits 2 and 3 of CCP1CON 
   CCP2CON.2   = 1
   CCP2CON.3   = 1
   CCP3CON.2   = 1
   CCP3CON.3   = 1
Return

Om de een of andere reden werkt de simulator niet. In de praktijk werkt echter alles... gek... Zou er een fout in de simulator zitten ?

Dit is de code, er zitten 3 ledjes in RGB op de PWM uitgangen en een een knopje op RB0. Het is ter demonstratie van PWM. Het werkt mooi, maar in de simulator blijft CPPR3L 0x00. RB5 waar CCP3 op zit wordt in de simulator ook niet geset.

		PROCESSOR 16F767
		include <P16F767.inc>

		; Program configuration register, see blz 170 of datasheet PIC16F7X7
		__CONFIG 	_CONFIG1, _CP_OFF & _CCP2_RC1 & _DEBUG_OFF & _BOREN_0 & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _INTRC_IO
		__CONFIG	_CONFIG2, _BORSEN_0 & _IESO_OFF & _FCMEN_OFF 
		errorlevel -302		; - levert onderdrukking op van error 302

		ORG 	0x00
		goto 	system_init
		
system_init

		banksel	CMCON
		movlw	b'00000111'		; blz161
		movwf	CMCON
		
		movlw	b'00001111'		; A/D converters uit, blz153
		movwf	ADCON1		; set

		bsf		TRISB,0
	
		call	TBar_CCP_init
		

loop	
		banksel	PORTB
		btfss	PORTB,0
		goto 	uit

		movlw	b'00000001'		; rood
		movwf	CCPR1L
		banksel	CCPR2L
		movlw	b'00111111'		; geel
		movwf	CCPR2L
		banksel	CCPR3L
		movlw	b'00000011'		; blauw
		movwf	CCPR3L
		goto	loop
uit	
		movlw	b'00111111'		; rood
		movwf	CCPR1L
		banksel	CCPR2L
		movlw	b'00001111'		; geel
		movwf	CCPR2L
		banksel	CCPR3L
		movlw	b'00111111'		; blauw
		movwf	CCPR3L
		goto	loop

	

TBar_CCP_init
			; 1. Set the PWM period by writing to the PR2 register.
		banksel	PR2
		movlw	0x3F			; Set de PWM Timebase, TMR2 blz 86
		movwf	PR2				
			; 2. Set the PWM duty cycle
		banksel	CCPR1L
		clrf	CCPR1L			; Set dutycycle => 0
		movlw	b'11001111'		; LSB b5:b4 are also cleared	
		andwf	CCP1CON,F
		clrf	CCPR2L			; Set dutycycle => 0
		movlw	b'11001111'		; LSB b5:b4 are also cleared	
		andwf	CCP2CON,F
		banksel	CCPR3L
		clrf	CCPR3L			; Set dutycycle => 0
		movlw	b'11001111'		; LSB b5:b4 are also cleared	
		andwf	CCP3CON,F
			; 3. Make CCP1 pin an output
		bcf		TRISC,2			; CCP1
		bcf		TRISC,1			; CCP2
		bcf		TRISB,5			; CCP3
			; 4. Set the TMR2 Prescaler and enable timer
		banksel	T2CON
		clrf	T2CON			; Prescaler = 1, TMR2ON = 0
		bsf		T2CON, TMR2ON
			; 5. Configure the CCP1 module for PWM operation
		movlw	b'00001100'		; Enable PWM
		movwf	CCP1CON
		movlw	b'00001100'		; Enable PWM
		movwf	CCP2CON
		banksel	CCP3CON
		movlw	b'00001100'		; Enable PWM
		movwf	CCP3CON
		banksel	PORTA
		return
		
		END

TMR2=PR2, CCP1 en CCP2 setten hun uitgang, maar CCP3 niet. (PORTB,5 moet geset worden)
http://www.meldersnet.nl/~ruud/TMR2=PR2.JPG

CCPR3L wijgert een waarde aan te nemen. (cursor staat op naam rechts)
http://www.meldersnet.nl/~ruud/CPPR3L=0.JPG

[Bericht gewijzigd door roedie op ]

schopje... Ik zou het erg waarderen als iemand een kritische blik werpt op het gekke gedrag van de simulator hierboven. Als je het mij vraagt klopt het gewoonweg niet wat de simulator doet.