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

    ...a little problem : don't display value under -9.9 'C ! For -10.0 'C the display show - 0,0 'C. Now, in my town, outside is -12'C !!! (brrrrrrr...)

  2. #2
    Join Date
    Jul 2008
    Location
    TURKIYE-KONYA
    Posts
    51


    Did you find this post helpful? Yes | No

    Default

    ok. i understood the problem . we will shift the "-" string 1 step left.

    change the "ekran_0" label with below ;

    Code:
    ekran_0 :  ; transfer the registers to diplay
        
        mask_3 = isi dig 3
        
        if sign = 1 then 
            mask_3 = "-"
        endif
        
        mask_2 = isi dig 2
        mask_1 = isi dig 1
        mask_0 = isi dig 0
    
    return

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


    Did you find this post helpful? Yes | No

    Default Without flickering...

    I made the thermometer, using the code from Mr.Mehmet - Thanks ! I use common cathode LED display. But..., with the schematic from Mr.Mehmet , the display have flicker...It' one good ideea to use transistors for cathodes, like in picture ? It's correct ? (In ISIS dont work ! ) It's this one solution for "flicker free" ? Thanks in advance for reply !
    Attached Images Attached Images  

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


    Did you find this post helpful? Yes | No

    Default Try to learn about INTERRUPTS

    I re-write the code posted by Mehmet (Thanks !) , because I intend to use interrupts. On ISIS work ...fine (little flicker ?!) . But...I wonder if the code it's right. I re-re-read MCSE help about using interrupts...and, of course, any advice it's wellcome. Thanks in advance !
    Code:
    '*********************************************************
    '*							               * 
    '*               Termometru 7 segmente			   *
    '*                  cu intreruperi			         *
    '*							               *
    '*********************************************************
    @ DEVICE pic16F628A, intOSC_osc_noclkout, WDT_OFF, PWRT_ON, MCLR_OFF, LVP_OFF, CPD_OFF, PROTECT_OFF    
    
    DEFINE  NO_CLRWDT 1
    DEFINE  OSC 4
    
    TRISA= %11110000                   	' RA0..3=Outputs RA4...7=Input
    TRISB= %00000000 		   	      ' RB0..RB7=Outputs
    CMCON=7                            	' Disable comparators
    
    
        SEGMENT_A   VAR PORTB.0
        SEGMENT_B   VAR PORTB.1
        SEGMENT_C   VAR PORTB.2
        SEGMENT_D   VAR PORTB.3
        SEGMENT_E   VAR PORTB.4
        SEGMENT_F   VAR PORTB.5
        SEGMENT_G   VAR PORTB.6
        DP          VAR PORTB.7
        
        CATOD_0   	VAR PORTA.0
        CATOD_1   	VAR PORTA.1
        CATOD_2   	VAR PORTA.2
        CATOD_3   	VAR PORTA.3
        
        DQ          VAR PORTA.4
    
    
    OPTION_REG = %10000000
    
    
    Temp            var byte
    DS18B20_12bit   CON %01111111        	' 750ms,   0.0625°C 
    Temperature     Var     Word
    TempC           Var     Word
    I               Var     Byte
    Sign            Var     Bit
    Count_remain    var     Byte
    Float           Var     Word
    V		    Var     Word	     	      ' Var. for display
    Twist           Var     Bit
    Dummy           Var     Byte
    Busy            var  	BIT            	' Busy Status-Bit
    
        DIGIT_0      VAR BYTE
        DIGIT_1      VAR BYTE
        DIGIT_2      VAR BYTE
        DIGIT_3      VAR BYTE
        
        OUTPUT      SEGMENT_A
        OUTPUT      SEGMENT_B
        OUTPUT      SEGMENT_C
        OUTPUT      SEGMENT_D
        OUTPUT      SEGMENT_E
        OUTPUT      SEGMENT_F
        OUTPUT      SEGMENT_G
        OUTPUT      DP
        OUTPUT      CATOD_0
        OUTPUT      CATOD_1
        OUTPUT      CATOD_2
        OUTPUT      CATOD_3
    
        SEGMENT_A   = 0
        SEGMENT_B   = 0
        SEGMENT_C   = 0
        SEGMENT_D   = 0
        SEGMENT_E   = 0
        SEGMENT_F   = 0
        SEGMENT_G   = 0
        DP          = 0
        
        CATOD_0   = 1 ; DISPLAYS 1. DIGIT
        CATOD_1   = 1 ; DISPLAYS 2. DIGIT
        CATOD_2   = 1 ; DISPLAYS 3. DIGIT
        CATOD_3   = 1 ; DISPLAYS 4. DIGIT
    
    '============================================================
    ON INTERRUPT GOTO ISR
    INTCON = %10100000
    
    '============================================================
    OWOut DQ, 1, [$CC, $4E, 0, 0, DS18B20_12bit]
     Output DQ             		          ' Make Pin Output
     DQ=0					          ' OneWire line Low
     PauseUs 480                            ' Keep down for 480 µS  
     Input DQ                               ' Make Pin Input
     PauseUs 70                             ' Wait 70 µS
    
    Pause 500
    
    W1: 
        OWIN DQ,4,[busy]            	   ' Check for still busy converting
        IF busy = 0 THEN W1         	   ' Still busy?  then loop
    
    '============================================================    
    MAIN :
    OWOUT DQ ,1,[$CC,$44]
            OWOUT DQ ,1,[$CC,$BE]
            OWIN  DQ ,2,[Temperature.LOWBYTE , Temperature.HIGHBYTE]
            
    Convert_Temp:
    If Temperature.15 then       
      Temperature= ~Temperature +1
      Twist = 1
      Sign  = 1
    Endif
     
    Dummy = 625 * Temperature
    TempC = DIV32 10 
    TempC = (Temperature & $7FF) >> 4
    Float = ((Temperature.Lowbyte & $0F ) * 25 )>>2
    Temperature = TempC*100 + Float
    
    If Twist then
      V= 10000 - Temperature                ' 25 C=12500  0 C=10000  -10 C=9000 
      Twist = 0
    else
      V= 10000 + Temperature
    EndIf
    
    GoSub Sign_temp
            
            Temperature = Temperature/10
    
    GOSUB AFISARE
            
      FOR I = 0 TO 4
         GOSUB SCANNING
      NEXT I
    
    GOTO MAIN
    '============================================================
    
    ' SUBROUTINES:
    '============================================================
    
    Sign_temp:
     If V >= 10000 then                     ' Above 0 C.      
      Temperature=V-10000
      sign = " "                   
     Else                                   
      Temperature=10000-V                   ' Below 0 C. 
      sign= "-"
     EndIf
    Return
    
    '============================================================  
    AFISARE :  				' transfer the registers to diplay
    
    IF TEMPERATURE DIG 3 = 0 THEN
        DIGIT_3 = " "
        ELSE
        DIGIT_3 = TEMPERATURE dig 3
    ENDIF  
    
        IF sign = 1 THEN 
        	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
    
    
    
    
    DISABLE
    ISR:        
    '============================================================   
    SCANNING : 				' SCAN THE DISPLAYS
        
        TEMP = DIGIT_3 : GOSUB TABLO 
        CATOD_3 = 0 : PAUSE 1 : CATOD_3 = 1
         
        TEMP = DIGIT_2 : GOSUB TABLO
        CATOD_2 = 0 : PAUSE 1 : CATOD_2 = 1
       
        TEMP = DIGIT_1 : GOSUB TABLO
        CATOD_1 = 0 : DP = 1 : PAUSE 1 : CATOD_1 = 1 : DP = 0
      
        TEMP = DIGIT_0 : GOSUB TABLO
        CATOD_0 = 0 : PAUSE 1 : CATOD_0 = 1
    
    Return   
    
    '============================================================
    
          
    TABLO :  				' TABLE , CONVERTS THE DATAS TO 7 SEGMENT CODE  
        SELECT CASE TEMP
            CASE 0
            SEGMENT_A = 1   
            SEGMENT_B = 1   
            SEGMENT_C = 1  
            SEGMENT_D = 1   
            SEGMENT_E = 1   
            SEGMENT_F = 1   
            SEGMENT_G = 0
            
            CASE 1
            SEGMENT_A = 0   
            SEGMENT_B = 1   
            SEGMENT_C = 1  
            SEGMENT_D = 0   
            SEGMENT_E = 0   
            SEGMENT_F = 0   
            SEGMENT_G = 0
            
            CASE 2
            SEGMENT_A = 1   
            SEGMENT_B = 1   
            SEGMENT_C = 0  
            SEGMENT_D = 1   
            SEGMENT_E = 1   
            SEGMENT_F = 0   
            SEGMENT_G = 1
            
            CASE 3
            SEGMENT_A = 1   
            SEGMENT_B = 1   
            SEGMENT_C = 1  
            SEGMENT_D = 1   
            SEGMENT_E = 0   
            SEGMENT_F = 0   
            SEGMENT_G = 1
            
            CASE 4
            SEGMENT_A = 0   
            SEGMENT_B = 1   
            SEGMENT_C = 1  
            SEGMENT_D = 0   
            SEGMENT_E = 0   
            SEGMENT_F = 1   
            SEGMENT_G = 1
            
            CASE 5
            SEGMENT_A = 1   
            SEGMENT_B = 0   
            SEGMENT_C = 1  
            SEGMENT_D = 1   
            SEGMENT_E = 0   
            SEGMENT_F = 1   
            SEGMENT_G = 1
            
            CASE 6
            SEGMENT_A = 1   
            SEGMENT_B = 0   
            SEGMENT_C = 1  
            SEGMENT_D = 1   
            SEGMENT_E = 1   
            SEGMENT_F = 1   
            SEGMENT_G = 1
            
            CASE 7
            SEGMENT_A = 1   
            SEGMENT_B = 1   
            SEGMENT_C = 1  
            SEGMENT_D = 0   
            SEGMENT_E = 0   
            SEGMENT_F = 0   
            SEGMENT_G = 0
            
            CASE 8
            SEGMENT_A = 1   
            SEGMENT_B = 1   
            SEGMENT_C = 1  
            SEGMENT_D = 1   
            SEGMENT_E = 1   
            SEGMENT_F = 1   
            SEGMENT_G = 1
            
            CASE 9
            SEGMENT_A = 1   
            SEGMENT_B = 1   
            SEGMENT_C = 1  
            SEGMENT_D = 1   
            SEGMENT_E = 0   
            SEGMENT_F = 1   
            SEGMENT_G = 1
            
            CASE "-"
            SEGMENT_A = 0   
            SEGMENT_B = 0   
            SEGMENT_C = 0  
            SEGMENT_D = 0   
            SEGMENT_E = 0   
            SEGMENT_F = 0   
            SEGMENT_G = 1
            
            CASE "h"
            SEGMENT_A = 0   
            SEGMENT_B = 0   
            SEGMENT_C = 1  
            SEGMENT_D = 0   
            SEGMENT_E = 1   
            SEGMENT_F = 1   
            SEGMENT_G = 1
            
            CASE "o"
            SEGMENT_A = 0   
            SEGMENT_B = 0   
            SEGMENT_C = 1  
            SEGMENT_D = 1   
            SEGMENT_E = 1   
            SEGMENT_F = 0   
            SEGMENT_G = 1
            
            CASE "b"
            SEGMENT_A = 0   
            SEGMENT_B = 0   
            SEGMENT_C = 1  
            SEGMENT_D = 1   
            SEGMENT_E = 1   
            SEGMENT_F = 1   
            SEGMENT_G = 1
            
            CASE " "
            SEGMENT_A = 0   
            SEGMENT_B = 0   
            SEGMENT_C = 0  
            SEGMENT_D = 0   
            SEGMENT_E = 0   
            SEGMENT_F = 0   
            SEGMENT_G = 0
            
        END SELECT  
    RETURN
    
    INTCON.2=0
    RESUME
    ENABLE      
    
    '============================================================
    END
    PS: Remove .txt extension from attachament, for using in iSIS.
    Attached Files Attached Files

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