با سلام خدمت اعضای محترم
وقتی ما با سنسور sht 11 و دیگر خانواده این سنسور ارتباط برقرار میکنیم در هر ارتباط کدی دریافت میکنیم به عنوان کد تشخیص خطا به نام ( crc ) ... که به ما کمک میکنه که از صحت دیتای دریافتی اطلاع پیدا کنیم
ولی هر شرکتی میتونه روش خاصی بکار ببره برای تعیین این کد یا بایت
حالا تو سنسور های sht این کد وجود داره ... ولی من روش تشخیصشو هنوز متوجه نشدم
یعنی نمیدونم چجور ازش استفاده کنم .. تا بتونم به صحت دیتا های دریافتی پی ببرم
مثلا وقتی ما مقدار رطوبت رو میخویم یک بایت هم در اخر دریافت میکنیم که همون crc ما هست

خب من طی جستجو های به این نتایج رسیدم :
فرض کنید شما میخواید دما رو اندازه بگیرید، برای این کار باید کد 00000011 به سنسور بفرستید و بعد دمای اندازه گیری شده توسط سنسور رو بخونید (این رو اضافه کنم که دقت اندازه گیری برای دما روی دقت 14 بیت تنظیم شده). که به صورت 8 بیت 8 بیت به میکرو ارسال میشه. که در این مثال من کد باینری 0001000110101100 ( هگزا دسیمال 11AC ) رو دریافت کردم. و بعد از اون کد CRC یا همون checksum توسط سنسور ارسال میشه. که در این مثال من کد باینری 10001011 ( هگزا دسیمال D1 ) دریافت کردم.
در مورد این CRC یه توضیح کوچیک بدم که: این 8 بیت کد تشخیص خطایی است که از زمان ارسال 8 بیت 00000011 تا دریافت کد 14 بیتی 0001000110101100 شروع به تولید شدن میکنه، و این یعنی شما بعد از دریافت این کد میتونید بفهمید که سنسور دستور شما رو به درستی متوجه شده یا نه؟! و اینکه کمیت اندازه گیری شده صحیح هست یا نه؟!
:eek: :NO:
خوب برگردیم به محاسباتمون.
برای به دست آوردن کد تشخیص خطا به صورت زیر عمل میکنیم، سپس CRC به دست آمده را معکوس یا revers میکنیم و با CRC ارسال شده توسط سنسور مقایسه مکنیم، اگر یکی بودند پس یعنی همه چی حله! اما اگه یکی نبودن باید کد باینری 1e یا 00011110 به سنسور ارسال کنیم(جهت ریست نمودن سنسور) و اندازی گیری را از سر بگیریم.

وقتی ما با سنسور sht 11 و دیگر خانواده این سنسور ارتباط برقرار میکنیم در هر ارتباط کدی دریافت میکنیم به عنوان کد تشخیص خطا به نام ( crc ) ... که به ما کمک میکنه که از صحت دیتای دریافتی اطلاع پیدا کنیم
ولی هر شرکتی میتونه روش خاصی بکار ببره برای تعیین این کد یا بایت
حالا تو سنسور های sht این کد وجود داره ... ولی من روش تشخیصشو هنوز متوجه نشدم
یعنی نمیدونم چجور ازش استفاده کنم .. تا بتونم به صحت دیتا های دریافتی پی ببرم
مثلا وقتی ما مقدار رطوبت رو میخویم یک بایت هم در اخر دریافت میکنیم که همون crc ما هست

خب من طی جستجو های به این نتایج رسیدم :
فرض کنید شما میخواید دما رو اندازه بگیرید، برای این کار باید کد 00000011 به سنسور بفرستید و بعد دمای اندازه گیری شده توسط سنسور رو بخونید (این رو اضافه کنم که دقت اندازه گیری برای دما روی دقت 14 بیت تنظیم شده). که به صورت 8 بیت 8 بیت به میکرو ارسال میشه. که در این مثال من کد باینری 0001000110101100 ( هگزا دسیمال 11AC ) رو دریافت کردم. و بعد از اون کد CRC یا همون checksum توسط سنسور ارسال میشه. که در این مثال من کد باینری 10001011 ( هگزا دسیمال D1 ) دریافت کردم.
در مورد این CRC یه توضیح کوچیک بدم که: این 8 بیت کد تشخیص خطایی است که از زمان ارسال 8 بیت 00000011 تا دریافت کد 14 بیتی 0001000110101100 شروع به تولید شدن میکنه، و این یعنی شما بعد از دریافت این کد میتونید بفهمید که سنسور دستور شما رو به درستی متوجه شده یا نه؟! و اینکه کمیت اندازه گیری شده صحیح هست یا نه؟!

خوب برگردیم به محاسباتمون.
برای به دست آوردن کد تشخیص خطا به صورت زیر عمل میکنیم، سپس CRC به دست آمده را معکوس یا revers میکنیم و با CRC ارسال شده توسط سنسور مقایسه مکنیم، اگر یکی بودند پس یعنی همه چی حله! اما اگه یکی نبودن باید کد باینری 1e یا 00011110 به سنسور ارسال کنیم(جهت ریست نمودن سنسور) و اندازی گیری را از سر بگیریم.