Thermo 7 segments - little problem


Closed Thread
Results 1 to 40 of 50

Hybrid View

  1. #1
    Join Date
    Dec 2008
    Location
    Ploiesti, ROMANIA
    Posts
    582


    Did you find this post helpful? Yes | No

    Default Re: Thermo 7 segments - little problem

    Thanks for reply !
    ...I know that, but on display I have only "0" ...so I think I need to ...re-define temperature ?!?

  2. #2
    Join Date
    Jan 2005
    Location
    Montreal, Quebec, Canada
    Posts
    3,154


    Did you find this post helpful? Yes | No

    Default Re: Thermo 7 segments - little problem

    I still have no clue how the sign is set, but you GOTO MAIN from within INIT1820; not a good thing, messes up the stack.

    Robert

  3. #3
    Join Date
    Jan 2005
    Location
    Montreal, Quebec, Canada
    Posts
    3,154


    Did you find this post helpful? Yes | No

    Default Re: Thermo 7 segments - little problem

    Code:
    If Temperature.15 then       
      Temperature= ~Temperature +1
      Sign  = 1
    Endif
    Don't you need something like this at bottom of READ1820?

    Robert

  4. #4
    Join Date
    Dec 2008
    Location
    Ploiesti, ROMANIA
    Posts
    582


    Did you find this post helpful? Yes | No

    Default Re: Thermo 7 segments - little problem

    No matter what temperature I set to DS18B20 ; the display show always "0,1".
    Attached Images Attached Images  

  5. #5
    Join Date
    Dec 2008
    Location
    Ploiesti, ROMANIA
    Posts
    582


    Did you find this post helpful? Yes | No

    Default Re: Thermo 7 segments - little problem

    It's beyond on my understanding and mental capabilities ...
    Code:
    ;                        Termometru 7 segmente 
    '======================================================================================
    
    ;@ DEVICE pic16F628A, intOSC_osc_noclkout, WDT_OFF, PWRT_ON, MCLR_OFF, LVP_OFF, CPD_OFF
    
    DEFINE OSC 4
    CMCON		= 7
    VRCON 	= 0
    INTCON 	= 0
    
                                    
        Common_4   	VAR PORTA.0
        Common_3   	VAR PORTA.1
        Common_2   	VAR PORTA.2
        Common_1   	VAR PORTA.3  
        DP            VAR PORTB.7
    
    Temp   	    Var     byte
    Temperature     Var     Word
    TempC           Var     Word
    I               Var     Byte
    Sign            Var     Word
    Float           Var     Word
    V		    Var     Word		   
    Dummy           Var     Byte
    Busy		    Var     Bit
        DIGIT_0     VAR 	BYTE
        DIGIT_1     VAR 	BYTE
        DIGIT_2     VAR 	BYTE
        DIGIT_3     VAR 	BYTE
    digit		    Var 	BYTE
    
    
    DQ VAR PORTA.4
    DQ_DIR var TRISA.4
    command var byte
    pis   var byte
    
    	TrisB=0					' Make PortB outputs
    	TrisA.0=0:TrisA.1=0:TrisA.2=0		' Make only the specific bits of PortA outputs					
    	TrisA.3=0:TrisA.4=1
    	PortA=0:PortB=0			     	' Clear PortB and PortA
    
    INCLUDE "DT_INTS-14.bas"     ' Base Interrupt System
    INCLUDE "ReEnterPBP.bas"     ' Include if using PBP interrupts
    
    ASM
    INT_LIST  macro    ; IntSource,        Label,  Type, ResetFlag?
            INT_Handler   TMR1_INT,  _show,   PBP,  yes
        endm
        INT_CREATE               ; Creates the interrupt processor
    ENDASM
    
    T1CON = $31                ; Prescaler=8, TMR1ON
    @ INT_ENABLE  TMR1_INT     ; enable Timer 1 interrupts
    
    
    
        
    '======================================================================================
    Gosub init1820 			' Init the DS1820
    
    command = $cc 			' Issue Skip ROM command
    Gosub write1820
    
    command = $44 			' Start temperature conversion
    Gosub write1820
    
    
    Gosub init1820 			' Do another init
    
    command = $cc 			' Issue Skip ROM command
    Gosub write1820
       
    MainLOOP:
    command = $be           ' Read the temperature
    Gosub write1820
    Gosub read1820
    
    TEMPERATURE = ((tempERATURE>> 1)*100)+((TEMPERATURE.0*5)*10)
    Gosub Selectie 
    Goto MainLOOP
    
    '======================================================================================
    Selectie :
    IF sign ="-" then					
        DIGIT_3="-"
        else
        DIGIT_3=" "
    ENDIF
     
    IF TEMPERATURE DIG 2 = 0 THEN
        DIGIT_2 = " "
        ELSE
        DIGIT_2 = TEMPERATURE dig 2
    ENDIF
    
        DIGIT_1 = TEMPERATURE dig 1
        DIGIT_0 = TEMPERATURE dig 0
    
    RETURN
    
    '====================================================================================== 
    show:   
    for i=0 to 4
        TEMP = DIGIT_3 : gosub segments
        COMMON_1 = 1 : PAUSE 1 : COMMON_1 = 0
    
         
        TEMP = DIGIT_2 : GOSUB segments
        COMMON_2 = 1 : PAUSE 1 : COMMON_2 = 0
       
        TEMP = DIGIT_1 : GOSUB segments
        COMMON_3 = 1 : DP = 0 : PAUSE 1 : COMMON_3 = 0 : DP = 1
      
        TEMP = DIGIT_0 : GOSUB segments
        COMMON_4 = 1 : PAUSE 1 : COMMON_4 = 0
    next i
    
    segments:  ; CONVERTS DATES TO 7 SEGMENT CODE for Common ANOD
        
        SELECT CASE TEMP       
    CASE 0 	 : PortB=%11000000 ; 0=ON ; 1=OFF
    CASE 1 	 : PortB=%11111001
    CASE 2 	 : PortB=%10100100      
    CASE 3 	 : PortB=%10110000        
    CASE 4 	 : PortB=%10011001
    CASE 5 	 : PortB=%10010010        
    CASE 6 	 : PortB=%10000010
    CASE 7 	 : PortB=%11111000        
    CASE 8 	 : PortB=%10000000       
    CASE 9 	 : PortB=%10010000        
    CASE "-"     : PortB=%10111111               
    CASE " "     : PortB=%11111111        
        END SELECT 
    return
    @ INT_RETURN
    '====================================================================================== 
    ' Initialize DS1820 and check for presence
    init1820:
       Low DQ              ' Set the data pin low to init
       Pauseus 500         ' Wait > 480us
       DQ_DIR = 1          ' Release data pin (set to input for high)
    
       Pauseus 100         ' Wait > 60us
       If DQ = 1 Then
          Pause 500
          Goto mainLOOP     ' Try again
       Endif
       Pauseus 400         ' Wait for end of presence pulse
       Return
    
    ' Write "command" byte to the DS1820
    write1820:
       For pis = 1 To 8      ' 8 bits to a byte
         If command.0 = 0 Then
            Gosub write0   ' Write a 0 bit
         Else
            Gosub write1   ' Write a 1 bit
         Endif
         command = command >> 1  ' Shift to next bit
       Next pis
       Return
    
    ' Write a 0 bit to the DS1820
    write0:
       Low DQ
       Pauseus 60          ' Low for > 60us for 0
       DQ_DIR = 1          ' Release data pin (set to input for high)
       Return
    
    ' Write a 1 bit to the DS1820
    write1:
       Low DQ              ' Low for < 15us for 1
     @ nop                 ' Delay 1us at 4MHz
       DQ_DIR = 1          ' Release data pin (set to input for high)
       Pauseus 60          ' Use up rest of time slot
       Return
    
    ' Read temperature from the DS1820
    read1820:
       For pis = 1 To 16     ' 16 bits to a word
         temperature = temperature >> 1  ' Shift down bits
         Gosub readbit     ' Get the bit to the top of temp
       Next pis
       If Temperature.15 then       
      Temperature= ~Temperature +1
      Sign  = 1
    Endif
       Return
    
    ' Read a bit from the DS1820
    readbit:
       temperature.15 = 1         ' Preset read bit to 1
       Low DQ              ' Start the time slot
     @ nop                 ' Delay 1us at 4MHz
       DQ_DIR = 1          ' Release data pin (set to input for high)
       If DQ = 0 Then
          temperature.15 = 0      ' Set bit to 0
       Endif
       Pauseus 60          ' Wait out rest of time slot
       Return    
    
    end

    ERROR Line 23: Redefinition of VAR. (DT_INTS-14.bas) ?!?
    Can not be done a simple termometer with LED display ?

  6. #6
    Join Date
    Jan 2005
    Location
    Montreal, Quebec, Canada
    Posts
    3,154


    Did you find this post helpful? Yes | No

    Default Re: Thermo 7 segments - little problem

    Check the include, you used the same variable.

    Robert

  7. #7
    Join Date
    Dec 2008
    Location
    Ploiesti, ROMANIA
    Posts
    582


    Did you find this post helpful? Yes | No

    Default Re: Thermo 7 segments - little problem

    Found it :
    "wsave VAR BYTE $20 SYSTEM ' location for W if in bank0
    ;wsave VAR BYTE $70 SYSTEM ' alternate save location for W "
    ...
    But now I have nothing on display ?!
    Last edited by fratello; - 2nd July 2013 at 14:01.

  8. #8
    Join Date
    Jan 2005
    Location
    Montreal, Quebec, Canada
    Posts
    3,154


    Did you find this post helpful? Yes | No

    Default Re: Thermo 7 segments - little problem

    I can only suggest to post all your most recent code. Maybe a senior can spot something.

    Robert

Similar Threads

  1. Windows 7 64 bit problem..can anyone help???
    By ljc4141 in forum mel PIC BASIC Pro
    Replies: 16
    Last Post: - 18th July 2011, 15:29
  2. LED Machine Tach For Tired Eyes
    By Archangel in forum mel PIC BASIC Pro
    Replies: 33
    Last Post: - 27th January 2010, 14:55
  3. adding with 7 segments
    By ruijc in forum mel PIC BASIC Pro
    Replies: 4
    Last Post: - 28th November 2007, 22:51
  4. 7 segments clock
    By the_apprentice in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 27th April 2006, 18:45
  5. 7 segment digit problem (using Mister E's code)
    By jmgelba in forum mel PIC BASIC Pro
    Replies: 7
    Last Post: - 9th September 2005, 20:25

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