Trouble with PIC16F88 (chip hangs up)


Closed Thread
Results 1 to 3 of 3
  1. #1
    Join Date
    Jan 2009
    Posts
    17

    Default Trouble with PIC16F88 (chip hangs up)

    Hello, I´m new using the PBP.
    My programm shall be an PWM Controller for RGB LED.
    I´m using a PIC16F88.
    PortB is Digital Output (PWM 250Hz), PortA is Digital Input.
    Is there something special at this chip (register/ansel/cmcon..) to watch for?
    The MCLR is connected with 4k7 to VDD (Must this be? I would like to use this pin also as an high-active input)
    When I apply Power (Power Supply is good, 100n attached) it works some times correct. When I apply power next time, chip hangs up
    (outputs blinking undefined, chip is touch-sensitive). It seems as if any initialisation failes?? (no tris-setting?, but therefore I put already a pause 1000 in the beginning)
    Thanks in Advance
    (Sorry for my German-English)
    Best regards
    Norbert

    Code:
    REM Prozessordefinitionen und Register setzen
    define osc4
    osccon = $60
    
    @ DEVICE INTRC_OSC, lvp_off, wdt_off, MCLR_off
    
    cmcon = 7
    ansel=0
    
    pause 1000
    
    trisa=%11101111 
    REM RA4=Ausgang, alle anderen Eingang
    trisb=%00000000 
    REM RB=Ausgang
    
    disable
    
    ROTWERT var word
    GRUENWERT VAR WORD
    BLAUWERT VAR WORD
    SCHNELLZAEHL var word
    SCHNELLWERT VAR WORD
    SCHNELLWERTZAEHL VAR WORD
    TASTEEIN VAR BYTE
    ROT var word
    GRUEN var word
    BLAU var word
    
    LET SCHNELLWERT=30
    LET SCHNELLWERTZAEHL=0
    let SCHNELLZAEHL=1
    LET TASTEEIN=0
    let ROT=0
    let GRUEN=0
    LET BLAU=0
    
    REM Programmstart
    REM-----------------------------------------------------------------------------
    REM ANFANG SCHWELLER
    porta.4=1
    portb=%11111111
    
    SCHWELLER:
    REM Rote LED wird von dunkel nach hell gesteuert
    let ROT=0
    for ROTWERT = 40 to 4000 step 40 
        for SCHNELLZAEHL = 1 to SCHNELLWERT
            porta.4=1
            portb.2=1
            portb.5=1
            gosub TASTE
            if tasteein=3 then let ROT=ROTWERT
            IF TASTEEIN>=1 then GOTO TASTENWERK
            pauseus 4000-ROTWERT
            porta.4=0
            portb.2=0
            portb.5=0
            pauseus ROTWERT
        next SCHNELLZAEHL
    next ROTWERT
    let rot=4000   
     
    REM Gruene LED wird von dunkel nach hell gesteuert
    let GRUEN=0
    for GRUENWERT = 40 to 4000 step 40 
        for SCHNELLZAEHL = 1 to SCHNELLWERT
            portb.1=1
            portb.4=1
            portb.7=1
            gosub TASTE
            if tasteein=3 then let gruen=gruenwert
            IF TASTEEIN>=1 then GOTO TASTENWERK
            pauseus 4000-GRUENWERT
            portb.1=0
            portb.4=0
            portb.7=0
            pauseus GRUENWERT
        next SCHNELLZAEHL
    next GRUENWERT 
    LET gruen=4000
    
    REM Blaue LED wird von dunkel nach hell gesteuert
    let blau=0
    for BLAUWERT = 40 to 4000 step 40 
        for SCHNELLZAEHL = 1 to SCHNELLWERT
            portb.0=1
            portb.3=1
            portb.6=1
            gosub TASTE
            if tasteein=3 then let blau=blauwert
            IF TASTEEIN>=1 then GOTO TASTENWERK
            pauseus 4000-BLAUWERT
            portb.0=0
            portb.3=0
            portb.6=0
            pauseus BLAUWERT
        next SCHNELLZAEHL
    next BLAUWERT
    let blau=4000 
    
    REM Gruene LED wird von hell nach dunkel gesteuert
    let gruen=4000
    for GRUENWERT = 4000 to 200 step -40 
        for SCHNELLZAEHL = 1 to SCHNELLWERT
            portb.1=0
            portb.4=0
            portb.7=0
            pauseus GRUENWERT
            portb.1=1
            portb.4=1
            portb.7=1
            gosub TASTE
            if tasteein=3 then let gruen=gruenwert
            IF TASTEEIN>=1 then GOTO TASTENWERK
            pauseus 4000-GRUENWERT
        next SCHNELLZAEHL
    next GRUENWERT
    LET gruen=0
    
    REM Rote LED wird von hell nach dunkel gesteuert
    let rot=4000
    for ROTWERT = 4000 to 200 step -40 
        for SCHNELLZAEHL = 1 to SCHNELLWERT
            porta.4=0
            portb.2=0
            portb.5=0
            pauseus ROTWERT
            porta.4=1
            portb.2=1
            portb.5=1
            gosub TASTE
            if tasteein=3 then let rot=rotwert
            IF TASTEEIN>=1 then GOTO TASTENWERK
            pauseus 4000-ROTWERT
        next SCHNELLZAEHL
    next ROTWERT
    LET rot=0
    
    REM Blaue LED wird von hell nach dunkel gesteuert
    let blau=4000
    for BLAUWERT = 4000 to 200 step -40 
        for SCHNELLZAEHL = 1 to SCHNELLWERT
            portb.0=0
            portb.3=0
            portb.6=0
            pauseus BLAUWERT
            portb.0=1
            portb.3=1
            portb.6=1
            gosub TASTE
            if tasteein=3 then let blau=blauwert
            IF TASTEEIN>=1 then GOTO TASTENWERK
            pauseus 4000-BLAUWERT
        next SCHNELLZAEHL
    next BLAUWERT
    let blau=0 
    
    goto SCHWELLER
    REM ENDE SCHWELLER
    REM-----------------------------------------------------------------------------
    REM ANFANG STATISCH ROT, GRUEN, BLAU
    STATISCH_ROT:
    rem rot_an
    porta.4=0
    portb.2=0
    portb.5=0
    rem blau_aus
    portb.0=1
    portb.3=1
    portb.6=1
    rem gruen_aus
    portb.1=1
    portb.4=1
    portb.7=1
    gosub taste
    IF TASTEEIN>=1 then GOTO TASTENWERK
    goto statisch_rot
    
    STATISCH_GRUEN:
    rem rot_aus
    porta.4=1
    portb.2=1
    portb.5=1
    rem blau_aus
    portb.0=1
    portb.3=1
    portb.6=1
    rem gruen_an
    portb.1=0
    portb.4=0
    portb.7=0
    gosub taste
    IF TASTEEIN>=1 then GOTO TASTENWERK
    goto statisch_gruen
    
    STATISCH_BLAU:
    rem rot_aus
    porta.4=1
    portb.2=1
    portb.5=1
    rem blau_an
    portb.0=0
    portb.3=0
    portb.6=0
    rem gruen_aus
    portb.1=1
    portb.4=1
    portb.7=1
    gosub taste
    IF TASTEEIN>=1 then GOTO TASTENWERK
    goto statisch_blau
    REM ENDE STATISCH ROT, GRUEN, BLAU 
    REM-----------------------------------------------------------------------------
    REM START STATISCHES LICHT AUS GESTOPPTEN SCHWELLER
    SCH_STAT:
    REM ROTER STATISCHER WERT AUS SCHWELLER
    porta.4=0
    portb.2=0
    portb.5=0
    pauseus ROT
    porta.4=1
    portb.2=1
    portb.5=1
    pauseus 4000-ROT
    REM GRUENER STATISCHER WERT AUS SCHWELLER
    portb.1=0
    portb.4=0
    portb.7=0
    pauseus GRUEN
    portb.1=1
    portb.4=1
    portb.7=1
    pauseus 4000-GRUEN
    REM BLAUER STATISCHER WERT AUS SCHWELLER
    portb.0=0
    Portb.3=0
    portb.6=0
    pauseus BLAU
    portb.0=1
    portb.3=1
    portb.6=1
    pauseus 4000-BLAU
    gosub taste
    IF TASTEEIN>=1 then GOTO TASTENWERK
    GOTO SCH_STAT
    REM ENDE STATISCHES LICHT AUS GESTOPPTEN SCHWELLER
    REM-----------------------------------------------------------------------------
    REM ANFANG ZUORDNUNG DER GEDRÜCKTEN TASTE ZU EINER VARIABLEN
    TASTE:
    let tasteein=0
    'if porta.0=1 then let TASTEEIN=1
    'IF porta.1=1 then let tasteein=2
    'if porta.2=1 then let tasteein=3
    'if porta.3=1 then let tasteein=4
    'if porta.5=0 then let tasteein=5
    'if porta.6=1 then let tasteein=6
    'if porta.7=1 then let tasteein=7
    RETURN
    REM ENDE ZUORDNUNG DER GEDRÜCKTEN TASTE ZU EINER VARIABLEN
    REM-----------------------------------------------------------------------------
    REM ANFANG AUSWAHL DER MODULE
    TASTENWERK:
    PAUSE 100
    select case tasteein
            case 1
                goto EIN
            case 2
                goto schnell
            case 3 
                goto sch_stat
            case 4
                goto AUS
            case 5
                goto statisch_rot
            case 6
                goto statisch_gruen
            case 7
                goto statisch_Blau
    end select
    let tasteein=0
    goto schweller
    REM ENDE AUSWAHL DER MODULE
    REM-----------------------------------------------------------------------------
    REM ANFANG EIN
    EIN:
    READ 0,ROT.byte0
    READ 1,ROT.byte1
    read 2,BLAU.byte0
    read 3,blau.byte1
    read 4,gruen.byte0
    read 5,gruen.byte1
    pause 100
    goto sch_stat
    REM ENDE EIN
    REM-----------------------------------------------------------------------------
    REM ANFANG AUS
    AUS:
    write 0,rot.byte0
    write 1,rot.byte1
    write 2,blau.byte0
    write 3,blau.byte1
    write 4,gruen.byte0
    write 5,gruen.byte1
    pause 10
    AUSAUS:
    porta.4=1
    portb.2=1
    portb.5=1
    portb.0=1
    portb.3=1
    portb.6=1
    portb.1=1
    portb.4=1
    portb.7=1
    gosub taste
    IF TASTEEIN>=1 then GOTO TASTENWERK
    goto ausaus
    REM ENDE AUS
    REM-----------------------------------------------------------------------------
    REM ANFANG GESCHWINDIGKEITSEINSTELLUNG SCHWELLER
    SCHNELL:
    pause 100
    let SCHNELLWERTZAEHL=SCHNELLWERTZAEHL+1
    IF SCHNELLWERTZAEHL=4 THEN LET SCHNELLWERTZAEHL=1
    
    SELECT CASE SCHNELLWERTZAEHL
    CASE 1
    SCHNELLWERT=5
    CASE 2
    SCHNELLWERT=15
    CASE 3
    SCHNELLWERT=30
    END SELECT
    let SCHNELLZAEHL=1
    let tasteein=0
    GOTO SCHWELLER
    REM ENDE GESCHWINDIGKEITSEINSTELLUNG SCHWELLER
    REM-----------------------------------------------------------------------------
    END

  2. #2
    Join Date
    Jan 2009
    Posts
    17


    Did you find this post helpful? Yes | No

    Default Trouble with PIC16F88 (chip hangs up)

    I checked the configuration bits - all seems ok, but the problem is still alive.
    I would be thankfull for a good idea?

  3. #3
    Join Date
    May 2004
    Location
    NW France
    Posts
    3,614


    Did you find this post helpful? Yes | No

    Wink

    Hi,

    Are you sure the supply voltage goes to < 1 v when you re-apply power ???

    Easy confirm :

    1) Turn MCLR to ON AND Always let The Watchdog ON if no valuable reason to cancel it ( @ Sleep ...i.e.)

    Code:
    wdt_off, MCLR_off
    I'm not not kidding, here ... but ... I could !!!

    2) enable the Brownout function ...

    3) Allow the Power-up Timer ...

    4) use a R/C/D reset circuit instead of a simple resistor ( Datasheet $15.2 )

    Alain
    ************************************************** ***********************
    Why insist on using 32 Bits when you're not even able to deal with the first 8 ones ??? ehhhhhh ...
    ************************************************** ***********************
    IF there is the word "Problem" in your question ...
    certainly the answer is " RTFM " or " RTFDataSheet " !!!
    *****************************************

Similar Threads

  1. RX TX modules - intermitent communication
    By ruijc in forum mel PIC BASIC Pro
    Replies: 13
    Last Post: - 11th June 2009, 00:13
  2. PICKIT2 - PBC Pro - PIC16F88 TROUBLE
    By inventosrl in forum mel PIC BASIC Pro
    Replies: 15
    Last Post: - 3rd December 2008, 23:37
  3. ADC trouble with PIC16F88
    By inventosrl in forum mel PIC BASIC
    Replies: 9
    Last Post: - 3rd December 2008, 12:56
  4. Replies: 8
    Last Post: - 7th December 2006, 15:42
  5. chip selection aid
    By PICMAN in forum General
    Replies: 4
    Last Post: - 21st February 2005, 18:33

Members who have read this thread : 1

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