وصل کردن 5 کلید به یک پایه میکروکنترولر

در اين بخش مي‌توانيد آموزش و مثال‌های مرتبط با میکروکنترلرهای AVR را مشاهده بفرمایید

مدیران انجمن: SAMAN, sinaset, شوراي نظارت

ارسال پست
Colonel II
Colonel II
نمایه کاربر
پست: 7011
تاریخ عضویت: سه شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9183 بار
سپاس‌های دریافتی: 21042 بار
تماس:

وصل کردن 5 کلید به یک پایه میکروکنترولر

پست توسط sinaset » یک شنبه 1 آذر 1394, 10:42 am

با سلام

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

روش کار به این شکل است ، به کمک تقسیم مقاومتی،روی هر کلید یک ولتاژ قرار گرفته شده است ،به ترتیب زیر:

کلید یک = 1v
کلید دو = 2v
کلید سه = 3v
کلید چهار = 4v
کلید پنج = 5v
تصویر
حال وقتی ما یکی از کلید ها را فشار دهیم،یک ولتاژ برای واحد (ADC(0(پایه PC0 میکروکنترولر) فرستاده میشود، سپس ما به کمک واحد مذکوره ولتاژ را میخوانیم سپس،متناسب به ان یکی از LED ها را روشن می کنیم.

تصویر
 قطعات مورد نیاز :      عدد کلید    عدد مقاومت 2 کیلو    عدد مقاومت 100    عدد مقاومت 100 کیلو    عدد    عدد خازن 0.01 (10 نانو فاراد یا 103 عدسی)  کد برنامه به زبان کدویژن: 

کد: انتخاب همه

/*******************************************************
Project :sinaset / 5 button 1pin
Version :1v
Date : 11/21/2015
Chip type : ATmega8A
AVR Core Clock frequency: 1.000000 MHz
*******************************************************/
#include <mega8.h>
#include <delay.h>

#define ADC_VREF_TYPE ((0<<REFS1) | (0<<REFS0) | (0<<ADLAR)) // AREF ولتاژ مرجع
float read_adc(unsigned char adc_input) //ADC تابع خواندن واحد
{
ADMUX=adc_input | ADC_VREF_TYPE;
delay_us(10);
ADCSRA|=(1<<ADSC);
while ((ADCSRA & (1<<ADIF))==0);
ADCSRA|=(1<<ADIF);
return ADCW;
}

void main(void)
{
float volt;
// ADC Clock frequency: 125.000 kHz
// ADC Voltage Reference: AREF pin
ADMUX=ADC_VREF_TYPE;
ADCSRA=(1<<ADEN) | (0<<ADSC) | (0<<ADFR) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);
SFIOR=(0<<ACME);

DDRD=0xff;
PORTD=0xff;
while (1)
{
volt=read_adc(0);
volt=volt*5;
volt=volt/1023; //فرمول هاي محاسبه به ولتاژ

if (volt>0.9 & volt<1)
{
PORTD.0=!PORTD.0;
delay_ms(300);
}
if (volt>1.9 & volt<2)
{
PORTD.1=!PORTD.1;
delay_ms(300);
}
if (volt>2.9 & volt<3)
{
PORTD.2=!PORTD.2;
delay_ms(300);
}
if (volt>3.9 & volt<=4)
{
PORTD.3=!PORTD.3;
delay_ms(300);
}
if (volt>4.9 & volt<=5)
{
PORTD.4=!PORTD.4;
delay_ms(300);
}
}
}

[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]سورس و شبیه ساز (پرتئوس 8)
باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.

Novice Poster
Novice Poster
پست: 60
تاریخ عضویت: پنج شنبه 22 بهمن 1394, 9:03 pm
سپاس‌های ارسالی: 158 بار
سپاس‌های دریافتی: 24 بار

Re: وصل کردن 5 کلید به یک پایه میکروکنترولر

پست توسط javad_2010 » پنج شنبه 12 فروردین 1395, 11:34 am

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

Colonel II
Colonel II
نمایه کاربر
پست: 7011
تاریخ عضویت: سه شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9183 بار
سپاس‌های دریافتی: 21042 بار
تماس:

Re: وصل کردن 5 کلید به یک پایه میکروکنترولر

پست توسط sinaset » پنج شنبه 12 فروردین 1395, 11:52 am

سلام بر شما

در بالا مقداری توضیح داده شده بود.. در مدار به کمک تقسیم مقاومت 5 حالت مختلف ولتاژ به وجود امده بود ،سپس به کمک واحد ADC ولتاژ هر پایه خواند میشود

ما در برنامه میدانم که ولتاژ هر پایه چقدر می باشد، پس میدانیم که مثلا اگر کلید 1 فشار داده شود، 1 ولت، بروی پایه ADC می افتد، پس 1 ولت ، پایه 1 می باشد
دیگر پایه ها نیز ولتاژ برایشان مشخص شده که ما به کمک خواندن ، می توانم بفهیم که چه پایه فشار داده شده است.
باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.

Novice Poster
Novice Poster
پست: 60
تاریخ عضویت: پنج شنبه 22 بهمن 1394, 9:03 pm
سپاس‌های ارسالی: 158 بار
سپاس‌های دریافتی: 24 بار

Re: وصل کردن 5 کلید به یک پایه میکروکنترولر

پست توسط javad_2010 » پنج شنبه 12 فروردین 1395, 11:35 pm

sinaset نوشته شده:سلام بر شما

در بالا مقداری توضیح داده شده بود.. در مدار به کمک تقسیم مقاومت 5 حالت مختلف ولتاژ به وجود امده بود ،سپس به کمک واحد ADC ولتاژ هر پایه خواند میشود

ما در برنامه میدانم که ولتاژ هر پایه چقدر می باشد، پس میدانیم که مثلا اگر کلید 1 فشار داده شود، 1 ولت، بروی پایه ADC می افتد، پس 1 ولت ، پایه 1 می باشد
دیگر پایه ها نیز ولتاژ برایشان مشخص شده که ما به کمک خواندن ، می توانم بفهیم که چه پایه فشار داده شده است.
باتشکر.


ممنون
در نحوه استفاده از کدویزارد،وبه صورت دستی تنظیمات از این واحدم یه توضیح بدین،خیلی ممنون میشم

Colonel II
Colonel II
نمایه کاربر
پست: 7011
تاریخ عضویت: سه شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9183 بار
سپاس‌های دریافتی: 21042 بار
تماس:

Re: وصل کردن 5 کلید به یک پایه میکروکنترولر

پست توسط sinaset » جمعه 13 فروردین 1395, 8:40 am

سلام بر شما

انشالله این موارد رو در تاپیک اموزش avr بعدا توضیح خواهم داد.

اما موقتا اینتاپیک رو هم مطالعه کنید.
باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.

Novice Poster
Novice Poster
پست: 60
تاریخ عضویت: پنج شنبه 22 بهمن 1394, 9:03 pm
سپاس‌های ارسالی: 158 بار
سپاس‌های دریافتی: 24 بار

Re: وصل کردن 5 کلید به یک پایه میکروکنترولر

پست توسط javad_2010 » پنج شنبه 19 فروردین 1395, 6:52 pm

sinaset نوشته شده:با سلام

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

روش کار به این شکل است ، به کمک تقسیم مقاومتی،روی هر کلید یک ولتاژ قرار گرفته شده است ،به ترتیب زیر:

کلید یک = 1v
کلید دو = 2v
کلید سه = 3v
کلید چهار = 4v
کلید پنج = 5v تصویر  وقتی ما یکی از کلید ها را فشار دهیم،یک ولتاژ برای واحد (ADC(0(پایه PC0 میکروکنترولر) فرستاده میشود، سپس ما به کمک واحد مذکوره ولتاژ را میخوانیم سپس،متناسب به ان یکی از LED ها را روشن می کنیم.
 تصویر  قطعات مورد نیاز :      عدد کلید    عدد مقاومت 2 کیلو    عدد مقاومت 100    عدد مقاومت 100 کیلو    عدد    عدد خازن 0.01 (10 نانو فاراد یا 103 عدسی)  کد برنامه به زبان کدویژن: 

کد: انتخاب همه

/*******************************************************
Project :sinaset / 5 button 1pin
Version :1v
Date    : 11/21/2015
Chip type         : ATmega8A
AVR Core Clock frequency: 1.000000 MHz
*******************************************************/
#include <mega8.h>
#include <delay.h>

#define ADC_VREF_TYPE ((0<<REFS1) | (0<<REFS0) | (0<<ADLAR))  // AREF ولتاژ مرجع
float read_adc(unsigned char adc_input) //ADC تابع خواندن واحد
{
ADMUX=adc_input | ADC_VREF_TYPE;
delay_us(10);
ADCSRA|=(1<<ADSC);
while ((ADCSRA & (1<<ADIF))==0);
ADCSRA|=(1<<ADIF);
return ADCW;
}

void main(void)
{
float volt;
// ADC Clock frequency: 125.000 kHz
// ADC Voltage Reference: AREF pin
ADMUX=ADC_VREF_TYPE;
ADCSRA=(1<<ADEN) | (0<<ADSC) | (0<<ADFR) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);
SFIOR=(0<<ACME);

DDRD=0xff;
PORTD=0xff;
while (1)
    {
     volt=read_adc(0);
     volt=volt*5;   
     volt=volt/1023;   //فرمول هاي محاسبه به ولتاژ
      
     if (volt>0.9 & volt<1)
     {
     PORTD.0=!PORTD.0;
     delay_ms(300);
     }   
     if (volt>1.9 & volt<2)
     {
     PORTD.1=!PORTD.1;
     delay_ms(300);
     }
     if (volt>2.9 & volt<3)
     {
     PORTD.2=!PORTD.2;
     delay_ms(300);
     }
     if (volt>3.9 & volt<=4)
     {
     PORTD.3=!PORTD.3;
     delay_ms(300);
     }
     if (volt>4.9 & volt<=5)
     {
     PORTD.4=!PORTD.4;
     delay_ms(300);
     }
    }
}


[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]سورس و شبیه ساز (پرتئوس 8) 
باتشکر.


با سلام
اگه بخوایم از ولتاژ مرجع داخلی استفاده کنیم تنظیماتش باید به چه صورتی باشع؟؟؟

Colonel II
Colonel II
نمایه کاربر
پست: 7011
تاریخ عضویت: سه شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9183 بار
سپاس‌های دریافتی: 21042 بار
تماس:

Re: وصل کردن 5 کلید به یک پایه میکروکنترولر

پست توسط sinaset » جمعه 20 فروردین 1395, 9:03 am

با سلام
اگه بخوایم از ولتاژ مرجع داخلی استفاده کنیم تنظیماتش باید به چه صورتی باشع؟؟؟

با سلام

ولتاژ مرجع را به شکل زیر تغیر دهید

کد: انتخاب همه

#define ADC_VREF_TYPE ((0<<REFS1) | (1<<REFS0) | (0<<ADLAR))


باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.

ارسال پست

بازگشت به “آموزش و مثال‌ها AVR”