18 Ekim 2021, 08:27:48

Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d


Ynt: ds18b20 ölçüm hatası

Başlatan armsistem, 02 Ağustos 2012, 00:41:38

armsistem

02 Ağustos 2012, 00:41:38 Son düzenlenme: 02 Ağustos 2012, 02:11:37 armsistem
arkadaşlar merhaba ds18b20 ile ısı ölçüm yapmaya çalışıyorum lakin program bir yerde kilitleniyor yardımlarınızı bekliyorum.
  ds18b20.c
#include <LPC21xx.H>                       /* LPC21xx tanimlari */

#include "1wire.h"

float ds1820_read(unsigned int olc
unsigned char ss[48];
 
short int busy=0tt=0,i
 
int temp3
 
float result
 
i=onewire_reset();
 if(
i!=0) {
   print(
"Reset basarisiz");
   return (-
273.15);
 } 
 if (
olc==1) {
   
onewire_16write(0x44CC); // 44 ölçümü baslatir.
   
while (busy == 0busy onewire_read(1); 
 }                  
 
onewire_reset(); 
 
onewire_16write(0xBECC); 
 
tt onewire_read(2); 
 
temp3 = (int) tt
 
sprintf(ss," Temp3= %6d "temp3); // raw reading 
	
  print(
ss);

 
result = (float)temp3 16.0;  //defauld conf. 12 bit resolution 

	
  
sprintf(ss,"Temp= %6.2f oC\n"result);   ----------------------------------------buradaki tür çevriminde hata veriyor.
	
  print(
ss);
   return(
result); 
}




main.c

/******************************************************************************/
/* DS18B20 Sicaklik Olcumu                                                    */
/******************************************************************************/
#include <LPC21xx.H>                       /* LPC21xx tanimlari */
#include "lcd.h"
void init_serial (void);
char putchar (unsigned char ch);
unsigned char getchar (void);
void delay_ms(int);
float ds1820_read();
  
	
    
unsigned char ss[48];
int main (void) {
//  unsigned char ss[48], *s;
  
float t;

  
PINSEL1 PINSEL1 0x0003FFFF;
	
       
/* P0.25-31 ve P0.2-3 GPIO olarak calisacak */
  
PINSEL1 PINSEL1 & (~0x00003000);       /* Buzzer P0.22 GPIO olarak calisacak */
  
PINSEL0 0x00000000;
	
	
	
           
/* Port 0-15 GPIO olarak calisacak */
  
PINSEL2 &= (~0x00000003);                /* DS18B20 bacagi normal io*/
  
IODIR0 0x00003C0c;                     /* P0.10..13 yonu cikis olarak tanimlandi */
  
IODIR0 IODIR0 0x01FFFFFF;            /* P0.25..31 yonu giris olarak tanimlandi */
  
IODIR0 IODIR0 1<<22;                 /* Buzzer P0.22 yonu cikis olarak tanimlandi */

  
VPBDIV 0x00;
	
//Divide Pclk by four, bu frekansta uart hizi 4800 bps
//  VPBDIV = 0x01;
	
//Divide Pclk by 1, bu frekansta uart hizi 19200 bps
  
init_serial();
  
delay_ms(100);
  
lcd_init();
  
T1IR T1IR//0x07; // Clear M2, M1, M0 interrupts

  
ds1820_read(0);      // arg:(0) = without 0xCC, 0x44, at startup should read 85 oC, 
	
	
	
	
	
   
// used to check whether write,read functions works or not.
  
while (1)  {                             
 
	
  
t=ds1820_read(1);// arg:(1) = with 0xCC, 0x44, normally should read env. temp oC,
	
  
delay_ms(1000); 
	
 
	

	
  
--------------------------------------------
t-----------------------------float chara çevirmek gerekiyor mu nasıl display basabilriz.
	
  
  
  }
}



mesaj birleştirme:: 02 Ağustos 2012, 02:11:37

Arkadaşlar aşağıdaki kod ısı değeri sürekli sıfır veriyor. Kristal 11.0592 Hz

# include <lpc23xx.h>
# define dq 1<<16
# define dq_dir(x) (x)?(IODIR0|=dq):(IODIR0&=~dq)
# define dq_set IOSET0|=dq
# define dq_clr IOCLR0|=dq
# define dq_rd IOPIN0

unsigned char flag,TEMP;
void delay_5us(unsigned int);
void delay_1us(unsigned long int);
void dq_reset();
unsigned char dq_read();
void tmpwrite(unsigned char);
void start_conv();
unsigned char tmp();
unsigned char tmpread();

void delay_5us(unsigned int count)
{
unsigned int i;
while(
count)
{
i=32;
 while(
i>0)i--;
 
count--;
 }}

 
void delay_1us(unsigned long int t)
 {
 
unsigned long int i;
 
unsigned long int j;
 
j=11059200/1000000*t;
 for(
i=0;i<j;i++);
 }

	
	
void dq_reset()
	
	
{
char presence=1;
	
	
while(
presence){
	
	
dq_dir(1);
	
	
dq_set;
	
	
delay_1us(2);
	
	
dq_clr;
	
	
delay_5us(100);
	
	
dq_set;
	
	
delay_5us(12);
	
	
dq_dir(0);
	
	
presence dq_rd;
	
	
presence presence dq;
	
	
	
	
}
	
	
delay_5us(100);
	
	
dq_dir(0);
	
	
presence=dq_rd;
	
	
presence=~presence;
	
	
presence=presence&dq;

}
	
	
	

 
void tmpwrite(unsigned char dat){
 
unsigned char j;
 
int testb;
 
dq_dir(1);
 for(
j=1;j<=8;j++)
 {
 
testb=dat&0x01;
 
dat=dat>>1;
 if(
testb)
 {
 
dq_set;
 
delay_1us(2);
 
dq_clr;
 
delay_1us(4);
 
dq_set;
 
delay_5us(14);
 }
 else
 {
 
dq_set;
 
delay_1us(2);
 
dq_clr;
 
delay_1us(4);
 
dq_clr;
 
delay_5us(14);
}}
dq_set;
 
	
	
	
   
delay_1us(1);
 }



	
   
unsigned char dq_read()
	
   {
	
   
unsigned char dat;
	
   
dq_dir(1);
	
   
dq_set;
	
   
delay_1us(2);
	
   
dq_clr;
	
   
delay_1us(3);
	
   
dq_set;
	
   
dq_dir(0);
	
   
delay_5us(12);
	
   
dat=dq_rd;
	
   return(
dat);
	
   }




	
	
	
	
   
unsigned char tmpread()
	
	
	
	
   {
unsigned char i,dat;
int j=0;
dat=0;
for(
i=1;i<=8;i++)
{
j=dq_read();
j=(j>>25)&0x01;
dat=(j<<7)|(dat>>1);
}
dq_dir(1);
dq_set;
return(
dat);
}

	
   
unsigned char tmp()
	
   {
	
	
unsigned char a,b;
	
	
dq_reset();
	
	
tmpwrite(0xcc);
	
	
tmpwrite(0xbc);
a=tmpread();
b=tmpread();
 if (
b>127)
 {
 
a=256-a;
b=256-b;
flag=1;
}
else {
flag=0;}
TEMP=((a>>4)&0x0f)|((b&0x07)<<4);
return(
TEMP);

 
 }


  
void start_conv()
  {
  
dq_reset();
  
tmpwrite(0xcc);
  
tmpwrite(0x44);

  }






main()

{
   
unsigned char msb,disp[4];
   while(
1)
   {
   
start_conv();
   
delay_5us(200);
   
delay_5us(200);
   
delay_5us(200);
   
delay_5us(200);
   
delay_5us(200);
   
delay_5us(200);
msb=tmp();
	
	
if(
flag)
	
	
disp[0]=43;
	
	
else
	
	
disp[0]=45;
	
	
disp[1]=msb/100+0x30;
	
	
disp[2]=msb/10%10+0x30;
	
	
disp[3]=msb%10;




   
   
   }
}
www.silivriotomasyon.com, www.armsistem.com

Yasal Uyarı: Picproje.org sitemizde 5651 sayılı kanunun 8. maddesine ve T.C.Knın 125. maddesine göre tüm üyelerimiz yaptıkları paylaşımlardan kendileri sorumludur. Picproje.org hakkında yapılacak tüm hukuksal şikayetleri İletişim sayfamızdan bize bildirdikten en geç 3 (üç) iş günü içerisinde ilgili kanunlar ve yönetmelikler çerçevesinde tarafımızca incelenerek gereken işlemler yapılacak ve site yöneticilerimiz tarafından bilgi verilecektir.