PWM on PIC16F88


Closed Thread
Results 1 to 37 of 37

Thread: PWM on PIC16F88

Hybrid View

  1. #1
    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.

  2. #2
    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

  3. #3
    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.

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


    Did you find this post helpful? Yes | No

    Default

    play with this one

    Code:
            ;       ---------------------------------------------------------------
            ;
            ;       Simple program which display ADC results of AN0
            ;       to 8 LED connected to PORTB<7:0>
            ;
            ;       Enjoy!
            ;       Steve AKA Mister_e
            ;
            ;       ---------------------------------------------------------------
            
            list p=16f88, W=-302
                            ; bank switching                   
                            
            INCLUDE "p16f88.inc"
    
            ;       Program Configuration Register 1
    CFG1 = _INTRC_IO & _MCLR_OFF & _BODEN_ON & _PWRTE_ON & _WDT_OFF & _LVP_OFF
    CFG2 = _DEBUG_OFF & _CP_OFF & _CCP1_RB0 & _WRT_PROTECT_OFF & _CPD_OFF
            __CONFIG    _CONFIG1,  CFG1 & CFG2
            
            ;       Program Configuration Register 2
            __CONFIG    _CONFIG2, _IESO_OFF & _FCMEN_OFF
    
            ORG 0  
                  
            BANKSEL OSCCON
            MOVLW   B'01100000'
            MOVWF   OSCCON          ; 4 MHz INT CLOCK MODE
            BTFSS   OSCCON,IOFS     ; wait 'till int osc is stable 
            GOTO    $-1
            
            BANKSEL TRISA
            MOVLW   .1
            MOVWF   TRISA           ; porta.0 as input, other to output
            CLRF    TRISB           ; all pins set to output
    
            MOVLW   .7
            MOVWF   CMCON           ; disable analog comparator
            
                    ;
                    ;       ADC setup
                    ;       ---------
            BANKSEL ANSEL
            MOVLW   .1
            MOVWF   ANSEL           ; Disable all ADCs but AN0
    
            CLRF    ADCON1          ; Left justified results
                                    ; ADCS2 : disabled
                                    ; Vref : Vdd, Vss
    
            BANKSEL ADCON0
            MOVLW   B'01000001'     
            MOVWF   ADCON0          ; ADCS : Fosc/8
                                    ; select AN0
                                    ; ADON = 1
            
                    ;
                    ;       Hardware initialisation
                    ;       -----------------------
            CLRF    PORTB           ; Clear all 
            CLRF    PORTA           ; outputs
                                    
            ;
            ;       Program Start
            ;       -------------                                
    Start
                    ;
                    ;       ADC Conversion
                    ;       --------------
            MOVLW   .12             ; ~12 uSec acquisition loop
            DECFSZ  W,F             ;
            GOTO    $-1             ;
            
            BSF     ADCON0, GO_DONE ; Start conversion
            BTFSC   ADCON0, GO_DONE ; conversion finished?
            GOTO    $-1             ;   NO, wait again
            
                    ;
                    ;       Display result
                    ;       --------------
            MOVF    ADRESH,W        ; Move ADC result to Wreg
            MOVWF   PORTB           ; display it on PORTB
            GOTO    Start
            END
    Steve

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

  5. #5
    Join Date
    Nov 2007
    Posts
    7


    Did you find this post helpful? Yes | No

    Talking thanks alot.

    hi ya am surely one lucky guy.i know i might me asking for alot but can u please send the schematic for the adc code. by the way am called gonza, am from uganda in eastafrica.its like am one of the very few people in my part of the world dealing with microcontrollers.its really cool stuff i must say...... thanks alot for the support i appreciate it.

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


    Did you find this post helpful? Yes | No

    Default

    There's no real difficulties here, LED cathode goes to GND, anode goes to a resistor (200-300 ohm) lead, and the other resistor lead goes to the PIC PORTB pins. repeat it 8 times.

    pot ( <10K ) wiper goes to the AN0 pin (PORTA.0), one pot side on gnd, the other to Vdd.

    Not much!
    Steve

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

  7. #7
    Join Date
    Nov 2007
    Posts
    7


    Did you find this post helpful? Yes | No

    Default thanks

    okay mate am going to try that.

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