.:: نویز | آموزش AVR | میکروکنترلر | الکترونیک ::.

وبلاگ آموزشی احسان نوری ::: Ehsan Nouri's Weblog

.:: نویز | آموزش AVR | میکروکنترلر | الکترونیک ::.

وبلاگ آموزشی احسان نوری ::: Ehsan Nouri's Weblog

" نویز رسانه ای است برای آموزش آسان مفاهیم میکروکنترلر و الکترونیک "

دریافت مستندات
آخرین نظرات
  • ۱۵ آبان ۹۵، ۱۸:۵۸ - الهام
    ممنون

 

 

دومین قسمت از آموزش برنامه نویسی،تحت عنوان "کار با واحد ADC" رو مورد ارزیابی قرار می دهیم.

 

پس با ما در ادامه مطلب همراه باشید...

 

به نام خدا

سلام ...

حالتون چطوره ؟!

خوب هستید ؟

بزارید اول تشکر کنم از اون دسته از دوستانی که با نظراتشون به بنده دلگرمی میدند و لطف دارند !

و البته گله کنم از اونایی که بی تفاوت از کنار مطالب رد میشند.عزیزم نظر بزار ...

اون زمانی که این وبلاگ رو راه انداختم نمیدونستم دقیقا میخوام چقدر مطلب بزارم و کلا تا چه سطحی پیش برم.اما همونطور که میبینید بخش 18 آموزش رو هم شروع کردیم و با دعای خیر شما دوستان ایشالا میریم تا بخش  1018 !!! cheeky

خوشحال میشم بتونم روز به روز هم خودم پیشرفت کنم،هم شما پیشرفت کنید و هم وبلاگ پیشرفت کنه !

بنابر این شما هم اگه کمکی از دستتون برمیاد،کوتاهی نکنید و اگه نظری دارید و یا میتونید به طریقی مدد کنید،منتظر یاری سبزتان هستم ...


دوستانی که تازه و جدیدا دارن بحث ها رو پیگیری میکنند،لطفا اول از همه پستهای :

 

مبدل آنالوگ به دیجیتال ADC در AVR ؟ [12]

 
رو مطالعه کنند.
 

اما برنامه امروزمون چیه برای آموزش ؟!

قراره یه دماسنج دیجیتال بسازیم که درجه دما رو به سانتیگراد بر روی سون سگمنت نمایش بده.

 

قطعات مورد نیاز :

 

1.میکروکنترلر ATmega32 ==> یک عدد

2.سنسور LM35DZ ==> یک عدد

3.سون سگمنت مالتی پلکس 4 تایی آند مشترک==> یک عدد  ==> البته میتونید سون سگمنت دوتایی تا چهارتایی،بسته به نیازتون انتخاب کنید.

4.منبع تغذیه 5 ولت

5.سیم رابط ==> به مقدار لازم Laughing

 

پس :

اول از همه یه توضیحی میدم راجع به سنسور LM35.

بعد از اون،به کانفیگ کردن رجیستر های واحد ADC میپردازیم.

بعدش یاد میگیریم که چجوری با سون سگمنت کار کنیم.

و در پایان یه دماسنج توپ خواهیم داشت !!!

 

توجه داشته باشید که در برنامه کاری وبلاگ به هیچ عنوان پروژه محوری نبوده و نیست.

ولی برای اینکه مطالب بهتر جا بیفته،لازمه که در قالب یه پروژه بحث رو پیش ببریم ...

 

در مورد اینکه چرا ساخت دماسنج با LM35 رو بعنوان صورت مسئله این بخش در نظر گرفتم میتونم بگم که ؛ کار با LM35 راحته و همچنین اغلب مدرسان AVR و همچنین کتابها و کلاسهای آموزشی تا به بحث آموزش AVR میرسند،غیر ممکنه که کار با LM35 رو بعنوان پروژه این بخش مطرح نکنند !!!

 

پس هیچ احدالناسی نمیتونه من و شما رو مجبور کنه که با چه المانی کار کنید؛بنده عشقم کشیده با LM35 کار کنم ! مشکلیه ؟!!! Tongue Out



سنسور دمای LM35 :

 

همونطور که میبینید،این سنسور ظاهر عجیب و غریبی نداره و از همون رده BJT های خودمونه !

 

قصد ندارم بصورت جامع در مورد این سنسور بنویسم،ولی یه سری خصوصیاتش رو بصورت تیتر وار میگم خدمتتون :
 

1.این سنسور به ازای هر درجه سانتی گراد افزایش دما،10 میلی ولت به خروجی خودش اضافه میکنه.
2.دارای حداکثر خطای 0.5 درجه سانتی گراد است.

3.سه پایه با نام های Vc , GND , Vout داره،که مقدار Vc میتونه در رنج 4 تا 30 ولت باشه که معمولا از ولتاژ های معمول 5 ولت و 12 ولت استفاده میشه !
4.قابلیت اندازه گیری دما در محدوده +150 تا -150 رو داره.

 

اطلاعات بیشتر خواستید،میتونید دیتاشیت این قطعه رو از ستون سمت چپ وبلاگ در بخش "مستندات" بیابید و دانلود کنید و بخوانید !

 

اما توضیحات ساده این سنسور به زبون تخصصی خودم cheeky :
 

عزیزم heart

این قطعه که میبینید یه سنسوره که برای اندازه گیری دما ازش استفاده میشه !

روش کارش اینطوریه که با هر درجه سانتی گراد افزایش دما،10 میلی ولت میندازه روی پایه Vout !

مثلا اگه الان دمای محیط 20 درجه سانتی گراد باشه،مقدار 200 میلی ولت از پایه Vout دریافت خواهیم کرد.(هر درجه،10 میلی ولت !)

 

اینم از ترتیب و اسم پایه ها :


یجور دیگه اگه بخوایم مساله رو عنوان کنیم میتونیم بگیم که قصد داریم یه ولتمتر بسازیم !!! (نه ؟!)

بهتره که هنگام مطالعه این قسمت از آموزش،صفحه مبدل آنالوگ به دیجیتال ADC در AVR ؟ [12] رو هم باز کنید و همزمان پیگیر بحث باشید.

 

بریم سراغ برنامه نویسی و مقدار دهی رجیسترها :

 

فرکانس کاری میکروکنترلر را 8 مگاهرتز در نظر میگیریم.

#include <mega32.h>
#include <delay.h>

void adc_configuration(){}
unsigned int temp(){}
void main(){}

 

دو تا تابع تعریف میکنیم با نام های : adc_configuration و temp .(توجه : انتخاب نام توابع کاملا اختیاری است.)

در تابع adc_configuration تنظیمات پیکربندی واحد ADC رو انجام میدیم.

تابع temp هم وظیفه قرائت مقدار دما رو داره.

 

اول شروع میکنیم به کانفیگ کردن واحد ADC ؛ یعنی نوشتن تابع adc_configuration بصورت گام به گام :

 

رجیستری داشتیم با نام ؛ ADMUX :

کانال مورد نظر ما ADC0 هست و ولتاژ مرجعمون رو هم به دلخواه روی 2.56 ولت داخلی قرار میدیم :

 

void adc_configuration(){
ADMUX |= (1<<REFS1)|(1<<REFS0);
}

 

 

رجیستر دیگه ای هم بود با نام ؛ ADCSRA :

ضریب تقسیم رو 64 میگیریم و فلگ ADEN رو هم یک میکنیم تا واحد ADC فعال بشه :

void adc_configuration(){
ADMUX |= (1<<REFS1)|(1<<REFS0);
ADCSRA |= (1<<ADPS2)|(1<<ADPS1)|(1<<ADEN);
} 

تا اینجا پیکربندی ADC تموم شد.

 

تابع بعدی که مورد بحثمونه،تابع تعریفیه temp ـه ! :

 

unsigned int temp(){}


کاری که باید در این قسمت انجام بدیم،اول از همه،فرمان برای شروع تبدیله ،که با یک کردن فلگ ADSC انجام میشه !

unsigned int temp(){
ADCSRA |=(1<<ADSC);
}

 

با صدور فرمان شروع تبدیل،باید منتظر بمونیم تا تبدیل انجام بشه و پس از پایان یافتن تبدیل،مقدار رجیستر ADC رو بخونیم !

 

حالا از کجا بفهمیم که تبدیل تموم شده ؟

قبلنا براتون گفتم که یه فلگی داریم با نام ADIF که اصل کارش همینه !

وقتی یک بشه،یعنی تبدیل تموم شده و وقتی صفر باشه یعنی واحد ADC در حال انجام عملیات تبدیله.

پس باید منتظر موند تا این فلگ یک بشه.

بعد هم که یک شد،با نوشتن یه یک دیگه روش دوباره صفرش میکنیم (جل الخالق laugh).

unsigned int temp(){
ADCSRA |=(1<<ADSC);
while ((ADCSRA & (1<<ADIF))==0);
ADCSRA |=(1<<ADIF);
}

 

الان دیگه تبدیل انجام شده و رجیسترهای ADCL و ADCH که وظیفه نگهداری مقدار ADC رو دارند،پر شدند و حاوی مقدار ADC هستند.

نکته ای که باید بگم اینه که به مجموع دو تا رجیستر ADCL و  ADCH میگند ADCW که در واقع قراره یه عدد 10 بیتی رو به ما تحویل بده ! (توضیحاتشو قبلن دادم.نکنه میخواین دوباره بگم ؟! surprise)

unsigned int temp(){
ADCSRA |=(1<<ADSC);
while ((ADCSRA & (1<<ADIF))==0);
ADCSRA |=(1<<ADIF);
return ADCW;
}

 

تا اینجای کار،دو تا تابع اصلیمون رو نوشتیم که وظیفه عملیات های واحد ADC رو بر عهده داشتند.

اما قرارمون این بود که مقدار دما رو بخونیم و روی سون سگمنت نمایش بدیم.

 

پس میریم سراغ ادامه آموزش و توضیح تابع اصلی main :

 

void main(){}

 

روند کار به این صورته که :

 

1.دما رو میخونیم.

2.داخل متغیری با نام T میریزیم.

3.چون دما چند رقمیه (اینجا دو رقم) باید تفکیک به دو عدد تک رقمی بشه.

4.اعداد تفکیک شده از آرایه مربوط به اعداد (seg) انتخاب میشند.

5.اعداد با یه تکنیک خاص روی سون سگمنت نمایش داده میشند.

 

الان میخوایم مقدار دما رو بخونیم :

 

مقدار برگردونده شده از تابع temp رو داخل متغیر T میریزیم.

با توجه به فرمولی که در بخش 12 آموزش های وبلاگ دادم بهتون،مقدار T جدید رو محاسبه میکنید.

این مقدار جدید،مساوی با اندازه دما در واحد درجه سلسیوس است.

لازم بذکره که دلیل اضافه شدن عبارت (100*) اینه که سنسور مقدار رو به میلی ولت به ما تحویل میده !

T = temp();
T = (((T*2.56)*100)/1023);

 

 

قبل از همه،اعداد مورد نظرمون رو برای نمایش رو سون سگمنت میسازیم.

نرم افزارهای مختلفی برای اینکار وجود داره که میتونید ازشون استفاده کنید.

 

برای راحتی کار،اعداد 0 تا 9 + علامت درجه + حرف C رو در قالب کد براتون آماده گذاشتم :

به نحوی که که عضو صفرم از آرایه seg معادل عدد 0 و عضو یکم معادل عدد 1 و ... و عضو دهم معادل علامت درجه و عضو یازدهم معادل حرف C .

(دقت کنید که شمارش اعضای آرایه از صفر شروع میشه).

 

کاتد مشترک :

unsigned char seg[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x63,0x39};

 

آند مشترک :

unsigned char seg[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x1C,0x46};

 

 

برای اینکه برنامه نویسیمون مرتب تر در بیاد،یه تابع دیگه هم تعریف میکنیم به اسم : seg_display و کلیه مسائل مربوط به نمایش سون سگمنت رو در اون انجام میدیم.

 

void seg_display (unsigned int temp){}

 

این تابع مقدار دما رو میگیره و با عملیاتی که روش انجام میده،برای نمایش روی سون سگمنت آمادش میکنه.

 

void seg_display (unsigned int temp){
    unsigned char seg[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x1C,0x46};
    unsigned char data[4];
    
    DDRB=0xFF;
    DDRD=0x0F;
    
    data[0]=seg[temp/10];
    data[1]=seg[temp%10];
    data[2]=seg[10];
    data[3]=seg[11];
    
    for (i = 0; i < 4; i++)
    {
     PORTB=data[i];
     PORTD=0x00;
     PORTD=1<<i;
     delay_us(500);
    }
}


ایندفعه یکباره همه کدهای تابع رو یه جا نوشتم تا بهتر متوجه بشید.

 

unsigned char data[4]; 

از این آرایه بعنوان یک بافر استفاده میکنیم که قراره مقادیری رو از آرایه seg در خودش بریزه !

 

DDRB=0xFF;
DDRD=0x0F; 

در این قسمت هم پورت B رو که بعنوان خطوط کنترلی abcdefg+dot سون سگمنت،استفاده شدند رو بعنوان خروجی و همچنین 4 پین اول پورت D رو بعنوان خروجی که در واقع خطوط کنترلی 1234 سون سگمنت ها هستند،انتخاب کردیم.

 

data[0]=seg[temp/10]; 

این قسمت به بعد رو خیلی خوب یاد بگیرید،چون برای کار با سون سگمنت بصورت کلیشه ای باید این کار ها رو همیشه انجام بدید.

 

فرض کنید که دمای اندازه گیری شده 27 درجه سانتی گراده و میخوایم روی سون سگمنت عدد رو نمایش بدیم.

عدد مورد نظر برای نمایش روی سون سگمنت بصورت کاملترش به این شکله :

27 °C

 

که تشکیل شده از عدد دهگان (2) و عدد یکان (7) و علامت ثابت (°) و حرف (C) !

اگر یادتون باشه،برای نمایش روی سون سگمنت باید بصورت تک تک اعداد رو روی هرکدوم از سون سگمنتها نمایش بدیم.

که اینجا سون سگمنت ما از نوع مالتی پلکس 4 تایی آند مشترکه !

پس باید روی سون سگمنت 1 عدد 2 - روی سون سگمنت 2 عدد 7 - روی سون سگمنت 3 علامت ° - روی سون سگمنت 4 حرف C نمایش داده بشه.

پس در اولین مرحله باید اعداد رو از هم تفکیک کنیم.

 

پس میریم یخورده ریاضیات پیش دبستانی رو با هم دوره میکنیم  laugh:

فرض کنید یه عددی مثل 1453 رو میخوایم اعدادشو از هم تفکیک کنیم.
عدد مورد نظر از : یکان-دهگان-صدگان-هزارگان تشکیل شده.
حالا اگه این عدد رو بر 1000 تقسیم کنیم،خارج قسمت میشه : 1 (هزارگان)
باقی ماندش هم میشه : 453
اگه 453 رو بر 100 تقسیم کنیم،خارج قسمت میشه : 4 (صدگان)
باقی مونده هم میشه : 53
اگه 53 رو بر 10 تقسیم کنیم،خارج قسمت میشه : 5 (دهگان)
باقی مونده هم میشه : 3 (یکان)

 

ما هم دقیقا از همین تکنیک برای تفکیک اعداد از همدیگه استفاده میکنیم !

ولی در این پروژه ای که ما روش کار میکنیم با اعداد 2 رقمی کار داریم پس کار ساده تر میشه !

 

data[0]=seg[temp/10];  

اینجا اومدیم و عدد دهگان رو با تقسیم عدد بر 10 مشخص کردیم،بعد مقدار متناظرش رو از آرایه seg انتخاب کردیم و اونو ریختیم در عضو صفرم آرایه data.

 

data[1]=seg[temp%10]; 

تو این مرحله باقی مانده عدد مورد نظرمون رو بر 10 که میشه همون یکان رو مشخص کردیم و مقدار متناظرش از آرایه seg هم انتخاب شده و در عضو یکم آرایه data ریخته شده.

 

تا این مرحله عدد دو رقمی رو با تفکیک به دوتا عدد تک رقمی تبدیل کردیم.

 

data[2]=seg[10];
data[3]=seg[11];

گفتیم که؛اعضای دهم و یازدهم آرایه seg علامت ° و حرف C رو شامل میشند که بصورت ثابت در خانه های 2 و 3 آرایه data قرار میگیرند.

 

از اینجا به بعد وظیفه ما نمایش اعضای : 0و1و2و3 آرایه data بر روی سون سگمنتهای 1و2و3و4 به ترتیبه .

 

for (i = 0; i < 4; i++)
{
PORTB=data[i];
PORTD=0x00;
PORTD=1<<i;
delay_us(500);
} 

اومدیم و یه حلقه ایجاد کردیم که طبق همون تکنیک اثر فلیکر با یه تاخیر 500 میکروثانیه ای،به ترتیب مقادیر سون سگمنتهای 1و2و3و4 رو نمایش بدیم.

 

PORTB=data[i]; 

اطلاعات مورد نمایش رو بر روی پورت B قرار میدیم.

 

PORTD=0x00;
PORTD=1<<i; 

از طریق این بخش پایه های کنترلی 1و2و3و4 سون سگمنت رو کنترل میکنیم.

 

بصورت خیلی خلاصه براتون توضیح میدم که چجوری 27 درجه سانتی گراد،روی سون سگمنت 4 تایی نمایش پیدا میکنه(باتوجه به کد نوشته شده) :

اول از همه میگیم که میخوایم عدد 2 رو نمایش بدیم.
بعدش انتخاب میکنیم که باید سون سگمنت 1 این عدد رو نمایش بده.
پس از اون باید عدد 7 رو نمایش بدیم.
اینجا هم بهش میگیم که باید سون سگمنت 2 مسئول نمایش این عدد باشه.
و به همین ترتیب برای علامت درجه و حرف C و همچنین سون سگمنتهای 2 و 3 !

 

اینم از شماتیک :

در پایان هم کل کدی که نوشته شده رو یه جا قرار میدم براتون :

#include <mega32.h>
#include <delay.h>

unsigned int i,T;

// ADC Configuration Function
void adc_configuration(){
    ADMUX |= (1<<REFS1)|(1<<REFS0);
    ADCSRA |= (1<<ADPS2)|(1<<ADPS1)|(1<<ADEN);
}

// ADC Temprature Reading Function
unsigned int temp(){
    ADCSRA |=(1<<ADSC);
    while ((ADCSRA & (1<<ADIF))==0);
    ADCSRA |=(1<<ADIF);
    return ADCW;
}

// 7Seg Display Function
void seg_display(unsigned int temp){
    
    // Common Cathod 4-Digit 7Seg Display Code
    unsigned char seg[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x1C,0x46};
    unsigned char data[4];
    
    DDRB=0xFF;
    DDRD=0x0F;
    
    // Number Separating
    data[0]=seg[temp/10];
    data[1]=seg[temp%10];
    data[2]=seg[10];
    data[3]=seg[11];
    
    // Displaying Loop
    for (i = 0; i < 4; i++)
    {
     PORTB=data[i];
     PORTD=0x00;
     PORTD=1<<i;
     delay_us(500);
    }

}

// Main Function
int main(void)
{
    while(1)
    {
         adc_configuration();
         
         // Temprature Calculating
         T = temp();
         T=(T*256/1023);
         
         seg_display(T);     
         
    }
}

 

 توجه : اگه میخواین این پروژه رو عملی ببندید و ازش استفاده کنید قبلش مشکل جریان سون سگمنتها رو حل کنید !

 

 چون هدف ما اینجا ساخت پروژه نبود،بنده از توضیح اینکه چجوری مشکل جریان رو رفع کنیم،خودداری کردم.

اما اگه از دوستان کسی نیاز به رفع این مشکل داره در انجمن مطرح کنه تا سر فرصت براش اونجا توضیحاتی بدم.

 

اینم از قسمت دوم کارگاه عملی ...

نظر یادتون نره.

سوالی بود تو انجمن بپرسید.

 

فعلا...

سلام
ممنون که ادامه دادید!
مثل همیشه عالی بود
خداوند به شما قوت بده که انشاالله همینطور قوی ادامه بدید
موفق باشی
پاسخ:
سپاسگذارم.

موفق باشید.
سلام.خیلییییی خوب بود تشکر.
پاسخ:
تشکر
واقعا کارتون عالیه به قول بچه ها دمت گرم
پاسخ:
دم شما هم گرم.
سلام خسته نباشید
یه مدت که فاصله افتاده؛اختلاف بین خودتون و ماهای تازه کار را نجومی زیاد کردینا!من که واقعا از برنامه هاتون دیگه مثل قبل نه لذت بردم و نه چنان فهمیدم که دلیل اولی همون دومیه.
اگه میشه یکم به فکر آدمای خنگوله علاقه مند  مثل بنده هم باشید.
پاسخ:
سلام
نظر لطف شماست !
واقعا به ساده ترین زبانی که میشد توضیح داد،توضیح دادم.
اگر جایی رو سراغ دارید که مفصل تر از من توضیح داده باشه،اعلام کنید تا وبلاگ رو تعطیل کنم ! (جدی میگم !!!)
لازمه یادگیری میکرو،قرار گرفتن در جَوّ میکروکنترلره.
من نمیدونم شما آقا هستید یا خانم و یا رشته تحصیلیتون چیه و آیا ارتباطی به برق داره یا نه...
ولی قبلا هم گفتم،وظیفه من نشون دادن راه به شماست،پیمودن مسیر با خودتونه !
من نوعی هم این مطالب رو مادرزادی بلد نبودم.کتاب خوندم.دیتاشیت خوندم و از آموزشها و تجربیات دیگران استفاده کردم.
به هیچ عنوان قصد منت گذاشتن ندارم ولی همین مطالبی رو که اینجا بصورت کلاس وار آموزش میدم رو،برید ببینید آموزشگاهها تو هر دوره چقدر میگیرند و آموزش میدند !
در ضمن انجمن رو هم برای همین ایجاد کردم،تا سوالاتی که براتون پیش میاد رو اونجا مطرح کنید...
اگر قصد دارید پیشرفت کنید،باید تلاش کنید و صرف خوندن خزعبلات بنده در این وبلاگ،انتظاری نمیره که چیز زیادی یاد بگیرید.

موفق باشید.
سلام آقای نوری
شکست نفسی می‌فرمایید، مهندس!
مطالبتون خوبه و با بیان ساده و روان و خودمونی نوشته شده که این نقطه‌ی قوت نگاشت قلم شماست که من به شخصه تا به حال استاد دانشگاهی رو ندیده بودم که اینقدر مسلط و ساده بتونه توضیح بده! البته برای من که از زبان C چیزی بلدنیست نیست شاید مثل همین دوستمون، کمی درکش سخت باشه که البته با مطالعه بیشتر و خواندن مطالب قبلی شما رفع میشه انشاالله.
راستی توی عکس بردی که گذاشتید سنسور DHT11 روی برد هستش یکی از دوستام این سنسور رو خریده داده به ما، اصلاً نمی‌دونم باهاش چکار کنم :(
تو آموزش‌های بیشرفته تر بعدی، که میذارید در مورد راه‌اندازی و خود سنسور اگر تونستید توضیح بدید ممنون می‌شم.
من هر روز به سایتتون سر می‌زنم و پیگیر مطالبتون هستم.
موفق باشید
پاسخ:
سلام
ممنون از اظهار لطفتون.
بنده استاد دانشگاه نیستم.یه دانشجوی دربدرم مثل بقیه دانشجوها ...
در مورد اون عکس هم درست میفرمایید.
من بیشتر به خاطر وجود سون سگمنت در عکس مدار،از این تصویر استفاده کردم و تصویر هم از خودم نیست.
اما ظاهرا سنسور مورد نظر،یه سنسور دیجیتال اندازه گیری رطوبت و دماست که بنده هم تا کنون ازش استفاده نکردم !
اما اگه دیتاشیتش رو خواستید میتونید از اینجا دانلودش کنید.

موفق باشید.
it is very good...........................................................................................
پاسخ:
Mer30
سلام
دستتون درد نکنه اما همونطور که بالاتر گفتید من تو جو میکروکنترلر نیستم اما بهش علاقه دارم!الآنم هرکاری میکنم نمیتونم شروع کنم به کار
رشتم هم فنی هست اما برق و الکترونیک نیست،مکانیکه، اما اگه در حد حرفه ای یاد بگیرم میتونم ازش استفاده کنم
یه راهنمایی کنید چطور شروع کنم که بتونم نیازهای خودمو رفع کنم،لطفن!
با زبانم مشکلی ندارم
ممنون
پاسخ:
سلام
من کوچکتر از اونی هستم که بخوام در زمینه میکروکنترلر توصیه ای بکنم،اما باید بدونید که هر پیشرفتی نیاز به ممارست و سختی کشیدن داره !
اینکه میفرمایید به میکرو علاقه دارم کافی نیست !
بنده هم به اتومبیل های لامبورگینی علاقه زیادی دارم،اما باید ببینم که آیا میتونم از عهده پرداخت هزینه اش بربیام ؟؟؟
اغلب چیزها،در پایان زیبا و دلنشین میشند در حالی که شاید در ابتدا اینجور نبودند.
مثلا شما میبینید که دوستتون خیلی خوب و زیبا گیتار میزنه،با دیدن گیتار زدن اون و لذتی که میبرید سریعا تصمیم میگیرید که برید گیتار یاد بگیرید !!! در حالی که غافل از این قضیه هستید که ممکنه دوست شما ده سال به سختی تمرین کرده باشه تا به این مرحله برسه.
منظور از این همه صحبتهای به ظاهر بی ربط اینه که تنها متوجه نتیجه کار نباشید ! به راهی هم که باید طی کنید توجه کنید.به مشکلاتی که تو این راه ممکنه براتون پیش بیاد فکر کنید و ببینید چند مرده حلاجید !؟
دوست ندارم نا امیدتون کنم،اما چون رشتتون برق نیست،کارتون بیشتر سخت میشه !
این وبلاگ نقطه شروع خوبیه ! (تعریف از خودم نیست،از هرجا که دوست دارید شروع کنید !)
سعی شده مطالب به صورت بسیار ابتدایی توضیح داده بشه تا افراد مبتدی بتونند شروع خوبی داشته باشند و وارد همون جوی که عرض کردم بشند.
توصیه ام اینه که مطالب وبلاگ رو از ابتدا بخونید و بیاین جلو.این آزمون خوبیه برای اینکه متوجه بشید واقعا چقدر به میکروکنترلر علاقه مندید !

موفق باشید

با سلام.
اولا تشکر بابت آموزش بسیار خوب و روانی که ارائه میدید
بنده دانشجوی برق الکترونیک هستم و تازه ترم 6 رو شروع کردم.راستش تا مدتها پیش اصلادر جریان میکروکنترلر و avr و ... نبودم تا این که الان تصمیم به یادگیری گرفتم الان چند روز هست که آموزش های شما رو میخونم.تا به اینجا تقریبا بیشتر قسمت ها رو متوجه شدم فقط نمیتونم خیلی چیزها رو بخاطر بسپارم مخصوصا انواع رجیستر و بیت های اون.میخواستم بدونم چطور باید اینا رو بخاطر سپرد؟آیا اصلا لازمه که به خاطر بسپاریم یا همیشه مجبوریم از دیتاشیت و جدول ها کمک بگیریم؟
سوال دیگم اینه که با توجه به این که درسهایی مانند معماری کامپیوتر(این ترم دارم)  و تکنیک پالس(این ترم) و کنترل(این ترم) و میکروپروسسور رو هنوز پاس نکردم و اولین باره که میخونم آیا الان زمان مناسبی برای یادگیری avr برای من هست؟ چون با بعضی از مفاهیم آموزش آشنا نیستم و  حس میکنم بخاطر این درسا باشه...

پاسخ:
سلام
خواهش میکنم !
ببینید اصلا لازم نیست رجیستر ها رو حفظ کنید و هیشکی هم چنین پیشنهادی رو نمیده !
اما اصل موضوع رو یاد بگیرید !!!
بنده خودم هم دانشجوی ترم 6 مخابرات هستم و از زمانی که بیشتر به عنوان "مهندسی برق" فکر میکنم،متوجه شدم که یه سری حداقلاتی وجود داره قبل از اینکه بخواین سراغ میکرو بیاین !(البته اگه دوست دارید کارهاتون بیشتر عملی باشه تا تئوری)
و با اطمینان میتونم بگم که شرایط برای شما یک سالی هست که ایده آل شده !
دروسی رو هم که ذکر کردید جزِئی از رشته برقه و مسلما برای انجام کارهای عملی،هرکدومشون یه جا گره از کارتون باز میکنه.
اما اگر از همین الان شروع کنید به یادگیری میکرو انشاالله تا زمان فارغ التحصیلیتون این درس ها هم پاس شده رفته !
اینکه میگید با بعضی مفاهیم آشنا نیستم هم برای من معلوم نیست که منظورتون چیه !
اما از سوال پرسیدن نترسید ! بپرسید تا یاد بگیرید.

موفق باشید.
منظورم یه سری مفاهیم کوچیک هست.مثلا یه جای آموزش در مورد لبه بالارونده در کلاک فکر میکنم صحبت می کردید اینو مثلا من امروز تازه تو درس تکنیک پالس متوجه شدم که چی هست.
فقط دو تا سوال دیگه دارم میخواستم بدونم بهترین کتابی که میتونم برای یادگیری avr به زبان C تهیه کنم چی هست؟ بعد بنظر شما که به avr مسلط شدید آیا میشه avr رو به شکل خودآموز و صرفا با خوندن کتب مرجع یاد گرفت یا بهتره به کلاس های آموزشی رفت؟ البته خودم ترجیح میدم با خوندن کتاب یاد بگیرم چون وقت آزادم محدود هست فقط میخوام بدونم امکان یادگیری به این شکل هست؟ممنون میشم اگر از تجربیات خودتون بگید
با تشکر
پاسخ:
مطمئن باشید که حواسم بوده که شاید بعضی ها اصطلاحاتی رو ندونند.
فقط چون در اون مرحله دونستنش مسئله اساسی ای نبوده از توضیح اضافی صرفنظر کردم !
در مورد کتاب هم،تا دلتون بخواد تو بازار کتاب ریخته !!!
اما همشون ترجمه متون دیتاشیت و یه سری جملات ترجمه شده بی معنی که در پیچیده ترین شکل ممکن توضیح داده شده اند هستند!
در مورد کلاس یا کتاب هم خودتون تشخیص بدید بهتره !
بالاخره کلاس رفتن خرج داره،وقت میگیره،اما اگه خوب باهاتون کار کنند،مجبور میشید که ذهنتونو درگیر میکرو کنید.
اما کتاب خوندن خرجی نداره،هر وقت هم بخواین میشه،اما اگه جاییشو متوجه نشدید کسی نیست که در اون لحظه جوابتونو بده !
اما در پایان همه این ها به این نتیجه میرسید که ==> کس نخارد پشت من/جز ناخن انگشت من !!!

موفق باشید.
با حرف آخرتون کاملا موافقم
راستش من با تحقیقی که کردم اینطور متوجه شدم که کتاب های مرجع کامل میکرو های avr مهدی پرتوی فر و میکروکنترهای avr جابر الوندی از بهترین کتاب های آموزش با زبان c هستند.فقط من حجم کتاب پرتوی فر رو دیدم یخورده ترسیدم و میترسم نتونم با حجمش کنار بیام.سختی درس های دانشگاهی این ترم ها رو هم که خودتون بهتر میدونید و کمبود وقت...خلاصه یکی از حجیم ترین کتاب هایی بود که دیدم.نظرتون راجع به کتاب جابر الوندی چیه؟ ترتیب و روش آموزش مباحثش خوبه بنظرتون؟
دیگه ببخشید که زیاد سوال می پرسم...

پاسخ:
بنده خودم هم کتاب پرتوی فر رو بهتر از بقیه دیدم !
ببینید میکروکنترلر نباید براتون یه درس پاس کردنی باشه که بگید سخته یا وقت ندارم !
باید اینقدر علاقه داشته باشید که زمانهای فراغتتون رو با آموزش میکرو پر کنید .
کتاب جناب الوندی رو هم تا حالا مطالعه نکردم.اما برای شروع کار شما از مطالب همین وبلاگ استفاده کنید و مطمئن باشید که ساده تر از اینی که من گفتم هیچ جایی گفته نشده !
من دلیل دنبال کتاب گشتن شما رو متوجه نشدم !
سلام
ممنون که جواب دادید! این حرفتون خوشایند نبود اما خیلی به دلم نشست و خیلی باهاش حال کردم، کاشکی کسی بود زودتر در مورد خیلی کارا اینو به من گفته بود!
"توصیه ام اینه که مطالب وبلاگ رو از ابتدا بخونید و بیاین جلو.این آزمون خوبیه برای اینکه متوجه بشید واقعا چقدر به میکروکنترلر علاقه مندید !"
منم احتمالا این میکرو بیخیال شم اما فقط بگم من از اول دوست داشتم اطلاعات میکرو رو توی متلب تحلیل کنم، یه آموزش دیدم خیلی مختصر به فارس که اینترفیس کردن رو با زبون بیسیک و بیس کام نوشته بود
من با ویژوال و هم با سی آشنایی دارم اما نه حرفه ای، لطفا یه راهنمایی هم بکنید برای اینکه فقط یکم ببینم میتونم از پس اینکار بربیام یا اینکه سخته و بیخیالش شم، کدومو شروع کنم؟ یعنی کدوم ساده تر، سریع تر و بی دردسر تره،به قولی کار راه بندازه برای آدمی مثل من؟
خیلی ممنون، دستتون درد نکنه، امیدوارم جایی جبران کنم
پاسخ:
سلام
اینکه میفرمایید میخواین در متلب داده های میکرو رو تحلیل کنید کلا 2 مسئله جدا از همه !
پردازش اطلاعات توسط میکرو + پردازش اطلاعات توسط متلب
و برای رسیدن به مقصد مطلوبتون باید روی جفتشون قاعدتا تسلط داشته باشید .
تعطیلات نوروز فرصت خوبیه برای اینکه شروع کنید به مطالعه پست های وبلاگ و نتیجه اش رو ببینید که آیا میتونید از پس میکرو بربیاین یا نه ؟!

موفق باشید.
سلام حال شما خوبه !
یه لطفی کن یه مثال در رابطه با ADC  اگه ممکنه بزن بالفرض مثال ولتاژ ورودی از سنسور 3 ولت باشه و ولتاژ مرجع ما 3 ولت باشه اگه ممکنه فرمول محاسبه ونحوه ی تبدیل رو بگید ممنون میشم من یکم متوجه نشدم  بخش 12 رو هم خونم ولی طرز استفاده از فرمول ونحوه ی تبدیل واسم ملموس نبود 
ممنونم
باعرض پوزش من حواسم نبود ولتاژ مرجع رو اشتباه گفتم میخواستم بگم 2.56 باشه در واقع پایه ی 30 و 32 میکرو  رو به  vcc میزنیم یه مثال بزنید کاملا متوجه میشم 
ممنونم
پاسخ:
با توجه به فرمول معرفی شده،Vin=3 , Vref=2.56 , n=10
با توجه به شرایطی که فرمودید و بنده هم تذکر دادم حداکثر ولتاژ ورودی میتواند 2.56 ولت باشد،در حالیکه شما ورودی رو 3 ولت در نظر گرفتید.
پس هنگام انتخاب ولتاژ مرجع باید دقت به این مسئله داشته باشید.
اصلا برای همین اتمل جای انتخاب برای ما گذاشته که بتونیم ولتاژ مرجع رو خودمون انتخاب کنیم !

موفق باشید.
سلام
من معمولا خیلی کم نظر میزارم ولی دیدم با این زحمتی که کشیدی اگه نظر نزارم بی انصافیه.
دمت گرم.(خدا پنجره باز رو به اتاقت باشه)
پاسخ:
سلام.
ممنون از همراهیت.
چه دعای قشنگی !
سلام خسته نباشید
ممنون از سایت خوبتون
چند  سوال داشتم
در این خط منظور از << و |= چیه؟
ADMUX |= (1<<REFS1)|(1<<REFS0);
من برداشتم از
(1<<REFS1)
این بود که REFS1  رو 1 کنه
من برنامه نویس AVR نیستم و میخواستم اینو به دوستم توضیح بدم و برام جالب بود چون در برنامه نویسی نرم افزار معنای SHIFT  دادن چیز دیگری است و |= هم تا حالا ندیدم
دوم اینکه در
ADCSRA |=(1<<ADSC);
while ((ADCSRA & (1<<ADIF))==0); ADCSRA |=(1<<ADIF);
درباره خط
while ((ADCSRA & (1<<ADIF))==0);
متوجه نشدم
 در کد دیگری به این شکل زیر بود
لطفا تفاوت این دو رو توضیح دهید
خیلی ممنونم.
ADCSRA|=0x40;
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
پاسخ:
سلام
ممنون

در مورد سوالی که پرسیدید اگر بخوام بصورت کامل توضیح بدم،در حد نوشتن یه پست جدید زمان میبره !
و با توجه به اینکه شرط رو بر این گذاشتیم که دوستان،تا با زبان سی آشنایی نسبتا کاملی پیدا نکردند،شروع به برنامه نویسی نکنند؛لذا از آموزش زبان سی و نکات اون صرفنظر کردیم.

اما بصورت مختصر در مورد سوال اول : برداشتتون صحیحه و از شیفت به چپ با اون فرمتی که نوشته شده برای یک کردن بیت استفاده میشه !

و در مورد (=|) هم میتونید از آموزش های عملگرهای بیتی قضیه رو دنبال کنید.

در مورد سوال دوم هم : بیت ADIF هنگامی که عملیات تبدیل تموم بشه،یک میشه !
میایم چک میکنیم که آیا این بیت در رجیتسر ADCSRA یک شده یا نه ؟!
تا زمانی که صفره،یعنی هنوز تبدیل انجام نشده و برنامه داخل حلقه گیر میکنه (همین رو انتظار داریم)
و هنگامی که یک شد،با شرط داخل حلقه تناقض پیدا میکنه و از حلقه خارج میشه و برنامه ادامه روال خودش رو طی میکنه !!!

و در مورد تفاوت دو کدی که مطرح کردید،پیشنهاد میکنم که با قلم و کاغذ شروع به حل مسئله کنید تا خودتون متوجه بشید.
اگر مشکل رفع نشد در خدمتم !

موفق باشید.
آقا خیلی گلی!! امتحان هم میگیری؟ من این ترم همش اینجام، میترسم کنترل بیفتم ،بیا شما 3 واحد دانشکده ارائه بده من اونو وردارم معدلم پایین نیاد!
من این خطو نفهمیدم، 3 ساعت (عدد کثرت نیس، واقعن 3 ساعت شد) سرچ کردم و باهاش کلنجار رفتم آخرش نفهمیدم جطور میشه
کلن همه به همین 3 مدل نوشتن :
while ((ADCSRA & 0x10)==0);
    while ((ADCSRA & (1<<ADIF))==0);

ا
    while (!(ADCSRA & (1<<ADIF)));
حالادیگه منم کپی میکنم اما اگه فرصت کردید توضیح بدید خوبه
بعدم میشه آموزش بعدی کار با ال سی دی و بعدیشم رابط پورت سریال و usart و اینا باشه؟
ممنون
ممنون
ممنون
پاسخ:
خواهش میکنم،ایشالا به یاری خدا حال بعضی از این استادای "کم فروش" رو خواهیم گرفت !
ببین عزیزم،من یه بار دیگه هم توضیح دادم.اما چون تلاشتو کردی و نتیجه نگرفتی وظیفمه که بیام به کمکت !!!
بیت ADIF وقتی یک میشه،که عملیات تبدیل ADC بصورت کامل انجام بشه.(تبدیل مقدار سیگنال آنالوگ به معادلش در حوزه دیجیتال)
پس برای ما اهمیت داره که وقتی تبدیل کاملا انجام شد،مقدارو بخونیم !
برای همین هم میایم چک میکنیم ببینیم که آیا این بیت یک شده یا نه ؟
ما نیاز داریم که مقدار تبدیل شده رو بخونیم و ازش استفاده کنیم.
پس باید زمانی بخونیمش که بصورت کامل عملیات تبدیل انجام شده باشه و در غیر اینصورت اطلاعاتی که میخونیم ناقص از آب در میاد.
اما پردازنده برنامه رو بصورت سری میخونه و پیش میره(خط به خط از بالا میخونه میاد پایین !)
    while ((ADCSRA & (1<<ADIF))==0){};
وقتی به این حلقه میرسه،چک میکنه که آیا بیت ADIF که در رجیستر ADCSRA قرار داره مقدارش صفره یا نه ؟!
اگر صفر باشه که معنیش اینه که میکرو مشغول عملیات تبدیله و اگه یک باشه یعنی میکرو بصورت کامل تبدیل رو انجام داده.
این حلقه زمانی محتویاتش ({}) اجرا میشه که مقدارش صفر باشه.
حالا محتویات این حلقه چیه ؟  هیــــــچـــــــی !!! (میتونیم اصلا علامت "{}" رو نذاریم ! که منم نذاشتم.)
یه حلقه سرکاریه که میکرو رو تا کامل شدن تبدیل،مشغول میکنه و اجازه نمیده خط بعدی برنامه اجرا بشه ! (و ما هم همینو میخواستیم)

هنگام هم که مقدار بیت ADIF یک شد،اگر حلقه در حال اجرا باشه،از حلقه خارج میشه و اگر هم در حال اجرا نباشه،چون با شرط ورود به حلقه در تناقضه ازش خارج میشه !
بقیه کدها هم همین کارو میکنن منتهی با یه بیان دیگه نوشته شدند !

امیدوارم که این توضیح هم برای شما و هم بقیه دوستانی که مشکل داشتند مفید بوده باشه.


فعلا اجازه بدین مبحث تایمر/کانتر ها رو تموم کنیم.
خیلی کارا داریم هنوز ...
موفق باشید.
من فکر کنم الآن باید نعره بکشم و سر به بیابون بذارم!!
من فقط مشکلم همون 2 تا آکولاد بود! فکر میکردم این خط
ADCSRA |=(1<<ADIF);
داخل شرط وایل اجرا میشه، بعد هم که هی چک میکردم میدیدم وقتی adif صفره حلقه کامل میشه و خط بالا اجرا میشه و این دقیقن بر عکسه چیزیه که میخوایم!
البته وقتی نتونستم خودمو قانع کنم یه سری فلسفه چیدم برای خودم که وقتی adif یکه شرط اجرا میشه و برنامه درسته! البته تا آخرین لحظه هم میدیدم وقتی adif صفره شرط اجرا میشه!!
خیلی خیلی ممنون


پاسخ:
خخخخخخخ

خدا رو شکر که مشکلتون حل شد.
اما حواستون باشه وقتی علامت " ; " رو دیدید،بدونید که دیگه دستور تموم شده و دستورات بعدیش به اون دستور ربطی ندارند !

موفق باشید.
سلام عزیز
اقا من موضوع عملگرهای بیتی توی کتاب جعفرنژاد قمی نیگاه کردم اما توش عبارت (=|) توضیح نداده یود منظورم همینه که پایین نوشتی
ADCSRA |=(1<<ADIF);
من عملگرهای بیتی متوجه شدم تو همون کتاب مثلا عملکرد & و | اینا خوب میدونم فقط اینکه عملگر OR (|)  با مساوی بیاد نفهمیدم - ممنون میشم توضیح بدی
پاسخ:
سلام
یه پیشنهاد دارم برای شما و همه ی اونایی که این شیوه کدنویسی رو درست متوجه نمیشند !
یه قلم و کاغذ بردارید و چندتا دو دو تا چهارتا بکنید.
مطمئن باشید که اگه به همین شیوه پیش برید،چنان یاد میگیرید که هیچوقت یادتون نره.

در کتاب جناب جعفرنژاد آیا چنین عبارتی ندیدید ؟؟؟

مثلا :
n +=5;
در اینجا منظور اینه که n با خودش جمع شود ! البته با گام 5.

در عبارت بالا هم منظور این است که مقدار فلگ ADIF یک شود و سپس با رجیستر ADCSRA ذکر شده OR شود.

موفق باشید.

You are the best
best regard for you
with the best wishes for you
پاسخ:
بله
مـــــــــی تــــــــــــــــوووو !!!
عالییییی
سلام
واقعا ممنون
فقط من ای کلمه ی unsigned رو که قبل از متغیر ها اوردید نفهمیدم چیه
ممنون میشم توضیح بدید.
پاسخ:
سلام
به یکی از مراجع زبان سی،بخش "متغیرها" مراجعه کنید.

موفق باشید.
۳۰ تیر ۹۳ ، ۱۳:۴۵ امید ساسانی
سلام و درود مهندس جان،جان من سرت و نکوبی به دیوار میشه بفرمایید در کدوم بخش 12 اینو توضیح دادید
T = temp();
T = (((T*2.56)*100)/1023);
در این قسمت

ببینید دوستان،بنده گفتم درجه دقت 10 بیتی این یعنی چه ؟

 

ما وقتی به یکی از کانال های ADC میکرو ولتاژی بین 0 تا 5 ولت میدیم و انتظار داریم که میکرو هم برامون نسبت بگیره و اونو تبدیل به سیگنال دیجیتال کنه،روش کار بدین صورته که در دقت 10 بیت،میکرو بازه بین 0 تا 5 ولت رو به 210 = (1024) واحد تقسیم میکنه :

 

تصویر بالا کاملا گویاست !

در حالت گفته شده 0 ولت برابر عدد 0 دیجیتال و 5 ولت برابر عدد 1023 دیجیتال میباشد.و هر ولتاژی بین 0 تا 5 ولت با همون نسبتی که گفتم خدمتتون به مقدار دیجیتالش تبدیل میشه.برای مثال ولتاژ 2.5 ولت معادل دیجیتالش در این حالت برابر با عدد 512 میباشد.

کاملا مشخص است که هرچقدر این درجه دقت (n) بالاتر باشد،مقدار دیجیتال بدست آمده نیز به مقدار آنالوگ آن نزدیکتر است.

 

اما برای Vref حالا حالا ها بحث داریم...

دما چه دخلی به ولتاژ داره یه توضیح عامیانه بده داداش من فدای همه خوبی هات
پاسخ:
سلام عزیزم

تو بخش 12 فرمولی ارائه شده به این صورت :

در مورد اینکه دما چه دخلی به ولتاژ داره هم بحث شده :

این سنسور به ازای هر درجه سانتی گراد افزایش دما،10 میلی ولت به خروجی خودش اضافه میکنه.

به نظرم یه بار دیگه قسمت های 12 و 18 آموزش رو بخووون !

موفق باشید.
very very good.thanks
جددا که خدا قوت
ببخشید تو این پروژه برا دمای منفی پیش بینی نشده؟
اصلا کلا این سنسور با دمای منفی چیکار میکنه
دیتا شیتش رو خوندم یه چیزایی دستگیرم شد ولی خواستم با بیان شیوا و دوست داشتنی شما هم بشنوم
ممنون

پاسخ:
سلام
توضیح اونجوری اگه بخواین که زیاد باید توضیح داده بشه.
اما برای انجام اینکار از بهره تفاضلی استفاده میشه که در قسمت توضیحات واحد ADC یه اشاره کوچیکی بهش کردم.

موفق باشید.
مرسی از توضیحات کامل.
این عملیات خوندن ولتاژ و تبدیل چقدر طول میکشه؟ من میخوام هر 0.1 ثانیه ولتاژ رو بخونه و بریزه تو یک آرایه. باید واسش delay بذارم یا تایمر؟
موقع فعال کردن ADC یک فرکانس کلاک ازمون میخواد، اونو باید رو چند بذاریم؟
پاسخ:
ممنون
بستگی به فرکانس کاری واحد ADC والبته میکرو داره.
هم میتونید از delay استفاده کنید و هم از تایمر.
اگر از واحد کدویزارد استفاده میکنید که اولا عرض کنم خدمتتون که استفاده نکنید !
ثانیا در مورد این مسئله به تفصیل در بخش 12 آموزش توضیحات داده شده.

موفق باشید.
سلام آقای مهندس نوری عزیز. 
واقعا که زحمت میکشید و واقعا بنده و همه دوستان قدردان این لطف شما هستیم.
من رشتم به الکترونیک مرتبط نسیت ازین رو با زبان برنامه نویسی C هم آشنایی ندارم. ولی به خاطر علاقه شدید به مباحث و پروژه های اکلترونیکی با زبان بیسیک و نرم افزار Bascom کار میکنم چون فهمش برام آسانتر است. 
حالا از شما درخواست دارم در صورت امکان در آخر برنامه به زبان Bascom قرار دهید تا افرادی مثل بنده هم بتوانند حداکثر بهره رو از فرمایشاتتون ببرند. با تشکر فراوان
پاسخ:
سلام
متاسفانه بنده به بسکام تسلط ندارم و عاقلانه هم نیست که تلاشی بکنم برای یادگیریش !
لذا شما هم سعی کنید که به زبان سی کوچ کنید.
مطمئن باشید ضرر نمی‌کنید !!!
Sepas gozaraaaaaaaaaaam
پاسخ:
:)
احسنت انشالله موفق و موید باشی یکی از بهترین آموزش هایی هست که تو اینترنت دیدم
پاسخ:
ممنون.نظر لطفتونه ...
سلام آقای مهندس
اول از زحمتی که میکشید تشکر میکنم واقعا وبلاک خوبی دارین
من همین پروژه دماسنجی که گذاشتین رو خواستم پیاده کنم تو پرتئول مدار جواب میده ولی وقتی عملی بستم همیشه یه دما رو نشون میده و اصلاً تغییر نمیشه (دما محیط رو هم عوض کردم) ممکنه راهنمایی کنید که چطوری میتونم این مشکل رو حل کنم
پاسخ:
سلام

اول از همه از سالم بودن سنسورتون با اندازه گیری مقدار ولتاژ خروجی سنسور در دماهای مختلف مطمئن بشید.
رجیسترها رو مجددا چک کنید و ببینید که آیا کانال ADC رو بدرستی انتخاب کردید و یا اینکه سنسورتونو به کانال انتخاب شده وصل کردید یا نه ؟!

برای اینکه از صحت برنامه نویسی خودتون مطمئن بشید،اول از همه به جای نمایش مقدار دما،یه عدد ثابتو روی سون سگمنت نشون بدید تا یه وقت خدای نکرده مشکل از برنامه ای که نوشتید نباشه.
بعد که مطمئن شدید اقدام به نمایش دما روی سون سگمنت کنید.

موفق باشید.
با سلام 
اگر مبحثی به عنوان مقایسه کننده انالوگ قرار بدین ممنون میشم

پاسخ:
تا ببینیم چی میشه ...
salam.kheili ali bud,mamnun.
moshkele jaryan ke goftid ro mishe bishtar tozih bedid?
پاسخ:
سلام
میتونید از ترانزیستور بعنوان سوئیچ با مقدار جریان کلکتور مناسب استفاده کنید.
همچنین میتونید از تقویت کننده های دارلینگتون نظیر ULN2803 که دارای 8 ورودی و 8 خروجی نات شده تقویت شده با میزان جریان 500 میلی آمپر در خروجی خود است نیز بهره ببرید.

موفق باشید.
سلام دوست عزیز خسته نباشید
من یه برنامه با lm35 نوشتم و روی pcb بردم ولی حالا استادمون میگه دمای منفی رو هم باید نشون بده حالا میخواستم بدونم میشه به صورت نرم افزاری (کد ویژن) برنامه رو عوض کرد چون چند جا خوندم باید توی سخت افزار رو یه مقدار تغییر بدم.
خیلی ممنون
پاسخ:
سلام

بله،حتما باید تغییرات سخت افزاری داشته باشید !
سلام اگه ممکنه شماره صفحه ای که کتاب جعفژادقمی عملگربیتی =|  رو توضیح داده بنویسید
تشکر
پاسخ:
کتابشو الان ندارم !
ببخشید !!!
مررررررررررر30 40 50
پاسخ:
تشکر
سلام
شما باید استاد دانشگاه بشی
شیر فهم میکنی !!!

.................................

کارت درسته ، از صد تا کتاب بهتر توضیح دادی .
پاسخ:
خخخخ ...
خجالتم ندین
سلام
مگه نمیگید که     while ((ADCSRA & (1<<ADIF))==0);

اگه این شرط قبول نشه مکرو میمونه تا قبول شه یا ردش میکنه میره خط بعدی؟
بعد شما گفتی که اگه aDIFیک بشه شرط قبول میشه ولی اینجاکه==0است!
چرا این {} از اینا نداره خوب اگه شرط قبول شه میره چیرو اجرا میکنه

ممنون میشم جواب بدین
پاسخ:
سلام.
دوست عزیز اولا مطالبو از ابتدای وبلاگ بخونید و بیاین جلو ...
ثانیا تا به یه مبحث مسلط نشدین،سراغ مبحث بعدی نرید.
ثالثا مطالبو عمقی بخونید نه سطحی !
کلیه سوالات شما ناشی از عدم تسلط و توجه کافیه !
جواب تمامی سوالات شما با کمی دقت در مطالب و نظرات قابل برداشته !
منظور از return چیه؟
پاسخ:
زبان سی !
سلام ببخشید من باز مزاحم شدم
من بیشتر کد هارا متوجه نمیشم
مثلا


    data[2]=seg[10];
    data[3]=seg[11];
این رو مثلا متوجه نمیشم


باید چکار کنم لطفا راهنمایی کنید خیلی دوست دارم کدویژن رو یاد بگیرم
یه خسته نباشید هم بابت سایتتون و مطالبش

پاسخ:
:)
من همه مطالب رو خوندم  از اول تا این جا
من آشنایی زیادی ندارم فقط بلد بودم با ویزارد کد ویژن یه چشمک زن بنویسم
الان یعنی برم از اول مطالبو بخونم نیازی به خوندن کتاب نیست ؟؟؟
لطفا جواب بدید میخوام بدونم فقط مطالب سایت برای فهمیدن این مطلب کافیه
پاسخ:
پس معلومه که خوندنتون،خوندن نبوده !!!
از اینجا هم ساده تر مطلب پیدا نمیکنی !
خب مثلا شما کجا تابع هارو توضیح دادی ؟؟؟
پاسخ:
دوست عزیز یجوری صحبت میکنید که انگار من به شما بدهکارم !
شما باید خودتون زحمت بکشید و وقت بزارید برای یادگیری !
این وبلاگ فقط یه ابزار کمکیه !!!
عزیز من بدهکار چیه؟ این همه آدم و من به شما مدیونیم که رایگان آموزشاتو نشر میدی و از دل و جون مایه میزاری


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

منظورم اینه که برای یادگیری باید زحمت بکشید.
قرار نیست مطالبو یه بار بخونید و یاد بگیرید و ...
والله من خودم که میکرو یاد میگرفتم این چنین وبلاگی نبود !
اینقدر هم سوال برام پیش میومد که کسی حوصله نمیکرد برام جواب بده !
اما تلاش کردم تا یاد گرفتم.

شما اگه مطالب وبلاگو خونده باشی،در مورد اینکه باید به زبان سی مسلط باشین زیاد بحث کردم.
در مورد اینکه از کدویزارد استفاده نشه،گفتم.
 و ...
دستت درد نکنه خیلی ممنون
پاسخ:
خواهش
سلام من تو این پروژه تو پروتئوس از سون سگمنت کاتد مشترک استفاده کردم  کدهای مربوط به سون سگمنت کاتد مشترک رو جایگذاری کردم تو آرایه seg و این دو خط رو به این صورت تغییر دادم PORTD=0xff ,  PORTD=0<<i; ولی درست عمل نمیکنه مشکل از کجاست ؟
پاسخ:
این رابطه (PORTD=0<<i)از نظر منطقی غلطه !

کپی پیست نکنید،یاد بگیرید مطلبو ...
با سلام و تشکر از مطالب خوبتون
موفق و عاقبت بخیر باشید
باتشکر.
پاسخ:
سپاس
درود دوست من 
اول تشکر میکنم به خاطر وبلاگ بسیار عالی تون و زحماتی که میکشین

بنده سعی کردم مطابق با اموزش شما این برنامه رو اجرا کنم اما کدویژن در هنگام کامپایل یه ارور نا اشنا برای بنده میده میشه بفرمایید ایراد کجاست ؟ 
 the 'main' function must return 'void' type

نمیدونم منظورش اینجا از ریترن چیه :|
این جا چیزی که نوشتم رو کپی کردم :

http://pastebin.com/WZxiXg9L

بازم تشکر 



پاسخ:
دوست عزیز
اگه تابع main شما خروجی نداره،چرا int تعریف کردین خروجیشو ؟!
خروجی رو void تعریف کنید،حل میشه !
dastet tala

باسلام
ممنون از مطلب کاملتون. من مراحل بالا را روی برد بورد بستم ولی عدد خیلی جابجا میشه یعنی اصلا نمیتونی عدد را بخونی. اگه میشه راهنمایم کنید. شاید اگه بگم دما را هر 1 دقیقه به روز رسانی کنه درست بشه. نمیدونم.
دوم اینکه من سنسور دما را خارج میکنم باز هم یه دمایی نمایش داده میشه. و دما هم در گرما تابسات از 11 درجه بالاتر نرفته و از 6 پایین تر نیومده.
ممنون میشم راهنماییم کنید استاد
آقا سلام
آقا من هیج سایتی نظر نمیذارم
ولی خداییش دلم نیومد از اینجا بدون نظر برم
خدا قوت
خدا امواتتو بیامرزه
سلام،خیلی هم خوب :))
من همشو فهمیدم غیر از یه خط:
ADCSRA |=(1<<ADIF);
شما میگید که به وسیله این کد،فلگ وقفه رو صفر میکنید،در صورتی که با این کد،فلگ همون 1 میمونه،در واقع اصلا نوشتن این هیچ تاثیری نداره،اگه میشه اینجا رو یه کم واضح تر بگید لطفا
سلام
وقت بخیر
آموزش مجازی صفر تا صد ساخت ربات پرنده بصورت فیلم و نکته به نکته.
جهت کسب اطلاعات بیشتر و دریافت سرفصل آموزشی به شماره زیر ادرس ایمیل خود را ارسال بفرمایید:
09176762585(تماس/پیامک/واتس اپ/تلگرام)
دفتر:
071-37213444
 
سلام
ممنون بابت مطالب آموزنده
من یه مشکلی دارم
من دانش آموز هستم به صورت حرفه ای رشته برق رو مورد مطالعه قرار ندادم
البته با مطالبی که گذاشتید آشنایی دارم تقریبا
یه مشکلی دارم توی پیاده سازی
وقتی مدار رو با پروتئوس اجرا می کنم عددی درستی روی سگمنت دیده نمیشه
مثلا
27C
رو با LED های زیر نشون میده
part1: deg
part2: c
part3: bg
part4: f
سعی کردم همه چی رو چک کنم
حتی کد رو کپی پیست کردم
سگمنت هم آند مشترک هستش
ولی نشون نمیده
خیلی سعی کردم درستش کنم اما نشد
میدونید مشکل از کجا می تونه باشه؟؟؟
۱۱ آبان ۹۴ ، ۰۹:۵۴ ریزپردازنده
سلام. خیلی خیلی ممنونم
دنبال مطلبی مثل مطلب شما می گشتم که پروژه رو شرح بده

سلام خسته نباشید بابت مطالب خوبتون ممنونم. اگر میشه داخل مثالاتون بیشتر در مورد رجیستر ها توضیح بدید. ممنون
سلام  ممنون بابت برنامه 
من برنامه رو نوشتم اما تو خط int main (void)
ی error داره 
Error: the 'main' function must return 'void' type
مشکل از کجاست؟
ممنون
میتونم بگم ممنونم
از نبوغ برنامه نویسی شما تشکر میکنم
سلام من اتفاقی با سایت شما آشنا شدم .. قبلا کدویژن کار میکردم الان زدم تو کار طراحی سایت با سی شارپ و وی بی ولی مطالب سایت شما خیلی عالیه اصلا انگار میدونی کاربرایی که اونور مانیتور نشستن دوست دارن چی یاد بگیرن .. امیدوارم در تمام مراحل برنامه نویسی و زندگی پیروز و سربلند باشی ..
دوست عزیز عالی بود

اما نیازی نیست داخل تابع Main تنظیمات ADC داخل While قرار بگیره !
سلام
اگربراتون امکان داره ایپرام سون سگمنت رابازبان بیسیک یادبدهید
اون زمانی که این وبلاگ رو راه انداختم نمیدونستم دقیقا میخوام چقدر مطلب بزارم و کلا تا چه سطحی پیش برم.اما همونطور که میبینید بخش 18 آموزش رو هم شروع کردیم و با دعای خیر شما دوستان ایشالا میریم تا بخش  1018 !!! 

خودت اینو گفته بودی....چی شدی پس؟؟؟؟؟؟؟
دومین بار این پروژه رو خوندم.اما متوجه نمیشم......علتش اینه که کد ویژن یه ذره تغییر کرده و برای راه اندازی واحد های adc یا .... نیاز نیست بیت هاش رو تک تک مقدار دهی کنی.تو بخش تنظیمات اولیه همه رو مشخص میکنی واون خودش این بیت هار و مقدار دهی میکنه

سلام مرسی بابت مطلبتون خیلی عالی بود

فقط ی مشکلی برای من پیشاومد اونم اینکه عدد ها روی سون سگمنت اصلا معلوم نیستن واسه رفع این مشکل چیکار باید بکنم؟

best
اجرکم عند الله 
واقعا دمت گرم اخوی

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">