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

PIC16f876a i analogni temperaturni senzor LM35CZ, ako neko moze pomoci

[es] :: Elektronika :: Mikrokontroleri :: PIC16f876a i analogni temperaturni senzor LM35CZ, ako neko moze pomoci

[ Pregleda: 4703 | Odgovora: 17 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

voxi

Član broj: 67178
Poruke: 328
*.teol.net.



Profil

icon PIC16f876a i analogni temperaturni senzor LM35CZ, ako neko moze pomoci27.05.2007. u 23:17 - pre 205 meseci
Ovako pocetnik sam u ovoj oblasti, od sad sam uspeo povezati LCD 2x16 za Pic i to radi (8-bitna komunikacija). E sad pokusavam da povezem LM35CZ temperaturni analogni senzor sa pic-om.
Uradio sam sledece: senozer sam povezao tako sto sam +Vs povezao na 5V, Vout na pin RA0 i GND povezao na uzemljenje.
Zatim sam napisao program u PIC C koiji cita A/D konverziju i na displej ispisuje M ako je procitao nesto razlicito od 0, a ako nije onda ispisuje G (ovo je cisto samo da vidim da li mi radi, to jest da li uzima podatke). Medjutim javlja se problem sto on stalno ispisuje M i kad odkopcam senzor, da li neko zna gde je problem? Evo i kod :

Code:

#include <16f876A.h>
#device adc=10 
#use delay(clock=20000000)
//#byte adrl=0x9E


upisI(){

   delay_ms(30);
   output_bit(pin_c7,1);
   output_bit(pin_c7,0);
   delay_ms(30);

}

upisData(int8 data){

   output_b(data);
   delay_ms(30);
   output_bit(pin_c5,1);  //upis podatka
   output_bit(pin_c6,0);  //upis
   output_bit(pin_c7,1);  //enable
   output_bit(pin_c7,0);
   delay_ms(30);

}
void main(){

   int16 value;
   byte vl1;
   delay_ms(40);

  ///Pocinje incijalizacija za LCD

   //set function
   output_c(0x00);
   output_b(0x30);
   upisI();
   output_b(0x00);

   //0011NFXX
   output_b(0x3c);
   upisI();
   output_b(0x00);

  // delay_ms(20);

   //dyspaly on/of
   output_b(0x08);
   upisI();
   output_b(0x00);

   //clear display
   output_b(0x01);
   upisI();
   output_b(0x00);

   //on display
   output_b(0x0c);
   upisI();
   output_b(0x00);

   //0 0 0 0 0 1 I/D S
   output_b(0x06);
   upisI();
   output_b(0x00);
 
  ///ZAVRSENA INICJALIZACIJA ZA LCD
  
//*********************************************************

  //GLEDAJ TE OVAJ DEO KODA SAMO OVO GORE RADI

  ///RAD SA AD KONVERTOROM

    setup_adc_ports( ALL_ANALOG );
 
    setup_adc( ADC_CLOCK_INTERNAL);
    setup_adc_ports( ALL_ANALOG);
    set_adc_channel(0);


    vl1=0; 
     
    while (true){

      delay_ms(200);
      value=read_adc();
      vl1=value;

      if (value!=0){
         upisData(0x4d);
      }
      else{
           upisData(0x47);
      }
 

  }
 

}



Ajd ako mozete pomozite
 
Odgovor na temu

pelctronics
Beograd

Član broj: 133821
Poruke: 74
*.astra-net.com.



Profil

icon Re: PIC16f876a i analogni temperaturni senzor LM35CZ, ako neko moze pomoci28.05.2007. u 09:50 - pre 205 meseci
Taj CCS-c kompajler ima dosta Bagova!!!Probaj sa drugim da iskompajliras.

Proveri IF petlju mislim da ti netrebaju zagrade if (value!=0)
upisData(0x4d);
else
upisData(0x47);

Proveri te zagrade.
tu ti je greska.


Pozdrav.
 
Odgovor na temu

voxi

Član broj: 67178
Poruke: 328
*.skaut.net.



Profil

icon Re: PIC16f876a i analogni temperaturni senzor LM35CZ, ako neko moze pomoci28.05.2007. u 10:46 - pre 205 meseci
Do zagrada nije isot se ponasa. Ono sto me interesuje jeste da li sam dobro prikljucio senozr onako kako sam opisao u 1 postu. Koji PIC-c kompajler preporucujes.
A vidi ovo kako on vrsi citanje A/D konverzije (ovo je ASM koji napravi PIC-c):

Code:

                           //promenjliva value smestena je na lokaciji 0x21 i 0x22

....................       value=read_adc();
00BE:  BSF    1F.2  //setovanje bita ADCON0,GO za startovanje konverzije
00BF:  BTFSC  1F.2 //ipitivanje da li je zavrsena konverzija
00C0:  GOTO   0BF
00C1:  BSF    03.5
00C2:  MOVF   1E,W
00C3:  BCF    03.5
00C4:  MOVWF  21
00C5:  MOVF   1E,W
00C6:  MOVWF  22



On ovde 2 puta cita isti bajt 1E (1E=ADRESH) i to upisuje u nizi i vise bajt "value" sto nije dobro, jer morao bih da cita sa i ADRESL nizi bajt konverzije. Dobro ovo je greska ali se moze ispraviti lako.

Evo kod koji vrsi ispitivanje if uslova

Code:


00C9:  MOVF   21,F  
00CA:  BTFSS  03.2  // ispituje Z fleg STATUS registra da li je 0 ako jest preksace 
                            //sledecu lijiju koda to jest ne ide naupis
                            //slova M
00CB:  GOTO   0CF  
00CC:  MOVF   22,F  //upisuje drugi bajt od VALUE
00CD:  BTFSC  03.2  //ispituje Z fleg STATUS registra da li je 0 ako jest preksace sledecu 
                            //ijiju koda to jest ne ide naupis
                            //slova G
00CE:  GOTO   0D3  



To je ono sto izgleda tebi pelctronics kao kriticno ali sad gledajuci ovaj ASM to je ispravno da nije negde drugo greska?




 
Odgovor na temu

pelctronics
Beograd

Član broj: 133821
Poruke: 74
*.astra-net.com.



Profil

icon Re: PIC16f876a i analogni temperaturni senzor LM35CZ, ako neko moze pomoci28.05.2007. u 14:17 - pre 205 meseci

Ovo pise u uputsvu za CCS-c.

Specifies the channel to use for the next READ_ADC call. Be aware that you must wait a short time after changing the channel before you can get a valid read. The time varies depending on the impedance of the input source. In general 10us is good for most applications. You need not change the channel before every read if the channel does not change.

set_adc_channel(2);

delay_us(10);

value = read_adc();


Hi-tech c ili mikrochipov c16,18,30 ili svetski a nas pic c mikroelektronika.

Dobro si povezao senzor trebalo bi da daje 10mv po stepenu c(izmeri ako imas cime)

Tu vrednost moras da pretvoris u mv pa onda u stepene celzius(podelis sa 10) pa pretvoris u string tek onda da saljes na lcd.

Eksperimentisi probaj dao po dao koda ,postavi vrednost value na nulu pa probaj sta kaze!

Pozdrav
 
Odgovor na temu

alnaser

Član broj: 16747
Poruke: 33
91.191.29.*



Profil

icon Re: PIC16f876a i analogni temperaturni senzor LM35CZ, ako neko moze pomoci28.05.2007. u 14:48 - pre 205 meseci
prije samog programiranja PIC-a moras provjeriti jednu stvar.
jesi li siguran da navedeni senzor mozes direktno spojiti na PIC?
prikljuci senzor i mjeri izlazni napon.
PIC16f876a ima 10-to bitni a/d konvetor tj. ima rezoliciju od 4.8mV.
tvoj senzor mora imati za povecanje temperature od jednog stepena, povecanje napona vise od 4.8mV

pretpostavljam da to ovaj senzor nema i predlazem da signal iz senzora prvo pojacas nekim operacionim pojacalom
npr. ua741, a izlaz i pojacala dovedes na ulaz PIC-a.

Pozdrav
 
Odgovor na temu

pelctronics
Beograd

Član broj: 133821
Poruke: 74
*.astra-net.com.



Profil

icon Re: PIC16f876a i analogni temperaturni senzor LM35CZ, ako neko moze pomoci28.05.2007. u 15:02 - pre 205 meseci
Poslacu ti semu povezivanja tog senzora koliko se secam 10mv je izlaz po stepenu celzijusa znaci mozes direktno da ga uvedes u pic, znaci 20 stepeni 200mv.Kad iskljucis senzor povezi preko 10k na masu taj pin.

Pozz.
 
Odgovor na temu

voxi

Član broj: 67178
Poruke: 328
*.skaut.net.



Profil

icon Re: PIC16f876a i analogni temperaturni senzor LM35CZ, ako neko moze pomoci28.05.2007. u 15:31 - pre 205 meseci
Evo datasheet od zenozora
Prikačeni fajlovi
 
Odgovor na temu

pelctronics
Beograd

Član broj: 133821
Poruke: 74
*.astra-net.com.



Profil

icon Re: PIC16f876a i analogni temperaturni senzor LM35CZ, ako neko moze pomoci28.05.2007. u 16:39 - pre 205 meseci
A=0 i A==0 su dve razlicite stvari u C jeziku!

Aj probaj ovako:

if (value!==0){
upisData(0x4d);
}
else{
upisData(0x47);
}


Prvi dodeljuje vrednost 0 a drugi testira dali je 0!

Poz
 
Odgovor na temu

voxi

Član broj: 67178
Poruke: 328
*.net
Via: [es] mailing liste



Profil

icon Re: PIC16f876a i analogni temperaturni senzor LM35CZ, ako neko moze pomoci28.05.2007. u 16:46 - pre 205 meseci
Znam da je A=0 i A==0 razlictio ali A!=0 je samo suprotno od A==0 to jest
razlicitio, tako da je ono sto sam napiso ispravno a A!==0 je sintakosno
neispravno jer nema troznaka u C jeziku (dobro ima a+++b);
 
Odgovor na temu

pelctronics
Beograd

Član broj: 133821
Poruke: 74
*.astra-net.com.



Profil

icon Re: PIC16f876a i analogni temperaturni senzor LM35CZ, ako neko moze pomoci28.05.2007. u 22:11 - pre 205 meseci
Pardon mislio sam na ovo

if (!value==0){
upisData(0x4d);
}
else{
upisData(0x47);
}

Poz.
 
Odgovor na temu

voxi

Član broj: 67178
Poruke: 328
*.net
Via: [es] mailing liste



Profil

icon Re: PIC16f876a i analogni temperaturni senzor LM35CZ, ako neko moze pomoci28.05.2007. u 22:26 - pre 205 meseci
Nema da brines radi i ovo !=. Sad sam testiro ovo radi kako mi se sad cini
samo ako mozes de mi sad napisi forumulu kako se racuna temperatura na
osnovu ovih 10 Bit-a
 
Odgovor na temu

voxi

Član broj: 67178
Poruke: 328
*.net
Via: [es] mailing liste



Profil

icon Re: PIC16f876a i analogni temperaturni senzor LM35CZ, ako neko moze pomoci28.05.2007. u 22:34 - pre 205 meseci
E skonto sam zasto u onoj konverziji nema ADRESL podataka (to jest u nizem
bajtu A/D konverzije), zato sto je bit 7 ADCON1 registra resetovan a to
znaci da se radi levo poravnanje to jest tizi bajt ADRESH je pun a nizi drzi
samo 2 bita. E sad koliko ova 2 bita mogu imati utacaja na konacni rezultat
ako se ne koriste?
 
Odgovor na temu

grabik

Član broj: 32507
Poruke: 311
80.80.60.*



+7 Profil

icon Re: PIC16f876a i analogni temperaturni senzor LM35CZ, ako neko moze pomoci29.05.2007. u 05:48 - pre 205 meseci
Neku veliku preciznost neces dobiti ako ti je referentni napon 5V i ako stavis minimalni 2,5V neces puno poboljsati stvar.
Za 5V referentni napon ces dobiti rezoluciju adc od 5/1024=4,88mV a za ref 2,5V/1024=2,44mV a rezolucija LM35 ti je 1mv.





***********************************
int izmjeren_adc;

izmjeren_adc=ADRESH << 8;
izmjeren_adc=izmjeren_adc + ADRESL;
************************************

jedan od nacina kako to mozes napraviti.

 
Odgovor na temu

voxi

Član broj: 67178
Poruke: 328
*.net
Via: [es] mailing liste



Profil

icon Re: PIC16f876a i analogni temperaturni senzor LM35CZ, ako neko moze pomoci29.05.2007. u 14:11 - pre 205 meseci
Sovim gore sta si naveo hteo si mi da pokazes samo kako uzmem i ona dva bita
ili? Ako je to to nije problem znam kako cu to uraditi (mada nisam siguran
da ti je ono ispravno ako si to hteo da pokazes)!Ono sto meni treba sad sta
da radijm kad ocitam konverziju, kako to da izracunam u stepene Celziuse?
 
Odgovor na temu

grabik

Član broj: 32507
Poruke: 311
80.80.60.*



+7 Profil

icon Re: PIC16f876a i analogni temperaturni senzor LM35CZ, ako neko moze pomoci29.05.2007. u 16:35 - pre 205 meseci
A zasto gornji primjer nije dobar?

Recimo jedan od nacina da dobijes temperaturu
ocitas adc i dobijes neku vrjednost recimo 57
ako ti je referentni napon 5V a jeste ako ti je mc setovan kao gore
onda recimo ocitas vrjednost 57 i tu vrjednost konvertujes u mV

57* 4,88=278mV

konvertujes u temperaturu

278 / 10mV/C =27,8 stepeni celsijusa

ili

56 * 4,88=273mV ili 27,3 C

A mozes i ujedno da vidis koju preciznost ces dobiti koristeci
LM35 i adc od pic-a.



 
Odgovor na temu

voxi

Član broj: 67178
Poruke: 328
*.skaut.net.



Profil

icon Re: PIC16f876a i analogni temperaturni senzor LM35CZ, ako neko moze pomoci29.05.2007. u 19:58 - pre 205 meseci
Mozda sam i ja pogresio moram da vidim za ono sto si naveo kod siftovanja nema vremena sad al nije ni bitno.

Hvala za pomoc uspeo sam sve da napravim (mada radim sa 1 bajtom), e sad me zanima sta se desava kad temperatura ode u -( negativan)
 
Odgovor na temu

grabik

Član broj: 32507
Poruke: 311
80.80.60.*



+7 Profil

icon Re: PIC16f876a i analogni temperaturni senzor LM35CZ, ako neko moze pomoci29.05.2007. u 21:03 - pre 205 meseci

Da bi doznao sta cita ako je negativan sta ne isprobas.

//**************************
value=read_adc();
hiljade=value/1000;
stotine=(value/100)%10;
desetine=(value/10)%10;
jedinice=value%10;
upisData(hiljade+48);
upisData(stotine+48);
upisData(desetine+48);
upisData(jedinice+48);

//*******************************

Ovo gore moze i sa for petljom mnogo brze se onda izvrsava ali ovo je razumljivije sta se radi:)
Znaci ukratko to su funkcije iz tvog gprnjeg listinga, ocitas adc i to ispeses na lcd.
 
Odgovor na temu

makrale
BL

Član broj: 43267
Poruke: 23
81.93.95.*



Profil

icon Re: PIC16f876a i analogni temperaturni senzor LM35CZ, ako neko moze pomoci30.05.2007. u 07:59 - pre 205 meseci
E, al' LM35 ne moze da mjeri negativne temp ako je spojen onako kako si ti spojio (vidi datasheet)
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: PIC16f876a i analogni temperaturni senzor LM35CZ, ako neko moze pomoci

[ Pregleda: 4703 | Odgovora: 17 ] > FB > Twit

Postavi temu Odgovori

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