LED DISPLEJI U MULTIPLEXU

Rasprava o PIC mikrokontrolerima, PIC projekti i drugo vezano za PIC-eve...

Moderators: pedja089, stojke369, [eDo], trax

Post Reply
febo26
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 207
Joined: 12-08-2008, 19:58

LED DISPLEJI U MULTIPLEXU

Post by febo26 »

Pokusao sam napisati program za mjerenje temperature s DS1820 s prikazom na cetri sedam segmentna led displeja.Dijelovi programa su primjeri s ubrzanog kursa i stvar funkcionira ali mi prikaz na displeju blica.Svaki put kad program ode da mjeri temperaturu ugase se displeji i opet upale kad se izmjeri temeratura.Sto bi trebalo napraviti da prikaz na displeju ostane prikazan dok program mjeri tmperaturu.

Code: Select all

'****************************************************************
'*  Name    : multiplexiranje                                   *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2012 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 20.10.2012                                        *
'*  Version : 1.0                                               *
'*  Notes   :  PIC16F877A                                       *
'*          :                                                   *
'****************************************************************
   TRISA = %0000000     'Postavi sve pinove porta A kao izlazni 
   TRISB = %00000000  'Postavi sve pinove porta B kao izlazne 
   TRISC = $00     'Postavi sve pinove porta C kao IZLAZNI 
   TRISD = $00     'Postavi sve pinove porta D kao izlazne 
   TRISE = %111    'Postavi sve pinove porta E kao ulazne
   ADCON1 = 7	   ' PORTA i PORTE su digitalni  ISKLJUCI KOMPARATORE I ANALOGNE ULAZE
 'VARIJABLE ZA MULTIPLEXIRANJE 
    BROJ VAR WORD
    BROJ1 VAR BYTE 
    BROJ2 VAR BYTE
    BROJ3 VAR BYTE
    BROJ4 VAR BYTE
    I VAR BYTE
'VARIJABLE MJERENJA TEMPERATURE    
symbol  DQ = PORTE.2 
V VAR WORD
T VAR WORD
temperatura  Var Word     	 ' Promen.za cuvanje izmer. temp.
count_remain Var Byte	     ' Ostatak 
count_per_c  Var Byte	     ' Ostatak po stepenu C
 
 
POCETAK: ' POCETAK PROGRAMA
   	   
 BROJ1 = T  DIG 3
 BROJ2 = T  DIG 2
 BROJ3 = T  DIG 1
 BROJ4 = t  dig 0

    FOR I = 1 TO 100  ' u ovom slucaju stavili smo da se ispis na displeju ponovi 100 puta, sto znaci da ce vreme prikazivanja broja na displeju biti oko 2 sekunde
    PORTB=BROJ1
    HIGH PORTB.7
    PAUSE 2
    LOW PORTB.7

    PORTB=BROJ2
    HIGH PORTB.6
    PAUSE 2
    LOW PORTB.6 

    PORTB=BROJ3
    HIGH PORTB.5
    PAUSE 2
    LOW PORTB.5
     
    PORTB=BROJ4
    HIGH PORTB.4
    PAUSE 2
    LOW PORTB.4
    NEXT I

  'MJERENJE TEMPERATURE  
	    OWOut DQ, 1, [$CC, $44]      ' Start merenja temperature
Cekaj:
        OWIn DQ, 4, [count_remain]	 ' Provera da li jos traje
	    If count_remain = 0 Then Cekaj
	    OWOut DQ, 1, [$CC, $BE] 	 ' Procitaj izmerenu temperaturu
	    OWIn DQ, 0, [temperatura.LOWBYTE, temperatura.HIGHBYTE, Skip 4, count_remain, count_per_c]
	   
' Prikazi temperaturu u DEC obliku
	   temperatura = (((temperatura >> 1) * 100) - 25) + (((count_per_c - count_remain) * 100) / count_per_c)
	    v=20000-temperatura
	    
  'PRIKAZ ZNAKA
If v < 20000 then  'AKO JE TEMP VECA OD NULE NE SVIJETLI MINUS                 
portA.0 = 0                            
Else
HIGH PORTA.0  'AKO JE TEMP MANJA OD NULE SVIJETLI MINUS                        
endif

'------------IZRACUN TEMERATURE U PLUS I MINUS-----------------

    If V >= 20000 then    ' nad 0 C.     
    Temperatura=V-20000  
    t=temperatura
 Else                                   
    Temperatura=20000-V ' pod 0 C               
    t=temperatura
    EndIf
 GOTO POCETAK 
  
    end
PicBeginer1
Pocetnik na forumu
Pocetnik na forumu
Posts: 30
Joined: 12-11-2012, 23:27

Re: LED DISPLEJI U MULTIPLEXU

Post by PicBeginer1 »

Code: Select all

Cekaj:
        OWIn DQ, 4, [count_remain]    ' Provera da li jos traje
       If count_remain = 0 Then Cekaj
mislim da ti je zbog ovog to blinkanje dipleja jer program ceka dok se konverzija ne zavrsi a ona traje nekih 750ms
PicBeginer1
Pocetnik na forumu
Pocetnik na forumu
Posts: 30
Joined: 12-11-2012, 23:27

Re: LED DISPLEJI U MULTIPLEXU

Post by PicBeginer1 »

Code: Select all

'****************************************************************
'*  Name    : multiplexiranje                                   *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2012 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 20.10.2012                                        *
'*  Version : 1.0                                               *
'*  Notes   :  PIC16F877A                                       *
'*          :                                                   *
'****************************************************************
   TRISA = %0000000     'Postavi sve pinove porta A kao izlazni
   TRISB = %00000000  'Postavi sve pinove porta B kao izlazne
   TRISC = $00     'Postavi sve pinove porta C kao IZLAZNI
   TRISD = $00     'Postavi sve pinove porta D kao izlazne
   TRISE = %111    'Postavi sve pinove porta E kao ulazne
   ADCON1 = 7      ' PORTA i PORTE su digitalni  ISKLJUCI KOMPARATORE I ANALOGNE ULAZE
 'VARIJABLE ZA MULTIPLEXIRANJE
    K VAR BIT 
    BROJ VAR WORD
    BROJ1 VAR BYTE
    BROJ2 VAR BYTE
    BROJ3 VAR BYTE
    BROJ4 VAR BYTE
    I VAR BYTE
'VARIJABLE MJERENJA TEMPERATURE   
symbol  DQ = PORTE.2
V VAR WORD
T VAR WORD
temperatura  Var Word         ' Promen.za cuvanje izmer. temp.
count_remain Var Byte        ' Ostatak
count_per_c  Var Byte        ' Ostatak po stepenu C
 
 
POCETAK: ' POCETAK PROGRAMA
         
  'MJERENJE TEMPERATURE 
       OWOut DQ, 1, [$CC, $44]      ' Start merenja temperature
Cekaj:
        OWIn DQ, 4, [count_remain]    ' Provera da li jos traje
       If count_remain = 0 Then 
       K=1
       CALL ispis
       endif
       OWOut DQ, 1, [$CC, $BE]     ' Procitaj izmerenu temperaturu
       OWIn DQ, 0, [temperatura.LOWBYTE, temperatura.HIGHBYTE, Skip 4, count_remain, count_per_c]
      
' Prikazi temperaturu u DEC obliku
      temperatura = (((temperatura >> 1) * 100) - 25) + (((count_per_c - count_remain) * 100) / count_per_c)
       v=20000-temperatura
    If V >= 20000 then    ' nad 0 C.     
    Temperatura=V-20000 
    t=temperatura
 Else                                   
    Temperatura=20000-V ' pod 0 C               
    t=temperatura
    EndIf
 ispis:     
  'PRIKAZ ZNAKA
If v < 20000 then  'AKO JE TEMP VECA OD NULE NE SVIJETLI MINUS                 
portA.0 = 0                           
Else
HIGH PORTA.0  'AKO JE TEMP MANJA OD NULE SVIJETLI MINUS                       
endif
 BROJ1 = T  DIG 3
 BROJ2 = T  DIG 2
 BROJ3 = T  DIG 1
 BROJ4 = t  dig 0

    FOR I = 1 TO 100  ' u ovom slucaju stavili smo da se ispis na displeju ponovi 100 puta, sto znaci da ce vreme prikazivanja broja na displeju biti oko 2 sekunde
    PORTB=BROJ1
    HIGH PORTB.7
    PAUSE 2
    LOW PORTB.7

    PORTB=BROJ2
    HIGH PORTB.6
    PAUSE 2
    LOW PORTB.6

    PORTB=BROJ3
    HIGH PORTB.5
    PAUSE 2
    LOW PORTB.5
     
    PORTB=BROJ4
    HIGH PORTB.4
    PAUSE 2
    LOW PORTB.4
    NEXT I


if K=1 then goto cekaj
K=0
 GOTO POCETAK
 
    end
probaj ovako mislim da sad nebi trebalo da blinka
PicBeginer1
Pocetnik na forumu
Pocetnik na forumu
Posts: 30
Joined: 12-11-2012, 23:27

Re: LED DISPLEJI U MULTIPLEXU

Post by PicBeginer1 »

i ova petlja
FOR I=1 TO 100
ti je visak jer i ona utice na blinkanje
febo26
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 207
Joined: 12-08-2008, 19:58

Re: LED DISPLEJI U MULTIPLEXU

Post by febo26 »

ne blinka ali samo jednom izmjeri temperaturu i vise ne, zaglavi se negdje u programu
PicBeginer1
Pocetnik na forumu
Pocetnik na forumu
Posts: 30
Joined: 12-11-2012, 23:27

Re: LED DISPLEJI U MULTIPLEXU

Post by PicBeginer1 »

mozes li postavit semu za to sto pravis
i probaj u if petlji da umjesto goto cekaj stavis samo cekaj
mada mislim da nebitebalo biti do toga
febo26
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 207
Joined: 12-08-2008, 19:58

Re: LED DISPLEJI U MULTIPLEXU

Post by febo26 »

shema je s druge stranice skracenog kursa s tim da koristim PIC16f877. Na portB su spojeni displeji u multipleksu ,dekoderski cip je cd4511,a ds1820 je spojen na RE.2 pin.
PicBeginer1
Pocetnik na forumu
Pocetnik na forumu
Posts: 30
Joined: 12-11-2012, 23:27

Re: LED DISPLEJI U MULTIPLEXU

Post by PicBeginer1 »

Code: Select all

'****************************************************************
'*  Name    : multiplexiranje                                   *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2012 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 20.10.2012                                        *
'*  Version : 1.0                                               *
'*  Notes   :  PIC16F877A                                       *
'*          :                                                   *
'****************************************************************
   TRISA = %0000000     'Postavi sve pinove porta A kao izlazni
   TRISB = %00000000  'Postavi sve pinove porta B kao izlazne
   TRISC = $00     'Postavi sve pinove porta C kao IZLAZNI
   TRISD = $00     'Postavi sve pinove porta D kao izlazne
   TRISE = %111    'Postavi sve pinove porta E kao ulazne
   ADCON1 = 7      ' PORTA i PORTE su digitalni  ISKLJUCI KOMPARATORE I ANALOGNE ULAZE
 'VARIJABLE ZA MULTIPLEXIRANJE
    K VAR BIT
    BROJ VAR WORD
    BROJ1 VAR BYTE
    BROJ2 VAR BYTE
    BROJ3 VAR BYTE
    BROJ4 VAR BYTE
    I VAR BYTE
'VARIJABLE MJERENJA TEMPERATURE   
symbol  DQ = PORTE.2
V VAR WORD
T VAR WORD
temperatura  Var Word         ' Promen.za cuvanje izmer. temp.
count_remain Var Byte        ' Ostatak
count_per_c  Var Byte        ' Ostatak po stepenu C
 
 
POCETAK: ' POCETAK PROGRAMA
         
  'MJERENJE TEMPERATURE
       OWOut DQ, 1, [$CC, $44]      ' Start merenja temperature
Cekaj:
        OWIn DQ, 4, [count_remain]    ' Provera da li jos traje
       If count_remain = 0 Then
       K=1
       CALL ispis
       else
       K=0
       endif
       OWOut DQ, 1, [$CC, $BE]     ' Procitaj izmerenu temperaturu
       OWIn DQ, 0, [temperatura.LOWBYTE, temperatura.HIGHBYTE, Skip 4, count_remain, count_per_c]
     
' Prikazi temperaturu u DEC obliku
      temperatura = (((temperatura >> 1) * 100) - 25) + (((count_per_c - count_remain) * 100) / count_per_c)
       v=20000-temperatura
    If V >= 20000 then    ' nad 0 C.     
    Temperatura=V-20000
    t=temperatura
 Else                                   
    Temperatura=20000-V ' pod 0 C               
    t=temperatura
    EndIf
 ispis:     
  'PRIKAZ ZNAKA
If v < 20000 then  'AKO JE TEMP VECA OD NULE NE SVIJETLI MINUS                 
portA.0 = 0                           
Else
HIGH PORTA.0  'AKO JE TEMP MANJA OD NULE SVIJETLI MINUS                       
endif
 BROJ1 = T  DIG 3
 BROJ2 = T  DIG 2
 BROJ3 = T  DIG 1
 BROJ4 = t  dig 0

    FOR I = 1 TO 100  ' u ovom slucaju stavili smo da se ispis na displeju ponovi 100 puta, sto znaci da ce vreme prikazivanja broja na displeju biti oko 2 sekunde
    PORTB=BROJ1
    HIGH PORTB.7
    PAUSE 2
    LOW PORTB.7

    PORTB=BROJ2
    HIGH PORTB.6
    PAUSE 2
    LOW PORTB.6

    PORTB=BROJ3
    HIGH PORTB.5
    PAUSE 2
    LOW PORTB.5
     
    PORTB=BROJ4
    HIGH PORTB.4
    PAUSE 2
    LOW PORTB.4
    NEXT I

if K=1 then cekaj

 GOTO POCETAK
 
    end
probaj sad bila je mrtva petlja u ispisu :oops: sad je nema :D
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7877
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: LED DISPLEJI U MULTIPLEXU

Post by pedja089 »

Moze i drugacije da se izvede, da se ne ceka ds...
Nego se samo poziva, pa ako je gotov on sam upise novu temperaturu, ako nije gotov odmah se vraca nazad.

Code: Select all

OWOut DQ, 1, [$CC, $44]      ' Start merenja temperature, obavezno pre glavne petlje
Pocetak: ' POCETAK PROGRAMA
  blbal bla...       
Call Merenje
GOTO Pocetak


Merenje:
       OWIn DQ, 4, [count_remain]    ' Provera da li jos traje
       If count_remain > 0 Then 'Ako je izmerio, procitaj, pa pokreni opet
           OWOut DQ, 1, [$CC, $BE]     ' Procitaj izmerenu temperaturu
           OWIn DQ, 0, [temperatura.LOWBYTE, temperatura.HIGHBYTE, Skip 4, count_remain, count_per_c]
           ' Prikazi temperaturu u DEC obliku itd...

           ' Malopre procitana temperatura, pa je meri opet...
           OWOut DQ, 1, [$CC, $44]     
       Endif
Return
febo26
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 207
Joined: 12-08-2008, 19:58

Re: LED DISPLEJI U MULTIPLEXU

Post by febo26 »

ok,hvala na odgovorima,budem isprobao cim dodjem kuci s posla pa javim rezultate.
febo26
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 207
Joined: 12-08-2008, 19:58

Re: LED DISPLEJI U MULTIPLEXU

Post by febo26 »

Eve me s rezultatima,malo sam prepravio Pedjin kod i sad sam zadovoljan s rezultatom.Povecao sam vrijednost kristala na 10MHz tako da mi vise ne trepere displeji i izbacio sam ovo iz koda:
OWIn DQ, 4, [count_remain] ' Provera da li jos traje
If count_remain > 0 Then 'Ako je izmerio, procitaj, pa pokreni opet

dok je to u kodu onda blicnu displeji ,valjda zbog cekanja rezultata iz DS-a


Code: Select all

'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2012 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 29.11.2012                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
       define OSC 10
       TRISA = %0000000     'Postavi sve pinove porta A kao izlazni
       TRISB = %00000000  'Postavi sve pinove porta B kao izlazne
       TRISC = $00     'Postavi sve pinove porta C kao IZLAZNI
       TRISD = $00     'Postavi sve pinove porta D kao izlazne
       TRISE = %111    'Postavi sve pinove porta E kao ulazne
       ADCON1 = 7      ' PORTA i PORTE su digitalni  ISKLJUCI KOMPARATORE I ANALOGNE ULAZE
     'VARIJABLE ZA MULTIPLEXIRANJE

        BROJ VAR WORD
        BROJ1 VAR BYTE
        BROJ2 VAR BYTE
        BROJ3 VAR BYTE
        BROJ4 VAR BYTE
        I VAR BYTE
    'VARIJABLE MJERENJA TEMPERATURE   
    symbol  DQ = PORTE.2
    V VAR WORD
    T VAR WORD
    temperatura  Var Word         ' Promen.za cuvanje izmer. temp.
    count_remain Var Byte        ' Ostatak
    count_per_c  Var Byte        ' Ostatak po stepenu C
     porta=%0000000
 
 
    OWOut DQ, 1, [$CC, $44]      ' Start merenja temperature, obavezno pre glavne petlje
    
    
    Pocetak: 
' POCETAK PROGRAMA
    gosub Merenje ' ZOVI SUBRUTINU ZA MJERENJE TEMPERATURE
'IZDVAJANJE  BROJEVA IZ TEMPERATURE ZA PRIKAZ NA DISPLEJU   
     BROJ1 = T  DIG 3
     BROJ2 = T  DIG 2
     BROJ3 = T  DIG 1
     BROJ4 = t  dig 0
'MULTIPLEKSIRANJE DISPLEJA I PRIKAZ
        PORTB=BROJ1
        HIGH PORTB.7
        PAUSE 2
        LOW PORTB.7

        PORTB=BROJ2
        HIGH PORTB.6
        PAUSE 2
        LOW PORTB.6

        PORTB=BROJ3
        HIGH PORTB.5
        PAUSE 2
        LOW PORTB.5
         
        PORTB=BROJ4
        HIGH PORTB.4
        PAUSE 2
        LOW PORTB.4
        'NEXT I      
    
  'PALJENJE MINUS PREDZNAKA     
    If v < 20000 then  'AKO JE TEMP VECA OD NULE NE SVIJETLI MINUS                 
    portA.0 = 0                           
    Else
    HIGH PORTA.0  'AKO JE TEMP MANJA OD NULE SVIJETLI MINUS                       
    endif
  
    GOTO Pocetak


    Merenje: 'SUBRUTINA ZA MJERENJE TEMPERATURE
       
               OWOut DQ, 1, [$CC, $BE]     ' Procitaj izmerenu temperaturu
               OWIn DQ, 0, [temperatura.LOWBYTE, temperatura.HIGHBYTE, Skip 4, count_remain, count_per_c]
' Prikazi temperaturu u DEC obliku

          temperatura = (((temperatura >> 1) * 100) - 25) + (((count_per_c - count_remain) * 100) / count_per_c)
           v=20000-temperatura
        If V >= 20000 then    ' nad 0 C.     
        Temperatura=V-20000
     Else                                   
        Temperatura=20000-V ' pod 0 C 
        EndIf 
        
        
'VARIJABLA T ZA IZDVAJANJE BROJEVA IMA VRIJEDNOST TEMPERATURA             
        t=temperatura
       
    
' Malopre procitana temperatura, pa je meri opet...
               OWOut DQ, 1, [$CC, $44]
    Return
    
end
febo26
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 207
Joined: 12-08-2008, 19:58

Re: LED DISPLEJI U MULTIPLEXU

Post by febo26 »

Jos jedno pitanjce,
negdi sam to vidio a sad vise ne mogu naci ,kako na pocetku programa napisti postavke za programator.
Znaci dok uvedem hex file u programator da mi odma budu izabrane postavke za programiranje.Da oscilator bude na HS,watchdog bude ukljucen,power on timer da bude iskljucen itd....
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: LED DISPLEJI U MULTIPLEXU

Post by Kukinjos »

Ovako nekako:

Code: Select all

         #CONFIG
         __config _HS_OSC & _WDT_ON & _PWRTE_OFF & _CP_OFF  & _BOREN_OFF
         #ENDCONFIG
:wink:
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
febo26
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 207
Joined: 12-08-2008, 19:58

Re: LED DISPLEJI U MULTIPLEXU

Post by febo26 »

Hvala na odgovoru, to je to sto mi treba da programator zapamti postavke.
Imam ja jos pitanja.Koji bi senzor za mjerenje temperature po vasem misljenu bio idealan za velike razdaljine.
Naime senzor bi trebao biti u plasteniku a ostala elektronika u kuci.Duljina kabla izmedju senzora i PICa je oko 100 metara mozda malo vise.Da li bi bilo dobro napraviti da senzor ima svoj PIC i da preko RS485 protokola salje podatke drugom PIC procesoru koji se nalazi u kuci i koji bi transceiver bio pogodan LTC485 ili nest slicno
User avatar
bob4
Stariji član
Stariji član
Posts: 2572
Joined: 31-01-2010, 16:12
Location: Kutina

Re: LED DISPLEJI U MULTIPLEXU

Post by bob4 »

Ja sam na jednom nogometnom semaforu (veliki stadion) samo podigao napon na 12V pomoću tranzistora na predajnoj strani; odnosno na prijemnoj na isti način smanjio na 5V. Informaciju sam slao serijski: DATA, CLOCK i STROBE. Mada smatram da bi 485 bilo kvalitetnije....
User avatar
electron
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 225
Joined: 28-02-2009, 19:20
Location: Serbia

Re: LED DISPLEJI U MULTIPLEXU

Post by electron »

Sta da promenim u ovom kodu

Code: Select all

'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2012 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 29.11.2012                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
       define OSC 10
       TRISA = %0000000     'Postavi sve pinove porta A kao izlazni
       TRISB = %00000000  'Postavi sve pinove porta B kao izlazne
       TRISC = $00     'Postavi sve pinove porta C kao IZLAZNI
       TRISD = $00     'Postavi sve pinove porta D kao izlazne
       TRISE = %111    'Postavi sve pinove porta E kao ulazne
       ADCON1 = 7      ' PORTA i PORTE su digitalni  ISKLJUCI KOMPARATORE I ANALOGNE ULAZE
     'VARIJABLE ZA MULTIPLEXIRANJE

        BROJ VAR WORD
        BROJ1 VAR BYTE
        BROJ2 VAR BYTE
        BROJ3 VAR BYTE
        BROJ4 VAR BYTE
        I VAR BYTE
    'VARIJABLE MJERENJA TEMPERATURE   
    symbol  DQ = PORTE.2
    V VAR WORD
    T VAR WORD
    temperatura  Var Word         ' Promen.za cuvanje izmer. temp.
    count_remain Var Byte        ' Ostatak
    count_per_c  Var Byte        ' Ostatak po stepenu C
     porta=%0000000
 
 
    OWOut DQ, 1, [$CC, $44]      ' Start merenja temperature, obavezno pre glavne petlje
    
    
    Pocetak: 
' POCETAK PROGRAMA
    gosub Merenje ' ZOVI SUBRUTINU ZA MJERENJE TEMPERATURE
'IZDVAJANJE  BROJEVA IZ TEMPERATURE ZA PRIKAZ NA DISPLEJU   
     BROJ1 = T  DIG 3
     BROJ2 = T  DIG 2
     BROJ3 = T  DIG 1
     BROJ4 = t  dig 0
'MULTIPLEKSIRANJE DISPLEJA I PRIKAZ
        PORTB=BROJ1
        HIGH PORTB.7
        PAUSE 2
        LOW PORTB.7

        PORTB=BROJ2
        HIGH PORTB.6
        PAUSE 2
        LOW PORTB.6

        PORTB=BROJ3
        HIGH PORTB.5
        PAUSE 2
        LOW PORTB.5
         
        PORTB=BROJ4
        HIGH PORTB.4
        PAUSE 2
        LOW PORTB.4
        'NEXT I      
    
  'PALJENJE MINUS PREDZNAKA     
    If v < 20000 then  'AKO JE TEMP VECA OD NULE NE SVIJETLI MINUS                 
    portA.0 = 0                           
    Else
    HIGH PORTA.0  'AKO JE TEMP MANJA OD NULE SVIJETLI MINUS                       
    endif
  
    GOTO Pocetak


    Merenje: 'SUBRUTINA ZA MJERENJE TEMPERATURE
       
               OWOut DQ, 1, [$CC, $BE]     ' Procitaj izmerenu temperaturu
               OWIn DQ, 0, [temperatura.LOWBYTE, temperatura.HIGHBYTE, Skip 4, count_remain, count_per_c]
' Prikazi temperaturu u DEC obliku

          temperatura = (((temperatura >> 1) * 100) - 25) + (((count_per_c - count_remain) * 100) / count_per_c)
           v=20000-temperatura
        If V >= 20000 then    ' nad 0 C.     
        Temperatura=V-20000
     Else                                   
        Temperatura=20000-V ' pod 0 C 
        EndIf 
        
        
'VARIJABLA T ZA IZDVAJANJE BROJEVA IMA VRIJEDNOST TEMPERATURA             
        t=temperatura
       
    
' Malopre procitana temperatura, pa je meri opet...
               OWOut DQ, 1, [$CC, $44]
    Return
    
end
Da radi na ovoj ploci http://rapidshare(dot)com/files/795485637/Mini_PIC1.rar
ali sa DS18B20 senzorom
Post Reply