سخت افزارش آماده است ؟ با چه کامپایلری میخواید انجام بدید؟
گل سرخ گل سرخ است و خار , خار . نه خار بد است و نه گل سرخ خوب . اگر انسان از روی زمین محو شود , گلها آنجا خواهند بود و خارها نیز آنجا . اما دیگر کسی نیست که بگوید گلهای سرخ خوبند و خارها بد !
ابتدا عبارت زیر را در گوگل سرچ میکنیم. این عبارت از گوگل می خواهد که عبارت "DS1820" را در سایت ccsinfo جستجو کند.
کد:
DS1820 site:ccsinfo.com
روی نتیجه دوم که به نظر مناسب می آید کلیک میکنیم. CCS :: View topic - DS18S20 & DS18B20 Codes
در این تاپیک کد لازم برای راه اندازی یک سنسور آمده است.
ابتدا یک سنسور را راه اندازی میکنیم. سپس با مطالعه دیتاشیت چند سنسور را اضافه میکنیم.
سلام
دوست عزیز من اینارو مطالعه کردم اما کدهایی که تو نت هست رو نمیدونم چطور تو ccs ازشون تست بگیرم اضافه شده در تاریخ :
برای مثال این کد که گفته واسه بیشتر از یکی کار نمیکنه.میشه راهنمایی کنید با ccs v14.130 چطور از این کد استفاده کنم ؟من تاپیکهای ساخت پروزه رو خوندم اما مراحلش فرق داره تو این ورژن
کد هایی که در اون تاپیک انجمن CCS داده رو در فایل های جداگانه در یک پوشه ذخیره کنید. فایل main رو با IDE باز کنید و کامپایل کنید. بعدسخت افزار رو ببندید و تست کنید. از پروتیوس هم میتونید استفاده کنید ولی زیاد بهش اعتماد نکنید.
دوست عزیز من با CCS کار میکنم اگه میشه تو این محیط راهنمایی کنید
[code=c]#include <main.h>
#define ONE_WIRE_PIN PIN_A0
#USE RS232(BAUD=9600, XMIT=PIN_c7, RCV=PIN_c6)
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1|RTCC_8_bit) ; //102 us overflow
//Example blinking LED program
while(true)
{
temperature = ds1820_read();
printf("Temperature= %3.1f\n\r",temperature);
output_low(LED);
delay_ms(DELAY);
output_high(LED);
delay_ms(DELAY);
}
}
/*******************1-wire communication functions********************/
void onewire_reset() // OK if just using a single permanently connected device
{output_low(ONE_WIRE_PIN);
delay_us( 500 ); // pull 1-wire low for reset pulse
output_float(ONE_WIRE_PIN); // float 1-wire high
delay_us( 500 ); // wait-out remaining initialisation window.
output_float(ONE_WIRE_PIN);
}
for (count=0; count<8; ++count)
{
output_low(ONE_WIRE_PIN);
delay_us( 2 ); // pull 1-wire low to initiate write time-slot.
output_bit(ONE_WIRE_PIN, shift_right(&data,1,0)); // set output bit on 1-wire
delay_us( 60 ); // wait until end of write slot.
output_float(ONE_WIRE_PIN); // set 1-wire high again,
delay_us( 2 ); // for more than 1us minimum.
}
}
/*********************** read1wire() *********************************/
int onewire_read()
{
int count, data;
for (count=0; count<8; ++count)
{
output_low(ONE_WIRE_PIN);
delay_us( 2 ); // pull 1-wire low to initiate read time-slot.
output_float(ONE_WIRE_PIN); // now let 1-wire float high,
delay_us( 8 ); // let device state stabilise,
shift_right(&data,1,input(ONE_WIRE_PIN)); // and load result.
delay_us( 120 ); // wait until end of read slot.
}
return( data );
}
//*********************** ds1820_read() *********************************/
//result = (float) temp3 / 2.0; // 0.5 deg C resolution
result = (float) temp3 / 16.0; //0.1 deg C resolution
delay_ms(200);
return(result);
} [/code]
این هم کد برنامم اول اینکه تو پروتئوس کار نمیکنه و اینکه جندتا DS18S20 میخوام باشه تو مدارم اضافه شده در تاریخ :
سوال دیگه اینکه چطور میشه 1WIREرو فعال کنم تو کدم؟
سوال دیگه اینکه چطور میشه 1WIREرو فعال کنم تو کدم؟
فعال کردن معنی نداره. PIC ماجول 1Wire نداره که بخواد فعال بشه. باید بصورت نرم فزاری سیگنال داده بشه که توی کد شما موجوده.
در ضمن ورژن ccs v14.130 نداریم. احتمالا 4.130 هست.
XMIT=PIN_c7 به نظر غلط میاد. پایه ارسال C6 هست. اینجوری بنویسید:
کد:
#USE RS232(BAUD=9600,uart1,errors)
1- آیا کدتون رو از تاپیکی که من لینک دادم تدوین کردید؟
2- وقتی میگید کار نمیکنه یعنی چی؟ توی ترمینال چیزی نشون نمیده؟ LED چشمک نمیزنه؟ دما رو درست نشون نمیده؟ یا چی؟
3- محتویات فایل main.h رو ارسال کنید.
4- فایل شبیه سازی پروتیوس رو ارسال کنید.
5- مقاومت پول پ گزاشتید روی خط دیتا؟
با سلام و خسته نباشید.
دوست عزیز من کد رو که کامپایل میکنم error نمیده و اینکه نه روی سریال چیزی نشون میده نه ledروشن میشه هیچ عکس العملی نداره.بله همون کدی که شما فرمودید و اینکه مقاومت puulup هم گذاشتم.[code=c]#include <main.h>
#define ONE_WIRE_PIN PIN_A0
#USE RS232(BAUD=9600, XMIT=PIN_c7, RCV=PIN_c6)
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1|RTCC_8_bit) ; //102 us overflow
//Example blinking LED program
while(true)
{
temperature = ds1820_read();
printf("Temperature= %3.1f\n\r",temperature);
output_low(LED);
delay_ms(DELAY);
output_high(LED);
delay_ms(DELAY);
}
}
/*******************1-wire communication functions********************/
void onewire_reset() // OK if just using a single permanently connected device
{output_low(ONE_WIRE_PIN);
delay_us( 500 ); // pull 1-wire low for reset pulse
output_float(ONE_WIRE_PIN); // float 1-wire high
delay_us( 500 ); // wait-out remaining initialisation window.
output_float(ONE_WIRE_PIN);
}
for (count=0; count<8; ++count)
{
output_low(ONE_WIRE_PIN);
delay_us( 2 ); // pull 1-wire low to initiate write time-slot.
output_bit(ONE_WIRE_PIN, shift_right(&data,1,0)); // set output bit on 1-wire
delay_us( 60 ); // wait until end of write slot.
output_float(ONE_WIRE_PIN); // set 1-wire high again,
delay_us( 2 ); // for more than 1us minimum.
}
}
/*********************** read1wire() *********************************/
int onewire_read()
{
int count, data;
for (count=0; count<8; ++count)
{
output_low(ONE_WIRE_PIN);
delay_us( 2 ); // pull 1-wire low to initiate read time-slot.
output_float(ONE_WIRE_PIN); // now let 1-wire float high,
delay_us( 8 ); // let device state stabilise,
shift_right(&data,1,input(ONE_WIRE_PIN)); // and load result.
delay_us( 120 ); // wait until end of read slot.
}
return( data );
}
//*********************** ds1820_read() *********************************/
محتویات فایل main.h رو ارسال کنید. شما تابع main رو ارسال کردید که قبلاً هم ارسال کرده بودید.
فایل پروتیوس رو هم تو یه سایت مثل persiangig یا picofile پلود کنید و لینکش رو اینجا پست کنید.
خط use FIXED_IO رو از فایل h حذف کنید. این خط باعث میشه پین A0 همیشه خروجی بشه که غلطه. چون باید موقع خوندن ورودی بشه.
مقاومت پول پ اصلا وصل نیست. پاک کن دوباره بکش.
آخر تابع ds1820_read ، خط تقسیم بر 16 رو کامنت کن و اون یکی رو از حالت کامنت خارج کن.
دیدگاه