Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Digitalni termometar (sonda) za PIC?

[es] :: Elektronika :: Mikrokontroleri :: Digitalni termometar (sonda) za PIC?

Strane: 1 2 3

[ Pregleda: 13843 | Odgovora: 44 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

pisac

Član broj: 13046
Poruke: 4578



+3341 Profil

icon Re: Digitalni termometar (sonda) za PIC?03.08.2009. u 12:38 - pre 179 meseci
Problem je u tome što sam ja digitalni tip, nešto slabo poznajem analognu elektroniku :-)

Zato mi digitalni senzor savršeno odgovara: Povežem, programiram, i uživam.
 
Odgovor na temu

branko_g
Merna tehnika i elektronika

Član broj: 159227
Poruke: 756
*.static-fiber.styrion.net.



+9 Profil

icon Re: Digitalni termometar (sonda) za PIC?03.08.2009. u 13:17 - pre 179 meseci
Citat:
Problem je u tome što sam ja digitalni tip, nešto slabo poznajem analognu elektroniku :-)

Zato mi digitalni senzor savršeno odgovara: Povežem, programiram, i uživam.


Pa svaki uC, ako nije najjeftiniji ima ugrađen ADC, baš za te svrhe.
Analogna tehnika bi se u slučaju KTY81 svela na još jedan otpornik male tolerancije(1% i manje) i
po RC-kolo na ulazima ADC-a. Ostalo se svodi na "Povežem, programiram, i uživam".
Uostalom evo i linka:
http://www.sprut.de/electronic/temeratur/temp.htm#ptc

 
Odgovor na temu

pisac

Član broj: 13046
Poruke: 4578



+3341 Profil

icon Re: Digitalni termometar (sonda) za PIC?03.08.2009. u 19:08 - pre 179 meseci
Ček, a kako da povežem 20 ili više analognih senzora na jedan PIC?
 
Odgovor na temu

Sepa011

Član broj: 161918
Poruke: 1817
91.148.93.*



+28 Profil

icon Re: Digitalni termometar (sonda) za PIC?03.08.2009. u 20:10 - pre 179 meseci
Posto su se pojedine kolege vezale za analogne senzore, i pocele da pominju preciznost (+/- nesto), kada su duzine kablova za komunikaciju sa DS18x20 u pitanju, ima atacmenta u temi http://www.elitesecurity.org/t370986-DSS-duzina-kabla , samo treba malko procitati.

Sto se preciznosti tice, sve, ama bas sve, se moze kalibrisati (ni Pt-100 nije apsolutno tacan, a kamoli kojekakvi KTY,...)
 
Odgovor na temu

branko_g
Merna tehnika i elektronika

Član broj: 159227
Poruke: 756
*.static-fiber.styrion.net.



+9 Profil

icon Re: Digitalni termometar (sonda) za PIC?04.08.2009. u 07:51 - pre 179 meseci
Citat:
Ček, a kako da povežem 20 ili više analognih senzora na jedan PIC?


Analognim multiplekserom? Uostalom puti Google na pašu(što bi rekao Odin_D).

Sad se ne bi upuštao u svrsishornost tog analognog rešenja u poređenju sa rešenjem na bazi BUS-veze.
Sigurno da taj princip umrežavanja više od 10 senzora preko BUS-a ima prednosti u odnosu na
čisto analogna rešenja.
Samo mi se čini da posatvljač teme(pisac) ima samo maglovitu predstavu o svom "projektu" i da nije
mislio o svim aspektima svog koncepta.
I sama predstava "Povežem, programiram, i uživam" je prilično smela, realistično je očekivati probleme,
pogotovu kada čovek veruje u sebe kao programer ali mu nedostaje znanje iz elektronike-elektrike.

Pozdrav.
Branko
 
Odgovor na temu

pisac

Član broj: 13046
Poruke: 4578



+3341 Profil

icon Re: Digitalni termometar (sonda) za PIC?04.08.2009. u 08:55 - pre 179 meseci
Problema uvek ima, ali pošto sam ja digitalni tip :-) onda ću ih mnogo lakše rešiti ako su problemi samo digitalni.

Eto, šta recimo sa dužinom kabla kod analognih senzora? Kod digitalnih mi dužina nije bitna za izračunavanje temperature: ili radi ili ne radi. Kod analognih i dužina unosi neki otpor, i taj otpor se menja sa temperaturom, a tu ulaze i neke smetnje koje mogu da izmene merenje, itd...

Ipak mi digitalno rešenje deluje mnogo jednostavnije.
 
Odgovor na temu

branko_g
Merna tehnika i elektronika

Član broj: 159227
Poruke: 756
*.static-fiber.styrion.net.



+9 Profil

icon Re: Digitalni termometar (sonda) za PIC?04.08.2009. u 10:51 - pre 179 meseci
pisac wrote:
Citat:
Eto, šta recimo sa dužinom kabla kod analognih senzora?

Izmeri se otpor tog kabla i oduzme kao konstanta od izmerene vrednosti.
Citat:
Kod digitalnih mi dužina nije bitna za izračunavanje temperature: ili radi ili ne radi.

Za izračunavanje temperature ne, ali za stabilnost te serijske komunikacije je i te kako
bitno kakav kabel se koristi i kako i gde se polaže. Kažem još jednom za stabilnost veze,
jer se može desiti da veza radi mesecima i onda počinje da brlja , bez vidnog razloga, da bi posle nekog vremena potpuno "pukla".
Ili recimo radi sve lepo i ti se odlučiš da priključiš još jedan senzor, za recimo merenje spoljne temperature,
provučeš kabel, spojiš ga kad ono više ne funkcionira komunikacija ni sa jednim senzorom.

Ne kažem da do toga mora doći, ali je tvoja predstava o "digitalnom svetu" koji radi ili ne radi prilično optimistična.
Naprotiv, to što se dešava na BUS-u je čista analogna tehnika sa stojim karakteristikama: vreme uspona i pada
signala, specifični otpor induktivitet i kapacitet kablova, refleksija...
Ti singali na BUS-u su čisto analogni i tek se u PIC-u ili senzoru pretvaraju u digitalne i od tih
analognih vrednosti se onda rekonstruiše ne samo logički nivo nego i samo trajanje impulsa.
Sam 1-wire bus je prilično neotporan na spoljašnje smetnje i kao "kućni bus" ne predstavlja najbolje
rešenje, kao uostalom i TWI(I2C).
Za to je bolje koristiti BUS koji radi na principu diferencije napona signala(RS485, CAN) jer se kod
njih injektovane smetnje potiskuju za faktor 100 pa naviše.

Jeste da je rešenje sa analognim senzorima komplikovanjie, što se tiče polaganja kablova,
ali se sa druge strane injektovane smetnje daju eliminisati jednostavnim RC-kolima.
Kod BUS sistema(bilo koje vrsta) je to nemoguće.

Probaj da napraviš to sve "na otvorenom" pa se javi sa rezultatima.

Posdrav.

P.S. Da li je neko od vas i napravio takav sličan 1-wire sistem koji uspešno radi?

 
Odgovor na temu

pisac

Član broj: 13046
Poruke: 4578



+3341 Profil

icon Re: Digitalni termometar (sonda) za PIC?10.03.2012. u 22:38 - pre 147 meseci
Evo da javim da od septembra prošle godine rade senzori, ali spojeni na PC, gde se i loguju temperature u MySQL.

Ima ih (za sada) aktivnih 35 komada, ali je samo 17 pravih senzora koji su u zidovima i podovima, a ostali su samo ubodeni na testnoj ploči i čekaju ugradnju dok u međuvremenu pune bazu sa temperaturama (taman da pratim kolike se razlike javljaju među senzorima).

Rade u parazitnom režimu, preko open source softvera i prostog adaptera koji se nalemi na bus i bocne u serijski port.

E, sada, greške u radu:

U početku je 35 senzora bilo maksimum koji je mogao da se nakači, jer je preko tog broja čitanje trajalo predugo i gazilo ga je sledeće čitanje (čita se iz cron-a svakih 5 minuta). Čitanje je naravno trajalo predugo zbog grešaka i ponavljanja, a ne zbog broja senzora. Međutim, mislim da je uzrok tome bila sama testna ploča (na kojoj je 18 senzora) a ne pravi senzori na kablu. Preraspoređivanjem senzora na testnoj ploči i boljim vezivanjem kabla koji je do nje vodio, izgleda da je taj problem rešen. Sada (već mesecima) čitanje svih 35 senzora traje 38-45 sekundi.

Posle par meseci dva senzora koja su blizu jedan drugog u betonu, izgubili su rezoluciju, odnosno umesto 16 koraka u jednom oC, sada rade samo na 8 koraka. Recimo: temperatura sa 20 skoči na 20.125 pa na 20.25, i tako dalje, umesto da ide 20->20.0625->20.125->20.1875->20.25.

Sem toga, u proseku se jednom dnevno dešava da neki (bilo koji) senzor očita 85oC (tj. ne očita temperaturu), Ali to i nije strašno, jer se čitanje obavlja svakih 5 minuta na 35 senzora, odnosno 10080 čitanja dnevno, pa je procenat pogrešnih čitanja dakle 0.1‰

Međutim, ima jedan senzor (u gipsanom zidu) koji je počeo da pravi ozbiljnije ispade. U Januaru je u jednom čitanju dao 52.125oC, iako je pre i posle radio sasvim tačno. U Februaru je već 3 puta zeznuo, i to gadnije: Prvo je 19.februara u jednom trenutku izmerio 530oC, pa je 20.februara izmerio -1511.25oC, a 27.februara -1638.25oC. Inače, i pre i posle svakog tog pogrešnog čitanja daje sasvim normalne vrednosti.

Inače, kada pustim neki uređaj u kući da varniči i pravi smetnje na električnoj mreži (recimo prekidač za svetlo držim na granici tako da varniči), onda se nekada dešavaju greškice u čitanju ponekog senzora koje se svode na to da temperatura bude veća za nekoliko koraka. Recimo umesto 20 očita se 20.1875
 
Odgovor na temu

ZAS011
Uzgajivač šargarepe izakuće
Vanuatu

Član broj: 288510
Poruke: 4543

ICQ: 8713400
Sajt: www.justfuckinggoogleit.c..


+530 Profil

icon Re: Digitalni termometar (sonda) za PIC?11.03.2012. u 08:43 - pre 147 meseci
@pisac
Cini mi se da imas povremenih problema sa komunikacijom.
Citat:
Prvo je 19.februara u jednom trenutku izmerio 530oC, pa je 20.februara izmerio -1511.25oC, a 27.februara -1638.25oC.

Ovo nisu moguce vrednosti koje DS18B20 moze da posalje na 1-wire bus. Pretresi malko program koji ti iscitava senzore i izfiltriraj sve sto ima vise od 12 bit-a u rezultatu.
A mozes i da skratis vreme iscitavanja senzora ,a nacin kako ti je to Stojan svojevremeno napisao
Citat:
1. Reset (inicijalizacija svih senzora)
2. Skip ROM (adresira sve senzore)
3. Convert T (pocetak merenja za sve senzore)
4. Sacekati dok svi senzori ne zavrse konverziju i ne puste liniju

5. Reset (inicijalizacija svih senzora)
6. Match ROM (adresiranje samo zeljenog senzora)
7. Read scratchpad (citanje temperature samo iz zeljenog senzora)

Tacke od 5 do 7 ponavljaju se za svaki pojedinacni senzor.
Potrebno je naravno prilikom pocetne inicijalizacije mikrokontrolera
iscitati ROM kod svakog pojedinacnog senzora kako biste ih uopste
mogli pojedinacno adresirati.

Inace, mnogo je lepse napojiti senzore trozicno, pasiva je ok za 1 senzor ali za vise od toga trozicno.
--
Make no mistake between my personality and my attitude.
My personality is who I am.
My attitude depends on who you are.
 
Odgovor na temu

pisac

Član broj: 13046
Poruke: 4578



+3341 Profil

icon Re: Digitalni termometar (sonda) za PIC?23.03.2012. u 20:27 - pre 146 meseci
Ma ko će da kopa po sorsu, ne stižem ni ovo što radim za pare a kamoli ovo što mi je hobi

Evo svih pogrešno izmerenih vrednosti (ne računajući 85oC što sam izbacio iz spiska):

Code:

mysql> select * from T where (temp>"35" or temp<"-15") and temp!="85" order by vreme;
+---------------------+------------+-----------+
| vreme               | temp       | ime       |
+---------------------+------------+-----------+
| 2012-01-22 21:40:51 |    52.1250 | Sobica_Z2 |
| 2012-02-19 15:30:48 |   530.0000 | Sobica_Z2 |
| 2012-02-20 16:55:44 | -1511.2500 | Sobica_Z2 |
| 2012-02-27 17:20:46 | -1638.2500 | Sobica_Z2 |
| 2012-03-22 14:10:42 | -1217.1875 | Sobica_P2 |
+---------------------+------------+-----------+


Eto, u međuvremenu se pojavila čudna vrednosti i na podnom senzoru (Sobica_P2) koji je inače u istom delu prostorije kao zidni senzor (Sobica_Z2), samo u podu

Ne razumem baš tu logiku, u Sobi dva senzora koja su relativno blizu jedan drugome su izgubili rezoluciju, a ovde dva senzora (opet blizu jedan drugome) pokazuju čudne vrednosti. A pri tome ni na jednom mestu nema nekakvog zračenja, čak nisu ni blizu strujnih utičnica.

Jedina činjenica koja može da znači nešto, jeste da su ta dva senzora u Sobici spojena na isti čvor, i pri tome je taj čvor zadnji. Odnosno, tu je (za sada) kraj magistrale. A ova dva senzora koja su igubila rezoluciju su na drugom čvoru magistrale koji je oko 5m od prvog čvora. Na prvom čvoru je spojen kompjuter, jedan podni senzor, i probna ploča sa nabodenim ostalim senzorima.
 
Odgovor na temu

ZAS011
Uzgajivač šargarepe izakuće
Vanuatu

Član broj: 288510
Poruke: 4543

ICQ: 8713400
Sajt: www.justfuckinggoogleit.c..


+530 Profil

icon Re: Digitalni termometar (sonda) za PIC?23.03.2012. u 22:14 - pre 146 meseci
Ti ne citas sta ti se pise, ili nisi dobro procitao datasheet.

530 stepeni i -hiljaduikusur nisu moguce vrednosti koje senzor moze da posalje. Negde ti je matematika preracunavanja losa.

'Vako se cita senzor sa PIC-om

Code:
IscitajSenzor:
    OWrite Dq, 1, [$CC,$44]
    Repeat
        DelayMS 25
        ORead Dq, 4, [C]
    Until C <> 0
    OWrite Dq, 1, [$CC, $BE]
    ORead Dq, 2, [Temperature.LowByte,Temperature.HighByte]
    Temperature = Temperature & %0000111111111111     <=== Maskiranje 12 bitova
    If Temperature.11 = 1 Then
        Predznak = "-"
        Temperature = ~Temperature + 1
    Else
        Predznak = "+"
    EndIf
    Celo = Temperature >> 4
    Deci = (Temperature.LowByte & %00001111) * 100 / 16
Return


prikaz gornjega je sa 2 decimale.

Kao sto se moze videti, u "opticaju" je samo 12 bitova

[Ovu poruku je menjao ZAS011 dana 25.03.2012. u 13:13 GMT+1]
--
Make no mistake between my personality and my attitude.
My personality is who I am.
My attitude depends on who you are.
 
Odgovor na temu

pisac

Član broj: 13046
Poruke: 4578



+3341 Profil

icon Re: Digitalni termometar (sonda) za PIC?24.03.2012. u 22:25 - pre 146 meseci
Heh, razumem ja tebe, ali je zanimljiva stvar što se to dešava samo na tom jednom senzoru (u stvari, sad su dva senzora, oba na istoj tački).

Sors je poveliki... samo glavni program ima 2900 linija, a ima i dodatnih fajlova.

Evo ovo je valjda suština, ako sam dobro utvrdio ovako na brzinu, pa ako imaš vremena i entuzijazma za kopanje po sorsu... :


Code:

/* -----------------------------------------------------------------------
   Read the temperature from one sensor

   Return the high-precision temperature value

   Calculated using formula from DS1820 datasheet

   Temperature   = scratchpad[1]
   Sign          = scratchpad[2]
   TH            = scratchpad[3]
   TL            = scratchpad[4]
   Count Remain  = scratchpad[7]
   Count Per C   = scratchpad[8]
   CRC           = scratchpad[9]
   
                   count_per_C - count_remain
   (temp - 0.25) * --------------------------
                       count_per_C

   If Sign is not 0x00 then it is a negative (Centigrade) number, and
   the temperature must be subtracted from 0x100 and multiplied by -1
   ----------------------------------------------------------------------- */
int read_temperature( int sensor_family, int sensor )
{
  char    temp[1024];              /* For output string                    */
  unsigned char lastcrc8,
                scratchpad[30],    /* Scratchpad block from the sensor     */
                TempSN[8];
  int     x,
          j,
          try,                     /* Number of tries at reading device    */
          strong_err,              /* Error with strong pullup?            */
          ds1820_try,              /* Allow ds1820 glitch 1 time           */
          ds18s20_try;             /* Allow DS18S20 error 1 time           */
  float   temp_c,                  /* Calculated temperature in Centigrade */
          hi_precision;

  x = 0;  
  ds1820_try = 0;
  ds18s20_try = 0;  
  temp_c = 0;
  
  for( try = 0; try < MAX_READ_TRIES; try++ )
  {
    if( owAccess(0) )
    {
      /* Convert Temperature */
      if( !owWriteBytePower( 0, 0x44 ) )
      {
        return FALSE;
      }

      /* Sleep for conversion second */
      msDelay( read_time );
      
      /* Turn off the strong pullup */
      if( owLevel( 0, MODE_NORMAL ) != MODE_NORMAL )
      {
        strong_err = 2;
      }


      /* Now read the scratchpad from the device */
      if( owAccess(0) )
      {
/* Use Read_Scratchpad instead? */
        /* Build a block for the Scratchpad read */
        scratchpad[0] = 0xBE;
        for( j = 1; j < 10; j++ )
          scratchpad[j] = 0xFF;

        /* Send the block */
        if( owBlock( 0, FALSE, scratchpad, 10 ) )
        {
          /* Calculate the CRC 8 checksum on the received data */
          setcrc8(0, 0);
          for( j = 1; j < 10; j++ )
            lastcrc8 = docrc8( 0, scratchpad[j] );

          /* If the CRC8 is valid then calculate the temperature */
          if( lastcrc8 == 0x00 )
          {
            /* DS1822 and DS18B20 use a different calculation */
            if( (sensor_family == DS18B20_FAMILY) ||
                (sensor_family == DS1822_FAMILY) ||
                (sensor_family == DS28EA00_FAMILY) ||
                (sensor_family == DS1923_FAMILY) )
            {
              short int temp2 = (scratchpad[2] << 8) | scratchpad[1];
              temp_c = temp2 / 16.0;
            }

            /* Handle the DS1820 and DS18S20 */
            if( sensor_family == DS1820_FAMILY )
            {
              /* Check for DS1820 glitch condition */
              /* COUNT_PER_C - COUNT_REMAIN == 1 */
              if( ds1820_try == 0 )
              {
                if( (scratchpad[7] - scratchpad[6]) == 1 )
                {
                  ds1820_try = 1;
                  continue;
                } /* DS1820 error */
              } /* ds1820_try */
            
              /* Check for DS18S20 Error condition */
              /*  LSB = 0xAA
                  MSB = 0x00
                  COUNT_REMAIN = 0x0C
                  COUNT_PER_C = 0x10
              */
              if( ds18s20_try == 0 )
              {
                if( (scratchpad[4]==0xAA) &&
                    (scratchpad[3]==0x00) &&
                    (scratchpad[7]==0x0C) &&
                    (scratchpad[8]==0x10)
                  )
                {
                  ds18s20_try = 1;
                  continue;
                } /* DS18S20 error condition */
              } /* ds18s20_try */
          
              /* Convert data to temperature */
              if( scratchpad[2] == 0 )
              {
                temp_c = (int) scratchpad[1] >> 1;
              } else {
                temp_c = -1 * (int) (0x100-scratchpad[1]) >> 1;
              } /* Negative temp calculation */
              temp_c -= 0.25;
              hi_precision = (int) scratchpad[8] - (int) scratchpad[7];
              hi_precision = hi_precision / (int) scratchpad[8];
              temp_c = temp_c + hi_precision;
            } /* DS1820_FAMILY */
            
            /* Log the temperature */
            switch( log_type )
            {
              /* Multiple Centigrade temps per line */
              case 2:     sprintf( temp, "\t%3.2f", temp_c );
                          log_string( temp );
                          break;

              /* Multiple Fahrenheit temps per line */
              case 3:     sprintf( temp, "\t%3.2f", c2f(temp_c) );
                          log_string( temp );
                          break;

              default:    owSerialNum( 0, &TempSN[0], TRUE );
                          log_temp( sensor, temp_c, TempSN );
                          break;
            } /* switch( log_type ) */

            /* Show the scratchpad if verbose is seelcted */
            if( opts & OPT_VERBOSE )
            {
              show_scratchpad( scratchpad, sensor_family );              
            } /* if OPT_VERBOSE */

            /* Good conversion finished */
            return TRUE;
          } else {
            fprintf( stderr, "CRC Failed. CRC is %02X instead of 0x00\n", lastcrc8 );

            if (try == MAX_READ_TRIES - 1)
            {
              /* need to output something (0,-,NaN?) to keep columns consistent */
              switch( log_type )
              {
                /* Multiple Centigrade temps per line */
                case 2:
                 /* Multiple Fahrenheit temps per line */
                 case 3:     sprintf( temp, "\t%3.2f", (double) 0 );
                             log_string( temp );
                             break;
             
                 default:
                             break;
               } /* switch( log_type ) */
            } /* if tries == max_read_tries */

            if( opts & OPT_VERBOSE )
            {
              show_scratchpad( scratchpad, sensor_family );              
            } /* if OPT_VERBOSE */
          } /* CRC 8 is OK */
        } /* Scratchpad Read */
      } /* owAccess failed */
    } /* owAccess failed */
    
    /* Failed to read, rest the network, delay and try again */
    owTouchReset(0);
    msDelay( read_time );
  } /* for try < 3 */
  
  /* Failed, no good reads after MAX_READ_TRIES */
  return FALSE;
}
 
Odgovor na temu

ZAS011
Uzgajivač šargarepe izakuće
Vanuatu

Član broj: 288510
Poruke: 4543

ICQ: 8713400
Sajt: www.justfuckinggoogleit.c..


+530 Profil

icon Re: Digitalni termometar (sonda) za PIC?25.03.2012. u 07:53 - pre 146 meseci
@pisac: Napisi koju varijantu senzora koristis (mislim na srednje slovo :) S ili B) ne vidi se iz ovog parceta sorsa sto si prikacio.
--
Make no mistake between my personality and my attitude.
My personality is who I am.
My attitude depends on who you are.
 
Odgovor na temu

goran_68

Član broj: 89012
Poruke: 932
*.dynamic.isp.telekom.rs.



+81 Profil

icon Re: Digitalni termometar (sonda) za PIC?25.03.2012. u 10:34 - pre 146 meseci
Da li nekad dobijes poruku da je crc los "CRC Failed. CRC is %02X instead of 0x00"? Posle tog dela koda sledi:

if (try == MAX_READ_TRIES - 1)
{
/* need to output something (0,-,NaN?) to keep columns consistent */
switch( log_type )
{
/* Multiple Centigrade temps per line */
case 2:
/* Multiple Fahrenheit temps per line */
case 3: sprintf( temp, "\t%3.2f", (double) 0 ); izvrsice se ovo, a to bi mogla da bude greska
log_string( temp );
break;

default:
break;
} /* switch( log_type ) */
} /* if tries == max_read_tries */

gorankg
 
Odgovor na temu

ZAS011
Uzgajivač šargarepe izakuće
Vanuatu

Član broj: 288510
Poruke: 4543

ICQ: 8713400
Sajt: www.justfuckinggoogleit.c..


+530 Profil

icon Re: Digitalni termometar (sonda) za PIC?25.03.2012. u 13:32 - pre 146 meseci
Deo koda koji je pisac prikacio mi deluje kao Copy/Paste iz nekog drugog programa ili primera, bez da je sredjen kako bi trebalo.

Normalnom matematikom nije moguce dobiti -1638.2500, to je vise od 12 bitova ukupno, odnosno 7 bitova celobrojne temperature!

Evo jednog kostura programa kako bi to ja odradio (nedostaju komunikacione rutine, i jos svastanesto)

Code:
Device 16F877A
Xtal 4
All_Digital True
PortB_Pullups False

Symbol Dq            PORTA.0

' DS 18B20 Commands
Dim ReadROM            As $33
Dim MatchRom        As $55
Dim SkipROM            As $CC
Dim DearchROM        As $F0
Dim SearchAlarm        As $EC

Dim StartConversion    As $44
Dim WriteScratchPad As $4E
Dim ReadScratchPad    As $BE
Dim CopyScratchPad    As $48
Dim RecallEE        As $B8
Dim ReadPowerSupply    As $B4

Dim StartData        As $1E00

Dim SensorPos        As Word
Dim C                As Byte
Dim Predznak        As Byte
Dim Temperature        As Word
Dim Celo            As Byte
Dim Deci            As Byte
Dim SN[8]            As Byte
Dim i                As Byte




Clear
GoTo Glavni
'****************************************************************
'* Podprogrami                                                  *
'****************************************************************
IscitajSenzor:
    OWrite Dq, 1, [MatchRom, SN[0], SN[1], SN[2], SN[3], SN[4], SN[5],SN[6], SN[7], ReadScratchPad]
    ORead Dq, 2, [Temperature.LowByte,Temperature.HighByte]
    Temperature = Temperature & $0FFF    ' Maskiranje 12 potrebnih bitova
    If Temperature.11 = 1 Then
        Predznak = "-"
        Temperature = ~Temperature + 1    ' ukoliko je temperatura negativna, drugi komplement
    Else
        Predznak = "+"
    EndIf
    Celo = Temperature >> 4
    Deci = (Temperature.LowByte & %00001111) * 100 / 16
Return

StartujMerenje:
    OWrite Dq, 1, [SkipROM, StartConversion]
Return

PosaljiPodatak:

Return
'****************************************************************
'* Glavna programska petlja                                     *
'****************************************************************
Glavni:
SensorPos = StartData

GoSub StartujMerenje
DelayMS 1000
For i = 1 To 40
    SN[0] = CRead SensorPos
    Inc SensorPos
    SN[1] = CRead SensorPos
    Inc SensorPos
    SN[2] = CRead SensorPos
    Inc SensorPos
    SN[3] = CRead SensorPos
    Inc SensorPos
    SN[4] = CRead SensorPos
    Inc SensorPos
    SN[5] = CRead SensorPos
    Inc SensorPos
    SN[6] = CRead SensorPos
    Inc SensorPos
    SN[7] = CRead SensorPos
    If i < 40 Then
        Inc SensorPos
    Else
        SensorPos = StartData
    EndIf
    GoSub IscitajSenzor
    GoSub PosaljiPodatak
Next i
End

' Blok sa Serijskim brojevima senzora, sa sve CRC bajtom
Org StartData
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0


Pisano u Proton+
--
Make no mistake between my personality and my attitude.
My personality is who I am.
My attitude depends on who you are.
 
Odgovor na temu

pisac

Član broj: 13046
Poruke: 4578



+3341 Profil

icon Re: Digitalni termometar (sonda) za PIC?25.03.2012. u 14:18 - pre 146 meseci
To parče sorsa je iz digitemp.c iz softvera digitemp-3.6.0

Koristim 18B20

CRC greške su se vrlo retko javljale ranije, dok je bilo poteškoća sa očitavanjem u 5 minuta, ali tada nije bilo ovakvih vrednosti. Očitavanje se vrši iz cron-a, i sada je stavljeno &2>1 tako da i kada bi bilo CRC greški ne bih znao za njih. Evo sad sam stavio da mi prikazuje greške, da vidim da li ih ima.
 
Odgovor na temu

ZAS011
Uzgajivač šargarepe izakuće
Vanuatu

Član broj: 288510
Poruke: 4543

ICQ: 8713400
Sajt: www.justfuckinggoogleit.c..


+530 Profil

icon Re: Digitalni termometar (sonda) za PIC?25.03.2012. u 15:11 - pre 146 meseci
Aux, dobar ti taj mikrokontroler zvani PC

hebote, sto ne napisa odmah da je PC a ne PIC, izlomi' mozak za nista
--
Make no mistake between my personality and my attitude.
My personality is who I am.
My attitude depends on who you are.
 
Odgovor na temu

goran_68

Član broj: 89012
Poruke: 932
*.dynamic.isp.telekom.rs.



+81 Profil

icon Re: Digitalni termometar (sonda) za PIC?25.03.2012. u 15:44 - pre 146 meseci
Pogresio sam u vezi onog dela koda. Nisam pazljivo gledao. Sad sam skinuo ceo sors pa sam detaljnije pogledao.
gorankg
 
Odgovor na temu

pisac

Član broj: 13046
Poruke: 4578



+3341 Profil

icon Re: Digitalni termometar (sonda) za PIC?25.03.2012. u 18:49 - pre 146 meseci
Citat:
ZAS011: Aux, dobar ti taj mikrokontroler zvani PC

hebote, sto ne napisa odmah da je PC a ne PIC, izlomi' mozak za nista


Pa napisao sam , eno pogledaj prvi post iz ove godine. Zbunio te naslov... na početku trebalo je da bude PIC, ali trenutno je samo PC
 
Odgovor na temu

ZAS011
Uzgajivač šargarepe izakuće
Vanuatu

Član broj: 288510
Poruke: 4543

ICQ: 8713400
Sajt: www.justfuckinggoogleit.c..


+530 Profil

icon Re: Digitalni termometar (sonda) za PIC?25.03.2012. u 19:07 - pre 146 meseci
Mmmm da, PIC/PC slicno se pise

i dalje stojim iza tvrdnje da pre nego sto pocnes da radis bilokakvu matematiku sa RAW podacima sa senzora, prvo AND-ujes te RAW podatke sa 0x0FFF kako bi eliminisao najvisa 4 bita.
Video si da ja to radim i kada je PIC u pitanju.
--
Make no mistake between my personality and my attitude.
My personality is who I am.
My attitude depends on who you are.
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: Digitalni termometar (sonda) za PIC?

Strane: 1 2 3

[ Pregleda: 13843 | Odgovora: 44 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.