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.
elmowww
PA0EJE - www.eje-electronics.nl - e.jongerius[aapje]eje-electronics.nl - EJE Electronics - Elektronica/firmware ontwikkeling
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)
CCPR3L wijgert een waarde aan te nemen. (cursor staat op naam rechts)
[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.