PWM on PIC16F88


Closed Thread
Results 1 to 37 of 37

Thread: PWM on PIC16F88

Hybrid View

  1. #1


    Did you find this post helpful? Yes | No

    Default

    Hi Steve. I copied your code exactly and it still outputs only on RB0. I suspect my programmer and/or software is the problem. There is an option "CCP1 on RB3" that works on the 16F818 but the option is "grayed out" when I program the 16F88. I guess it will not allow the use of RB3. I think it's time to get the latest hardware/software from Microchip. Thank you for your help.

  2. #2


    Did you find this post helpful? Yes | No

    Default

    That was it. My software was forcing CCP1 onto RB0, while MPLAB software shows "CCP1 ON RB3". Thanks Everybody.

  3. #3


    Did you find this post helpful? Yes | No

    Default

    peterdeco1,

    What programmer software and hardware are you using that causes the problem? We would all like to know. We want to avoid running in to the same difficulties.
    Last edited by Dick Ivers; - 21st January 2006 at 19:28.

  4. #4
    Join Date
    Nov 2007
    Posts
    7


    Did you find this post helpful? Yes | No

    Question pic16f88 assembly pwm

    hi guys can any one help with assembly code for dimming an led using the pic16f88. ihave read the datasheet but i dont seem to underatand it i have come with code but it doesnt work can anybody tell me whats wrong with my code.


    list p=16f88
    INCLUDE "p16f88.inc"


    _;****Set up the Constants****

    STATUS equ 03h
    TRISA equ 85h ;Address of the STATUS register
    TRISB equ 86h
    PORTA equ 05h ;Address of the tristate register for port A
    PORTB equ 06h ;Address of Port A
    COUNT1 equ 20h ;First counter for our delay loops
    COUNT2 equ 21h ;Second counter for our delay loops
    ANSEL equ 9Bh
    OSCCON equ 8Fh
    CCP1CON equ 17h
    T2CON equ 12h
    TMR2 equ 11h
    CCPR1L equ 15h
    PR2 equ 92h
    PIR1 equ 0Ch
    PIE1 equ 8Ch


    movlw B'00000000' ; 31.25khz
    bsf STATUS, 5
    movwf OSCCON
    nop
    nop
    nop
    bcf STATUS, 5
    movlw b'00111100'
    movwf CCP1CON

    bsf 03h,5 ;Go to Bank 1
    movlw 00h ;Put 00000 into W
    movwf TRISA ;Move 00000 onto TRISA – all pins set to output

    movlw 00h ;Set the Port B pins
    movwf TRISB ;to output. ;Put 00000 into W

    movlw 00h
    movwf ANSEL ;Move 00000 onto TRISA – all pins set to output

    movlw b'11111111'
    movwf PR2

    bcf 03h,5 ;Come back to Bank 0
    movlw b'00001111'
    movwf TMR2



    Start
    movlw b'00001111'
    movwf CCPR1L ; set duty cycle
    Loop1
    decfsz CCPR1L ;dimming led by varying the duty cycle
    goto Loop1
    goto Start
    end

  5. #5
    Join Date
    Sep 2004
    Location
    montreal, canada
    Posts
    6,898


    Did you find this post helpful? Yes | No

    Default

    I'll bet at least on the configuration fuses settings... AND... is there any specific reason why you want to run your PIC @ 32KHz?

    i didn't did the calc, but i feel your current setting doesn't work anyways...

    try the following
    Code:
            list p=16f88
            INCLUDE "p16f88.inc"
    
            ;       Program Configuration Register 1
            __CONFIG    _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF & _PWRTE_OFF & _WDT_OFF & _INTRC_IO
            
            ;       Program Configuration Register 2
            __CONFIG    _CONFIG2, _IESO_OFF & _FCMEN_OFF
    
            errorlevel -302         ; disable ' ensure .. bank pouet pouet' warning message
    
            BANKSEL OSCCON
            MOVLW   B'01100000'
            MOVWF   OSCCON          ; 4 MHz INT CLOCK MODE
            BTFSS   OSCCON,IOFS     ; wait 'till int osc is stable 
            GOTO    $-1
            
            BANKSEL PORTB           
            CLRF PORTB              ; Clear all 
            CLRF PORTA              ; outputs
            
            BANKSEL TRISA
            CLRF TRISA              ; all pins set to output
            CLRF TRISB              ;
    
            BANKSEL ANSEL
            CLRF ANSEL              ; Disable all ADCs
            
                    ;
                    ;       PWM Setup
                    ;       ---------
            BANKSEL PR2
            movlw .249              ; ~250Hz PWM FREQUENCY
            movwf PR2
    
            BANKSEL T2CON
            movlw b'00000111'       ; prescaler 1:16, Timer2=on
            movwf T2CON
    
            BANKSEL CCP1CON
            movlw b'00001100'       ; pwm mode
            movwf CCP1CON
    
    Start
            BANKSEL CCPR1L
            movlw .250
            movwf CCPR1L            ; set duty cycle to ~max, 100%
            
    Loop1   ;   ((10+bananas) *250) uSec delay loop
            ;   to provide slower fading effect
            goto $+1    
            goto $+1        
            goto $+1
            goto $+1
            goto $+1
            DECFSZ  W,F
            GOTO    Loop1
           
            decfsz CCPR1L,F         ; dimming led by varying the duty cycle
            goto Loop1
            goto Start
            end
    Sorry, ASM is really not my cup of tea So i'll not be surprised if some comes with a better solution, or with some constructive comments on the above (apart that i should care a little bit more about the bank switching... i feel there's a few useless BANKSEL here and there... that's what happen when you're lazy )

    <hr>
    Please, next time, try to not double, triple post the same question on various forum section.
    Last edited by mister_e; - 12th November 2007 at 23:52.
    Steve

    It's not a bug, it's a random feature.
    There's no problem, only learning opportunities.

  6. #6
    Join Date
    Nov 2007
    Posts
    7


    Did you find this post helpful? Yes | No

    Talking it works

    hey thanks alot ,it works. i have just tested it.can you please tell me what $+1 means so that i can change the code to control a motor.if you can send me sample assembly code on how to use the analogue to digital converter on the pic16f88. code that can display a binary values on leds of a varying voltage signal. your help would be highly appreciated

  7. #7
    Join Date
    Sep 2004
    Location
    montreal, canada
    Posts
    6,898


    Did you find this post helpful? Yes | No

    Default

    $+1 mean 'from here to the next instruction' this avoid to use labels. The GOTO $+1 just jump to the next instruction. a single goto use 2 instruction cycle.

    $-1 jump to the previous instruction.

    You can also change the 1 to whatever else amount of line... but this could make your code harder to read.
    <hr>
    i'll look at that later today for the other code.

    Hey! you're such a lucky guy to have ASM support on a PICBASIC forum.
    Steve

    It's not a bug, it's a random feature.
    There's no problem, only learning opportunities.

Similar Threads

  1. Half-bridge PWM with a 16F684 ?
    By Byte_Butcher in forum General
    Replies: 7
    Last Post: - 17th January 2010, 22:18
  2. Variable PWM PIC18F2431
    By trr1985 in forum mel PIC BASIC Pro
    Replies: 7
    Last Post: - 12th June 2009, 06:03
  3. PWM setting PIC16F887
    By Gevo in forum mel PIC BASIC Pro
    Replies: 6
    Last Post: - 12th June 2008, 07:24
  4. Replies: 8
    Last Post: - 7th December 2006, 15:42
  5. Tidying Up PWM Routine
    By Tissy in forum mel PIC BASIC Pro
    Replies: 4
    Last Post: - 21st February 2005, 00:26

Members who have read this thread : 0

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts