• خونه
  • تماس با ما
  • همکاری با ما
  • حمایت مالی
آزادی حجاز
  • News
  • AVR
    • AVR Train
      • آموزش جامع AVR
      • آموزش صحیح و خوانا نوشتن کد
    • تابلو روان
    • موتور
      • موتور DC
      • موتور پله ای
      • سرو موتور
    • سنسور و ماژول
      • RFID
      • التراسونیک
      • شتاب سنج
      • رطوبت سنج
      • دماسنج
      • بلوتوث
      • اتصال AVR به کامپیوتر
      • اتصال رم به AVR
      • فرستنده گیرنده رادیویی
      • ساعت و تاریخ
      • جوی استیک
    • IC
      • IC حافظه
      • ADC
      • DS1307(ساعت)
      • BCD TO 7S
      • شیفت ریجستر
    • LCD
      • LCD گرافیکی
      • LCD کاراکتری
      • LCD رنگی
    • LED – 7S – Dot Matrix
      • LED
      • سون سگمنت(۷S)
      • دات ماتریس
    • ساعت
    • پروگرامر
    • اسیلوسکوپ
    • ولتاژ،جریان،مقاومت،فرکانس،خازن و…
      • ولت متر
      • اهم متر
    • امواج
    • کی پد(KEY PAD)
    • فوتوسل
  • ARM
    • ARM Projects
    • ARM Train
      • AT91
      • STM32
      • LPC1768
      • LPC2368
  • Arduino
    • Arduino Train
    • Arduino Projects
  • Raspberry
  • FPGA
  • PCB
    • آلتیوم
      • آموزش آلتیوم
      • پروژه آلتیوم
  • S.W
    • Codevision
    • Proteus
    • Serial Port
    • Android
    • Labview
  • Analog
  • etc
    • Components
    • Android
    • C/C++/Qt
    • OpenCV
    • QuadCopter
    • PC And Micro
    • Communication Protocols
دلیل پیشرفت سریع آلمان و ژاپن
آموزش الکترونیک ۱ آموزش سینماتیک روبات ها آموزش آردوینو در Proteus
آموزش الکترونیک ۲ آموزش رباتیک و ربات های سری آموزش Proteus - تحلیل مدار
آموزش مبانی الکترونیک آموزش میکروکنترلر STM32F1xx آموزش آردوینو - کنترل با شبکه
برنامه نویسی Raspberry Pi آموزش AVR و Codevision - مقدماتی آموزش برنامه نویسی آردوینو با متلب
کاربرد Raspberry Pi در صنعت آموزش AVR و Codevision - تکمیلی آموزش برنامه نویسی آردوینو - رباتیک
● تبلیغات دیجیتال هوشمند● آموزش های رایگان● استخدام در فرادرس
شما اینجائید:خانه » الکترونیک » آموزش AVR » آموزش جامع AVR » آموزش جامع میکروکنترلر AVR جلسه۳

آموزش جامع میکروکنترلر AVR جلسه۳

ارسال شده توسط:مهدی دمیرچیلو تاریخ ارسال: 2014/06/22 در آموزش جامع AVR 77 نظر

به نام خدا : آموزش جامع میکروکنترلر AVR جلسه۳ – انشا الله قراره تو این جلسه در مورد وقفه یه سری توضیح بدم  + یه پروژه هم در ته همین مطلب گزاشتم با وقفه نوشته شده است.

آموزش جامع میکروکنترلر AVR جلسه3

آموزش جامع میکروکنترلر AVR جلسه۳


انشا الله قراره تو این جلسه در مورد وقفه یه سری توضیح بدم  + یه پروژه هم در ته همین مطلب گزاشتم با وقفه نوشته شده است.

وقفه در AVR

توجه مهم : وقفه به معنی تاخیر زمانی نیست!
بزارید با یه مثال توضیح بدم ، مثال : ما میخایم یه LED  رو با یه کلید روشن و خاموش کنیم ؟ دو تا راه داریم :
۱) روش سرکشی (Polling)
ما تو تابع MAIN میایم و میگیم هر موقع که ما کلید رو زدیم فلان پایه ی میکرو فعال شد (یا همون ۱منطقی شد) ، اون وقت جنابعالی (منظور میکروکنترلر هستش) هم فلان پایه میکرو رو فعال کن تا LED روشن بشه. حالا مشکل زمانی هستش که ما هنوز کلید رو نزدیم و جناب میکروکنترلر مجبوره که هی بره و ببینه که آیا فلان پایه فعال شده یا نه و هی میره و هی برمیگرده (بیچاره خسته نمیشه این همه راه رو میره !!! ) البته تا حالا من خودم از همین روش استفاده کردم !!! و از روش زیر استفاده نکردم.(آخه چه کاریه گره ای که با دندون باز میشه چرا با دست بازش کنی !!!)
۲) روش وقفه ( Interrupt )
تو این روش برخلاف روش قبلی به جای این که ما هی بریم و برگردیم تا بفهمیم که آیا فلان پایه فعال شده یا نه میاییم یه کاری میکنیم : یه موبایل برا دو طرف میخریم و هر موقع که اون پایه هه فعال شد زنگ میزنه به میکرو و میگه دادا بدو بیا که فعال شدم !!! لپ کلوم ای که تو این روش اگه پایه فعال شد خودش ما رو خبر میکنه و دیگه لازم نیس که هی بریم و هی برگردیم و بررسی کنیم که ۱ شده یا نه … حالا چطور میاد ما رو خبر میکنه رو در ادامه مطلب میگم …

انواع وقفه

۱) وقفه داخلی :  تقریبا تمام امکانات داخلی میکرو دارای وقفه بوده مانند تایمر – کانترها و پروتکل های ارتباطی و مقایسه کننده ها و مبدل آنالوگ به دیجیتال. ( این مورد زیاد کاری نداریم فعلا، مورد بعدی هستش که میخوام تو این مطلب آموزش بدم.)
۲) وقفه خارجی : در میکرو پایه هایی به نام INTx وجود دارد که زمانی تحریک شوند ، میکرو به زیر برنامه وقفه پرش می کند و کار تعیین شده را انجام می دهد.این وقفه ها می توانند با یک لبه بالا رونده یا پایین رونده و یا یک منطقی تحریک شوند.
نکته : هنگامی که یک پایه به عنوان وقفه استفاده شود دیگر نمی توانیم از آن پایه به عنوان ورودی یا خروجی استفاده کنیم. این یه میکرو کنترلر avr از نوع atmega16 هستش که توش پایه های وقفه صفر-وقفه۱ و وقفه ۲ رو مشخص کردم.

آموزش جامع avr

توضیح رجیسترهای وقفه

۱) ریجستر SREG

ریجستر SREG

بیت ۷ ( I ) :  با یک کردن این بیت ، وقفه سراسری یا کلی فعال میشود.(یعنی میتونیم از وقفه استفاده کنیم.)

توجه مهم : اگه بخواید از وقفه استفاده کنید این بیت حتما باید یک بشه.که این بیت به صورت زیر فعال/غیر فعال میشود.

1
2
#asm("sei")      //فعال کردن وقفه سراسری
#asm("cli")     //غیر فعال کردن وقفه سراسری

۲) ریجستر GICR

ریجستر GICR

 تو این ریجستر ما فقط با ۳ بیت آخرش کار داریم.

بیت ۷ (INT1 )  : با یک کردن این بیت و استفاده از دستور (“asm(“sei#وقفه۱فعال میشود.  متناظر با پایه PORTD.3 میباشد.(اون عکس  میکروکنترلر avr که در بالا هستش رو نگاه کنید)

بیت ۶ (INT0 )  : با یک کردن این بیت و استفاده از دستور (“asm(“sei# وقفه ۰ فعال میشود. متناظر با پایه PORTD.2 میباشد.(اون عکس  میکروکنترلر avr  که در بالا هستش رو نگاه کنید)
بیت ۵ (INT2 )  : با یک کردن این بیت و استفاده از دستور (“asm(“sei# وقفه ۲  فعال میشود. متناظر با پایه PORTB.2 میباشد.(اون عکس  میکروکنترلر avr  که در بالا هستش رو نگاه کنید)

۳) ریجستر GIFR

ریجستر GIFR
پرچم وقفه های خارجی ۰و۱و۲ !!!

سوال۱ :پرچم چیه؟
جواب۱ : تو بعضی ریجسترها ممکنه یک یا چند بیت وجود داشته باشه که بهش میگن پرچم.

سوال۲ : حالا این پرچم ها کارشون چیه؟
جواب۲ : همون طور که میدونید یه بیت دو حالت میتونه داشته باشه، یا ۰ هستش و یا ۱، حالا این یه بیت(که بهش میگن پرچم) مثلا تو همین بحث وقفه خارجی، و همین ریجستر GIFR که ۳بیت آخرش پرچم هستش، برا هر وقفه خارجی یه پرچم داریم، حالا من پرچم مربوط به وقفه ۰(که میشه بیت ۶ام) رو توضیح میدم : اگه وقفه خارجی۰ رخ بده این بیت(یا این پرچم) مقدارش ۱میشه، مثلا در مواقعی که نخوایم از تابع وقفه استفاده کنیم، میتونیم از این پرچم در برنامه مون در تابع main برا تشخیص رخ دادن و یا عدم رخ دادن وقفه ازش استفاده کنیم.

در صورت فعال کردن بیت های ریجستر GICR، پرچم های متناظر با اون وقفه در این ریچستر به صورت خودکار مقدارشون پاک میشه، ولی اگه اون بیت های ریجستر GICR رو فعال نکرده باشید، باید خودتون با دادن مقدار ۱ به پرچم مربوطه در این ریجستر، مقدارشون رو پاک کنید!(پرچم ها با دادن ۱ بهشون مقدارشون پاک میشه!!!)

۴) ریجستر MCUCR

ریجستر MCUCR
این ریجستر هم ریجستر مهمی هستش O_o
ما با نحوه مقدار دهی این ریجستر (که در ادامه میگم) میتونیم نحوه فعال و غیر فعال شدن (نحوه تحریک شدن) وقفه رو تعیین کنیم.

توجه مهم : این ریجستر برا دو وقفه صفر و یک هستش و ریجستر بعدی برای وقفه دو هستش.
(اگه تو کد ویژن تو قسمت کد ویزاردش و تو قسمت! تعیین وقفه ها و تو قسمت MODE رو نگاه کرده باشید، وقفه صفر و یک ۴ تا حالت داره  اما وقفه ۲ ، فقط دو حالت داره.)
نحوه مقدار دهی ریجستر MCUCR
جدول زیر که انواع  مقدار دهی بیت های ISC01   و  ISC00   رو نشون داده که مربوط به وقفه صفر هستش.
۱) ۰=ISC01   و  ۰=ISC00  : سطح منطقی۰ (۰ولت) باعث رخ دادن وقفه۰ میشه.
۲) ۰=ISC01   و  ۱=ISC00  : هر نوع تغییری باعث رخ ددن وقفه۰ میشه.
۳) ۱=ISC01   و  ۰=ISC00  : اگه از حالت ۱منطقی(۵ولت) به ۰منطقی(۰ولت) بریم وقفه۰ رخ میده.
۴) ۱=ISC01   و  ۱=ISC00  : اگه از حالت ۰منطقی(۰ولت) به ۱منطقی(۵ولت) بریم وقفه۰ رخ میده.
isc00-01
 جدول زیر هم مربوط به وقفه یک هستش.
که دیگه من توضیح نمیدم ، چون مثل حالت بالا هستش.
ریجستر MCUCR

۵) ریجستر MCUCSR

ریجستر MCUCSR

با توجه به توضیحاتی که در بالا دادم ، نحوه تحریک این وقفه که وقفه ۲ هست بر خلاف وقفه ۱ و ۰ که ۴ تا حالت داشت ولی وقفه ۲ فقط دو حالت دارد لذا دیگر از جدول مدول خبری نیست.

۱) ۰=ISC2  : اگه از حالت ۱منطقی(۵ولت) به ۰منطقی(۰ولت) بریم وقفه۲ رخ میده.
۲) ۱=ISC2  : اگه از حالت ۰منطقی(۰ولت) به ۱منطقی(۵ولت) بریم وقفه۲ رخ میده.

فعال کردن وقفه در کدویژن

تو کد ویژن وقتی یه پروژه جدید ایجاد میکنی و میری تو قسمت کد ویزارد ، میتونی وقفه رو از همون جا فعال کنی و دیگه کد مد ننویسی.

با توجه به عکس زیر وقفه ها رو میبینید (وقفه ۰ ،  وقفه ۱   ،   وقفه۲)  که با تیک زدنشون فعال میشن.
تو قسمت mode 4 تا حالت داریم که در بالا توضیح دادمش.
فعال کردن وقفه در کدویژن
این کدی که در زیر میبینید من با کد ویزارد ایجاد کردم.
سه تا وقفه رو فعال کردم و حالت MODE هر سه رو گزاشتم رو گزینه آخر و بعد …
توجه : البته کدهایی که برنامه تولید کرد خیلی بیشتر از این بود که من کد های اضافه و غیر مربوط به این موضوع (وقفه) رو حذف کردم تا مرتب تر بشه.
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <mega16.h>
interrupt [EXT_INT0] void ext_int0_isr(void){ }
interrupt [EXT_INT1] void ext_int1_isr(void){ }
interrupt [EXT_INT2] void ext_int2_isr(void){ }
void main(void)
{
    GICR|=0xE0;
    MCUCR=0x0F;
    MCUCSR=0x40;
    GIFR=0xE0;
    #asm("sei")
    while (1){ };
}

 

 

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

یه توضیحی در مورد کد نویسی وقفه بدم و اون این که به صورت زیر نوشته میشه
همون طور که اگه کد های قسمت “فعال کردن وقفه در کدویژن” رو دیده باشین ، یه تابع برا وقفه نوشته شده که بعد از تعریف کتاب خانه اومده و …
حالت کلی این تابع به صورت زیر هستش:
1
2
3
4
interrupt [EXT_INT0] نام تابع(void)
{
     محل قرار گیری کد های شما
}
کد EXT_INT0 یعنی این تابع مربوط به وقفه صفر هستش. ( EXT_INT1 یعنی   وقفه ۱—–EXT_INT2  هم یعنی  وقفه ۲ )
البته به جای EXT_INT0  میتونستیم عدد ۲ رو قرار بدیم .
و به جای EXT_INT1  میتونستیم عدد ۳ رو قرار بدیم .
و به جای EXT_INT2  میتونستیم عدد ۱۹ رو قرار بدیم .

دلیلش رو هم فعلا حسش نیست که بگم. blush
نام تابع هم اختیاری هستش.هر چی خواستین بزارین.  smile

پروژه های وقفه avr

 

پروژه avr یک

این هم یه  پروژه ساده هستش که اگه رو کلید کلیک کنی LED روشن و دوباره اگه کلیک کنی خاموش میشه و ….
که با وقفه صفر  نوشته شده است.

فایلش رو در زیر گزاشتم…..

پروژه avr دو

نمایش متن با وقفه ۰ و ۲ با منبع سینوسی

پروژه avr سه

مدار پروژه

مدار پروژه

کدهای پروژه
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <mega16.h>
#include <stdlib.h>
#include <delay.h>
#asm
   .equ __lcd_port=0x1B ;PORTA
#endasm
#include <lcd.h>
interrupt [EXT_INT0] void ext_int0_isr(void)
{
PORTB.0=!PORTB.0;
}
void main(void)
{
    int i=0;
    char str[10];
    DDRB=0XFF;;
    // External Interrupt(s) initialization
    // INT0: On
    // INT0 Mode: Rising Edge
    // INT1: Off
    // INT2: Off
    GICR|=0x40;
    MCUCR=0x03;
    MCUCSR=0x00;
    GIFR=0x40;
    #asm("sei")// Global enable interrupts
    lcd_init(16);
    while (1)
    {
        for(i=0;i<=999;i++)
        {
            itoa(i,str);
            lcd_gotoxy(0,0);lcd_puts(str);lcd_puts("   ");
            delay_ms(100);
        }
    };
}
تنظیمات کد ویزارد
 پروژه avr

دانلود پروژه AVR سه

  دانلود پروژه AVR یک
خداایش دیدید وقفه های خارجی چقدر ساده هستن، همش ۳-۴ تا ریسجتر بیشتر نبودن. laugh
تا اونجایی که حسش بود توضیح دادم و سعی کردم جامع و ساده باشه.
امیدوارد از این  آموزش AVR خوشتون اومده باشه.
هزینه مطلب : یاد دادن چیزایی که بلدید.
سوالی بود در خدمتیم اگه هم نبود یا علی.




بروزرسانی در “چهارشنبه – ۴ اسفند ۱۳۹۵”

کتابخانه راه اندازی وقفه خارجی میکرو کنترلر avr

توجه ۰ : این کنابخونه برا میکروکنترلر های مگا ۱۶ و ۳۲ هستش و هر میکرویی که رجیسترهای وقفه خارجیش مثل مگا ۱۶ و ۳۲ هستش.
این کتابخونه دارای توابع زیر هستش :

1
2
3
4
5
6
7
8
void Interrupt0Init( unsigned char InterruptSense )
void Interrupt1Init( unsigned char InterruptSense );
void Interrupt0Enable();
void Interrupt0Disable();
void Interrupt1Enable();
void Interrupt1Disable();
void Interrupt0ClearFlag();
void Interrupt1ClearFlag();

برا تعیین نوع تحریک شدن وقفه های خارجی میتونید از یکی از ثوابت زیر استفاده کنید :

1
2
3
4
5
// InterruptSense
#define LOW         0
#define anyChange   1
#define FALLING     2
#define RISING      3

در تابع زیر روال وقفه ( همون تابع وقفه که در بالا آموزشش رو دادم ) برا تعیین این که این زیر روال برا کدوم وقفه خارجی هستش از یکی از دو ثابت زیر میتونیم استفاده کنیم :

1
2
#define EXT_INT0_vec ۲
#define EXT_INT1_vec ۳

 

دانلود کتابخانه راه اندازی وقفه خارجی میکرو کنترلر avr
گروه پرسش و پاسخ الکترونیکی سروش

درباره مهدی دمیرچیلو

جنگ ما فتح قدس را در پی خواهد داشت (امام خمینی) >>>>>> اگر از صدام بگذریم، اگر مسأله قدس را فراموش کنیم، اگر از جنایت های امریکا بگذریم از آل سعود نخواهیم گذشت. ان‌شاالله اندوه دلمان را را در وقت مناسب با انتقام از امریکا و ال سعود برطرف خواهیم کرد و داغ و حسرت حلاوت این جنایت بزرگ را بر دلشان خواهیم گذاشت و با برپایی جشن پیروزی حق بر جنود کفر و نفاق و آزادی کعبه از دست نااهلان و نامحرمان به مسجد الحرام وارد خواهیم شد (امام خمینی)

مطالب مرتبط

  • » آموزش avr جلسه 25 avr bootloader tutorial

  • » آموزش جامع AVR جلسه 24 Timer Counter FAST PWM Mode3

  • » آموزش جامع avr جلسه 23 پروگرام کردن avr

  • » آموزش جامع AVR جلسه ۲۲ Analog Comparator

  • » آموزش جامع AVR جلسه ۲۱ Introduction to Watchdog Timers

  • » آموزش جامع AVR جلسه ۲۰ Timer Counter Tutorial

  • » آموزش جامع AVR جلسه ۱۵ Timer Counter FAST PWM Mode2

  • » آموزش جامع AVR جلسه ۱۷ آموزش Counter

  • » نرم افزار کمکی تولید فرکانس AVR

  • » آموزش جامع AVR جلسه ۱۹ Timer Counter CTC Mode2

77 نظر

  1. sajad
    2014/11/22 در 17:50

    سلام…
    من يه پروژه دارم که بايد تو زمان مشخصي تعداد دفعات عبور از جلوي سنسور ir را بشمارم و بعد از هر بار سرريزشدن تايمر اون تعداد دفعات رو با يه مقدار مبنايي مقايسه کنم ….
    حالا اومدم يه وقفه خارجي براي سنسور ir (حساس به لبه بالارونده) تعريف کردم تا با هر بار رد شدن از جلوي اون تعداد شمارشم يه دونه زياد کردم بعد تو تايمر 0 با يه کلاک داخلي و prescale مشخص تايمر بعد از مثلا 3 ثانيه سرريز مي کنه و به تابع وقفه تايمر ميره…
    حالا سوال من اينه که مثلا وقتي سنسور ir تحريک شد و وقفه خارجي فعال شد آيا تايمر به کار خودش ادامه ميده و شمارش از 0 تا 255 ادامه ميده يا واي ميسه؟؟
    خيلي ممنون ميشم :nerd: :nerd: کمکم کنيد.. :biggrin:
    ويرايش

    پاسخ
    • مهدی دمرچیلو
      2014/11/22 در 19:49

      دقیق متوجه نشدم
      …………………………..
      مثلا از وقفه خارجی ۰ استفاده میکنیم(برای سنسور ir)……..حالا میخوایم بعد از این که “تعداد شمارشم یه دونه زیاد کردم ”
      ( ++number ) توسط تایمر ۰ مدت زمان ۳ ثانیه رو بشمریم و بعد…(یه کاری انجام بشه)
      …………………………..
      اولا برا تولید ۳ ثانیه چندین بار سرریز رخ میدهد و وقفه اجرا میشه(کلاک رو هم هر چند که بزاری درجا نمیتونی ۳ ثانیه تولید کنی…) و باید یه چند باری سر ریز رخ بده و تو یه متغییر رو زیاد کنی تا به ۳ ثانیه برسی…
      …………………………..
      وقتی وقفه خارجی ۰ رخ میده میای توش میگی تایمر شروع به کار کنه و ….(که در این حین وقفه تایمر چندیدن بار رخ میده…در حالی که هنوز داخل وقفه ۰ هستیم….)
      …………………………..
      .
      .
      .
      .
      .
      .
      لذا تایمر به کارش ادامه میده….برا چی باید وایسه…
      .
      .
      …
      .
      .
      .
      .
      در کل سعی کن اینا رو تو پروتئوس تست کنی….این طور سریع تر به جواب میرسی….

      پاسخ
  2. sajad
    2014/11/24 در 19:10

    خيلي ممنون ….
    مثلا من اومدم فرکانس داخلي avr رو 10.8khz در نظر گرفتم با prescale مثلا 128 اونوقت F=10.8/128=0.084 T(timer)=11.85ms و t(ovf0)=256*11.85=3034 ms يعني تايمرم تو 3 ثانيه سرريز ميکنه!!! درسته؟؟؟؟
    ………………………………..
    براي شبيه سازي پروتئوس چون من تازه avr رو شروع کردم مثلا تو اين نرم افزار سنسور ir همون irlink؟؟؟؟
    من مدار رو تا یه جاهایی طراحی کردم ولی اون سنسور که میخواد از عبور مثلا یه پره ی فن با خبر بشه رو نفمیدم چیکار کنم عکس مدار رو براتون فرستادم

    پاسخ
    • مهدی دمرچیلو
      2014/11/24 در 22:31

      ۱) عکسی برام نفرستادی
      ۲)برا دریافت سوالت هم عکس زیر رو ببین

      آموزش جامع میکروکنترلر AVR جلسه9

      پاسخ
  3. sajad
    2014/11/25 در 01:06

    چجوری آپلود کنم…؟؟؟؟

    پاسخ
  4. مهدی دمرچیلو
    2014/11/25 در 01:31

    سنسور ir همون irlink؟؟؟؟
    چواب : بعید میدونم….این بیشتر شبیه اپتوکوپلر هستش تا ir
    —————————-
    در ضمن سنسور ir تو پروتئوس شبیه سازی نمیشه……و باید حتما در عمل ببندیش تا نشیجه پروژت رو ببینی

    پاسخ
  5. hgh
    2014/12/07 در 22:07

    سلام مطالبتون خیلی مفید و بدرد بخوره 😉
    توی ی سوالی گیر کردم ممنون میشم از راهنماییتون بهره مند بشم.
    من میخوام با کمک سه وقفه atmega16 ی برنامه اسمبلی بنویسم که 64 درو کنترل کنه به این ترتیب که اگه هر دری باز بود led مطابق با شماره دری که بازه روشن بشه.فرض میکنیم یه اتاق نگهبانی هست که 64 led داره و با باز بودن هر دری led مطابق با شماره دره روشن بشه.
    ممنون میشم راهنماییم کنین

    پاسخ
    • مهدی دمرچیلو
      2014/12/08 در 23:02

      سلام
      من با اسمبلی کار نمیکنم

      پاسخ
  6. مهدی
    2015/01/04 در 23:11

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

    پاسخ
  7. نوید
    2015/01/28 در 01:57

    تو پروژه سه با فشار کلید فقط قراره led روشن بشه؟
    یعنی تو عملکرد کانتر تاثیری نداره؟
    یه سوال دیگه هم درباره :
    #asm
    .equ __lcd_port=0x1B ;PORTA
    #endasm
    که اول برنامه اومده یعنی چی؟
    سوال دیگه هم درباره :
    #include
    این کارش چیه؟
    با تشکر

    پاسخ
    • مهدی دمرچیلو
      2015/01/28 در 07:30

      سوال دومت : تعیین این که LCD به کدوم پورت وصل هستش.
      سوال سومت : فراخوانی کتابخوانه…..
      سوال اولت : کلا هدف از این پروژه اینه که خواستم بگم همزمان که میکرو تو یه حلقه WHILE بینهایت قرار داره و داره یه کاری انجام میده(نمایش عدد تو LCD) همزمان(و توسط وقفه) میتونه کارای دیگه ای رو هم انجام بده….OK????
      توصیه : به نظرم برو برنامه نویسیت رو قوی کن…..این طوری اذیت میشی هاااا good

      پاسخ
  8. سعید
    2015/01/30 در 15:27

    با تشکر از سایت بسیار خوب و مفید شما

    پاسخ
  9. سامان
    2015/02/06 در 01:42

    سلام. من این GIFR رو درک نمیکنم. ببینید تا اینجا درست میگم؟
    با GICR شماره وقفه رو انتخاب میکنیم. مثلا وقفه شماره 0
    بعدش با MCUCR نحوه فعال شدنش رو تعیین میکنیم.
    مشکل الان از اینجا به بعده
    مگه وقتی پایه INT0 تحریک بشه (لبه بالا رونده یا …..) Flag مربوط به اون وقفه (اینجا INTF0) یک(1) نمیشه؟؟ پس چرا گفتین باید مقدار بدیم خودمون؟؟ آخه توی کتاب دیدم مقدار داده.
    یه چیز دیگه! من اگه توی Flag (اینجا GIFR) عدد یک (1) نوشته شده باشه و دوباره توش 1 بنویسیم، پاک میشه؟؟
    اگه این موضوع درست باشه، اول که مقدار دهی کنیم 1 میشه، بعدش که پاشه INT0 تحریک شد دوباره 1 توش نوشته میشه که باعث پاک شدنش میشه که. اونوقت INTF0 اصلا 0 میشه که.

    پاسخ
    • مهدی دمرچیلو
      2015/02/06 در 08:07

      سلام
      کد پروژه ته مطلب رو ببین

      پاسخ
  10. سامان
    2015/02/06 در 01:51

    چقد من “که” میگم تو جمله هام shock

    پاسخ
  11. سامان
    2015/02/06 در 13:14

    کد پروژه ته مطلب رو دیدم. چرا مقدار دهی کردین؟ ;0x40
    الان با این مقدار دهی بیت INTF0=1 شده.
    درسته؟
    بعدش وقتی که کلید فشرده بشه Flag بازم 1 میشه دیگه. یعنی توی INTF0 که مقدار 1 از قبل بوده، مقدار 1 دوباره نوشته میشه. و چون Flag هست با این کار مقدارش 0 میشه. آیا این تحلیل درسته؟
    اینم بگم که من مدت کوتاهی هست که AVR میخونم. 4 5 روز.

    پاسخ
    • مهدی دمرچیلو
      2015/02/06 در 14:13

      GIFR=0x40;
      فعال کردن وقفه INT0 وغیر فعال کردن دوتای دیگه
      MCUCSR=0x00;
      اینم مربوط به وقفه ۲ هستش که ماکاری باهاش نداریم لذا ۰ اش کردم.
      MCUCR=0x03;
      نحوه فعال شدن وقفه رو تعیین کردیم…..rising adge…..لبه بالا رونده…همون ۵ ولت یا همون ۱ منطقی
      GICR|=0x40;
      با یک کردن این بیت وقفه INT0 ( وقفه ۰ ) فعال میشه. (متناظر با پایه PORTD.2 هستش.)
      بیش از این نمیدونم….تو eca.ir مطرح کن

      پاسخ
  12. سامان
    2015/02/06 در 13:30

    منظورم اینه که اگه مقدار دهی نکنیم خودمون، خب وقتی که پایه INT0 تحریک بشه Flag مربوطه (که INT0 باشه) خودش 1 میشه دیگه.

    پاسخ
  13. سامان
    2015/02/06 در 13:31

    منظورم اینه که اگه مقدار دهی نکنیم خودمون، خب وقتی که پایه INT0 تحریک بشه Flag مربوطه (که INTF0 باشه) خودش 1 میشه دیگه.

    پاسخ
  14. سعيد
    2015/03/20 در 11:14

    سلام ممنون از زحمات شما…لطفا” پسورد فايل رو هم بدبن

    پاسخ
    • مهدی دمرچیلو
      2015/03/20 در 11:38

      سلام-آدرس سایت-با حروف کوچیک
      http://www.dmf313.ir

      پاسخ
  15. بهزاد
    2015/05/28 در 12:55

    من میخوام وقتی که کلید رو فشار میدم به برنامه جدید بره و توی همون برنامه جدید بمونه تا دوباره کلید زده بشه . میشه راهنمایی کنید ؟؟؟
    برنامه اینطوری نوشته شده :
    $regfile “m8def.dat”
    $crystal = 8000000
    Config Portb = Output
    Config Portc = Output
    Config Int0 = Rising
    Enable Interrupts
    Enable Int0
    On Int0 Sub
    Dim A As Byte
    A = &B10000000
    Do
    Rotate A , Left
    Waitms 100
    Portb = A
    Loop
    Led:
    Set Portc.0
    Waitms 100
    Reset Portc.0
    Waitms 100
    Set Portc.0
    Waitms 100
    Reset Portc.0
    Waitms 100
    Set Portc.0
    Waitms 100
    Reset Portc.0
    Waitms 100
    Set Portc.0
    Waitms 100
    Reset Portc.0
    Waitms 100
    Set Portc.0
    Waitms 100
    Reset Portc.0
    Waitms 100
    Set Portc.0
    Waitms 100
    Reset Portc.0
    Waitms 100
    Return
    End

    پاسخ
    • مهدی دمرچیلو
      2015/06/02 در 00:05

      سلام
      بنده c کار میکنم و نه بسکام

      پاسخ
  16. علی
    2015/06/25 در 17:49

    سلام!
    یه توضیح ساده و قابل فهم میخوام که من مبتدی بفهمم!
    جمله زیر یعنی چی؟! dash
    برای راه اندازی CPU نیاز به یک منبع کلاک می باشدتا نوسان مورد نیاز میکرو را با فرکانس دقیق و بالا تامین کند!
    سوالات!
    1-کلاک کلا چیه و وظیفه اش چیه؟ باید برنامه نویسی بشه؟!
    2- “تا نوسان مورد نیاز میکرو را…” نوسان یعنی چی؟ چرا باید نوسان داشته باشه مگه میکرو نوسان نیاز داره! کلا یه توضبح کامل بده
    3- فرکانس یعنی چی؟ برای چی استفاده میشه؟ میکرو برای چی به فرکانس احتیاج داره ؟
    و
    4- پالس میکرو چیه؟
    منتظرم! smile

    پاسخ
    • علیرضا آهنی
      2017/05/21 در 16:08

      ۱٫هماهنگ سازی -نه
      ۲٫نوسان یعنی ۰Vو۵Vشدن.میکرو هم بخواد هماهنگ بشه به نوسان نیاز داره.
      ۳٫ تعداد سیکل ها ی کامل دریک ثانیه را فرکانس می گویند و واحد آن هرتز است.همچنین ۱۰۰۰ هرتز در یک ثانیه برابر ۱ کیلوهرتزاست ، واحدهایدیگری هم هستند ۱مگاهرتز=۱۰۰۰۰۰ هرتز و۱ گیگاهرتز=۱۰۰۰۰۰۰۰۰۰ هرتز
      ۴٫پلاس==یک سیکل نوسان.
      دراخر هم میگم تو گوگل سرج کن.مطلب ریخته.

      پاسخ
  17. ققنوس
    2015/07/02 در 08:47

    سلام
    با تشکر از آموزش خیلی خیلی جالبت
    من با این وقفه ها یه مدار درست کردم که :
    اگه int0 یک شد دو بار b.0 رو پشت سر هم یک کنه و b.1 رو قطع کنه
    اگه int1 یک شد یه بار همون پایه رو یک کنه و یه پایه رو وصل کنه
    حالا مشکلم اینه که وقتی میکرو روشن میشه دو بار b.0 یک میشه (انگار int0 فعال شده )و b.1 وصل میشه(انگار int1 فعال شده) و وصل میمونه تا int0 رو تحریک کنیم که خاموش بشه
    اینم برنامه:
    ***
    اینم پروتئوس:
    ***
    ممنون

    پاسخ
    • مهدی دمرچیلو
      2015/07/02 در 11:52

      سلام
      من c کار میکنم و بسکام کار نمیکنم. pardon
      میتونید به سایت wle.ir مراجعه کنید

      پاسخ
  18. محسن
    2015/08/01 در 10:44

    سلام
    آقا بسیار عالی بود مختصر و مفید

    پاسخ
  19. علی
    2015/08/05 در 22:53

    سلام…!
    خیلی ممنون بابت مطلب فقط من وقتی مدار رو توی واقعیت میبندم … وقتی کلید رو فشار میدم قشنگ کار نمیکنه
    یعنی مثلا توی وقفه زدم که پورت C1 رو برعکس کنه… یعنی اگه یکه، بکنش ۰ و اگه صفره، بکنش ۱٫٫٫!
    حالا که رو کلید فشار میدم گاهی وقتا روشن میشه و خاموش نمیشه یا کلا کار نمیکنه و….
    منظورم اینه که دقیق کار نمیکنه…!
    دلیلش چیه؟؟؟؟؟؟؟؟؟؟؟
    مقاومت داخلی هم فعال کردم ها good

    پاسخ
  20. شسشی
    2015/11/23 در 18:45

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

    پاسخ
  21. Alireza
    2016/01/01 در 02:56

    عاااااااااااااااااااااللییییییییی
    دمت گرم

    پاسخ
  22. محمد
    2016/01/05 در 21:46

    سلام ببخشید شما اطلاعاتی راجب ساخت pid با op_amp دارید یا حداقل سیمولینکش رو تو proteus؟؟؟

    پاسخ
    • مهدی دمرچیلو
      2016/01/05 در 23:40

      سلام
      نمیدونم چیه
      مربوط به درس دانشگاه هستش یا…؟

      پاسخ
      • محمد
        2016/01/06 در 20:49

        بله تو درس الکترونیک ۲ پروژه بهمون دادن که مدار pid ببندیم pid یه نوع کنترل کننده هست که ساختش با میکرو راحته اما با تقویت کننده عملیاتی سخته البته واسه من سخته!!! sad

        پاسخ
        • مهدی دمرچیلو
          2016/01/06 در 21:47

          والا اگه بتونی یه توضیح کوچولو دربارش بدی شاید بتونم کمکی کنم

          پاسخ
  23. Ramin
    2016/01/25 در 22:43

    سلام ممنون بابت اموزش، الان یعنی فقط رو همین سه پین میشه انجام داد پین هی دیگه نمیشه ؟؟

    پاسخ
    • مهدی دمرچیلو
      2016/01/25 در 22:55

      سلام
      عرضم به حظورتون که بله، ولی فک کنم بشه از ic ایی استفاده کرد که ان ^ ۲ تا پایه ورودی داشته باشه و n+1 تا خروجی که یکی از این پایه ها رو بدیم به یکی از پایه های وقفه خارجی میکرو و اون یکی ها رو بدیم به میکرو(یا بازم برای کاهش مصرف پایه بدیم به یه آی سی دیگه ای و… laugh ) و این طوری هر چقدر که بخوای میتونی وقفه خارجی درست کنی………….البته این یه ایده هستش.ولی به نظرم عملیاتی هستش
      در ضمن یه میکرو هایی رو من شنیدم قبلا که تموم پایه هاش میتونست به عنوان وقفه خارجی عمل کنه.

      پاسخ
  24. نوید
    2016/04/11 در 14:20

    سلام ممنون از پروژه ها و آموزش هاتون
    یه موردی رو خواستم بگم چون تو نظرات که خوندم بعضی ها مشکل داشتن
    شما توی تابع وقفه آوردی :
    while(PORTD.2==1);
    در حالی که درستش اینه :
    while(PIND.2==1);
    و به همین دلیله که قبل از برداشتن انگشت از کلید وضعیت لامپ برعکس میشه
    گفتم اگه حسش هست عوضش کنی که پس فردا کسی هنگ نکنه
    و در کل ممنون
    smile

    پاسخ
    • مهدی دمرچیلو
      2016/04/11 در 14:44

      سلام
      ممنون از شما
      این کدی که میگید اشتباه هستش برای کجا مطلب هستش؟ من گشتم ولی پیدا نکردم

      پاسخ
  25. امیر
    2016/05/05 در 16:28

    سلام. مهندس این برنامه رو ببین. میخوام اینتراپت صف و یک رو اضافه کنم و زمانی که اینتراپت صفر رو فشار دادم یه رقم به عدد نشون داده شده روی ال سی دی اضافه و با فشردن اینتراپت یک عدد کم بشه.دستور اینتراپت رو اگه اضافه کنی ممنون میشم.اینتراپت صف و یک .مممنون
    #include
    #include
    #include
    #include
    #define c1 PINC.4 // ????? ??1
    #define c2 PINC.5
    #define c3 PINC.6
    #define c4 PINC.7
    #asm
    .equ __lcd_port=0x1B ;PORTA
    #endasm
    unsigned char scan[4]={0XFE,0XFD,0XFB,0XF7};
    unsigned char arrkey[16]={
    9,10,11,12,
    5,6,7,8,
    1,2,3,4,
    13,0,14,15};
    char key;
    unsigned char keypad(){
    unsigned char r,b;
    while(1){
    for (r=0; r<4; r++){
    b=4;
    PORTC=scan[r];
    if(c1==0) b=0;
    if(c2==0) b=1;
    if(c3==0) b=2;
    if(c4==0) b=3;
    if (!(b==4)){
    key=arrkey[(r*4)+b];
    while(c1==0);
    while(c2==0);
    while(c3==0);
    while(c4==0);
    delay_ms(50);
    return key;
    }
    }
    }
    }
    void main(void){
    char buffer[16];
    lcd_init(16);
    DDRC=0X0F;
    PORTC=0XFF; 1
    lcd_clear();
    lcd_putsf("amir ");
    delay_ms(50);
    while(1){
    key=keypad();
    lcd_clear();
    sprintf(buffer,"Key %d",key);
    lcd_puts(buffer);
    delay_ms(100);
    }
    }

    پاسخ
    • مهدی دمرچیلو
      2016/05/05 در 16:56

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

      پاسخ
  26. امیر
    2016/05/05 در 17:20

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

    پاسخ
    • مهدی دمرچیلو
      2016/05/05 در 18:52

      خب داش گفتم که – اون مطلب وقفه که تو سایت گزاشتم رو بخونی متوجه میشی – بخون بعد اگه مشکلی بود در خدمتیم.

      پاسخ
  27. امیر
    2016/05/07 در 10:14

    مهندس چنتا سوال ریییز
    1: برای کم و زیاد شدن عدد با اینتراپت این دستور درسته؟
    interrupt [EXT_INT0] void ext_int0_isr(void)
    {
    key=keypad();
    key++;
    lcd_clear();
    sprintf(buffer,”number %d”,key);
    lcd_puts(buffer);
    delay_ms(100);
    2: دستور تو حلقه while نوشته میشه یا حلقه اصلی؟

    پاسخ
    • مهدی دمرچیلو
      2016/05/07 در 10:45

      خب داش این که تو وقفه میخوای چی کار کنی به خودت مربوطه هستش
      ولی این که وقفه درسته یا نه – باید ریجستر های وقفه پروژت رو بهم نشون بدی

      پاسخ
  28. امیر
    2016/05/07 در 20:02

    سلام
    …
    ممنون میشم راهنمایی کنی. با تشکر

    پاسخ
    • مهدی دمرچیلو
      2016/05/07 در 21:12

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

      پاسخ
  29. امیر
    2016/05/08 در 13:08

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

    پاسخ
  30. mahan
    2016/07/29 در 09:25

    سلام امکانش هست ایمیلتون رو داشته باشم که کدمو براتون بفرستم ؟ اشتباه عمل میکنه و هیچ نظری ندارم چرا

    پاسخ
    • مهدی دمرچیلو
      2016/07/29 در 09:45

      سلام
      mahdedamarchilu09372431686@yahoo.com
      فقط کدهات رو ترتمیز کن و توضیحات و چیزای اضافه رو حذف کن یه کد ترتمیز مرتب به من بده(غیر این باشه نگاه نمیکنم – چون حوصله تمیز کردنش رو ندارم)
      مشکلت چیه حالا؟

      پاسخ
  31. Mousa
    2016/08/31 در 16:33

    سلام و خسته نباشید ,مهندس توضیحاتی میدم اگه بتونید برنامش رو بنویسید برام ممنون میشم , دو تا ورودی که پالس دلخواه بهشون میدیم و دوتا خروجی از atmega8 استفاده میکنم, میخوایم با دادن یک پالس به ورودی اول یکی از خروجی ها فعال بشه و با دادن پالس بعدی خروجی ها غیر فعال بشن ( مثل دکمه روشن و خاموش مدار) ,و با دادن یک پالس در حالت فعال بودن خروجی به ورودی دوم ,جای خروجی ها عوض بشه ( یعنی اگه خروجی اول فعال باشه ,غیر فعال بشه و خروجی دوم فعال بشه) ,با هر بار دادن پالس به ورودی دوم این تغییر فعال بودن خروجی ها انجام بشه و هنگام تغییر به مدت 3ثانیه تاخیر داشته باشه , با تشکر ??

    پاسخ
    • مهدی دمرچیلو
      2016/09/01 در 19:40

      سلام
      متاسفانه پروژه انجام نمیشه.

      پاسخ
  32. محمد
    2016/09/01 در 12:51

    سلام . ممنون از آموزش های درجه یکتون . من یه مشکل دارم اونم اینه که میخوام وقفه شماره یک رو غیر فعال کنم و وقتی خواستمش فعالش کنم .(میکرو atmega8 )
    برای فعال کردنش رجیستر ها رو به شکل زیر مقدار میدم و مشکلی نداره.
    GICR|=(1<<INT1);
    MCUCR=(1<<ISC11) | (0<<ISC10);
    GIFR=(1<<INTF1);

    برای غیر فعال کردنش مقادیر بالا رو صفر میکنم ولی وقفه خاموش نمیشه !!!!!!
    وقفه سراسری رو هم نمیتونم خاموش کنم ، لازمش دارم .
    اگه راهنمایی کنید ممنون میشم .

    پاسخ
    • مهدی دمرچیلو
      2016/09/01 در 19:47

      سلام- مطلب زیر ر وبخون – یه نکته ریزی هستش که اونو در نظر نمیگیری در عیر فعال کردن.
      http://dmf313.ir/%D8%AA%D8%BA%DB%8C%DB%8C%D8%B1-%D9%88-%DB%8C%D8%A7-%D8%AE%D9%88%D9%86%D8%AF%D9%86-%DB%8C%D9%87-%D8%A8%DB%8C%D8%AA-%D8%A7%D8%B2-%DB%8C%DA%A9-%D9%85%D8%AA%D8%BA%DB%8C%D8%B1/

      پاسخ
      • maryam
        2018/08/29 در 19:47

        مرسیییییییییییییی good

        پاسخ
  33. حسین
    2016/10/09 در 23:13

    سلام!
    چطور میتونم بدون تابع interrupt و به کمک فلگ GIFR به طور مثال یک بیت را تغییر وضعیت بدم؟
    خودم از کد های زیر استفاده کردم ولی نتیجه مطلوبی نداد

    while(GIFR==0x40);
    PORTC.0=~PORTC.0;
    while(GIFR&0XBF);
    PORTC.0=~PORTC.0;
    while(GIFR&0xFF);
    PORTC.0=~PORTC.0;

    پاسخ
    • مهدی دمرچیلو
      2016/10/10 در 00:14

      سلام!!!
      تو آپارات یه سری فیلم آموزش وقفه Avr گزاشتم – بببین بدردت میخوره یا نه – در ضمن بشین ریجستر ها رو بخون – چون من چیزی خاطرم نیست – باید برم ریسجتر ها رو بخونم که حسش نیست

      پاسخ
  34. صبا
    2016/11/27 در 15:38

    سلام من یه برنامه میخوام که ترکیب keypad و LCDگرافیکی باشه .
    در صورت فعال شدن وقفه خارجی صفر با لبه ی پایین رونده یک عدد دو رقمی رو از صفحه کلید بخونه و بعد در حلقه while(1) عددو روی ال سی دی گرافیکی چاپ کنه!

    پاسخ
  35. علیرضا
    2016/11/30 در 21:42

    واقعا سایتتون بین همه سایتایی که تاحالا دیدم جامع تر درک مطالبش راحتتر و خلاصه دست شما دردر نکنه کارتون عالیه

    پاسخ
  36. داریوش
    2016/12/13 در 17:56

    سلام ببخشید میشه جواب این سوالو بهم بگید؟
    1-فرض کنید میکرویی در اختیار دارید که شامل یک پایه وقفه خارجی است،آیا راهی وجود دارد که به کمک همین یک پایه به تعداد بیش از یک وسیله به کمک وقفه سرویس دهی شود؟در موانعی که ممکن است روش شما درست کار نکند توضیح دهید.

    پاسخ
    • مهدی دمرچیلو
      2016/12/13 در 19:44

      سلام
      در مورد دستگاه ها یکم توضیح بدید که چی هستن و محدودیت ها چیا هستن بهتر میتونم بررسی کنم

      پاسخ
  37. Leila
    2017/01/30 در 20:59

    سلام ببخشید میشه درباره ترتیب تقدم INT0وINT1وINT2توضیح بدین؟

    پاسخ
  38. ghorbanianfereshteh68@gmail.com
    2017/02/22 در 13:42

    سلام رمز فایل ها چیه

    پاسخ
    • مهدی دمرچیلو
      2017/02/22 در 14:16

      سلام
      www.dmf313.ir

      پاسخ
  39. مرتضی شهابی زاده
    2017/05/11 در 14:15

    سلام میشه یه راهنمایی کنی این اعداد ار کجا میان؟
    البته به جای EXT_INT0 میتونستیم عدد ۲ رو قرار بدیم .
    و به جای EXT_INT1 میتونستیم عدد ۳ رو قرار بدیم .
    و به جای EXT_INT2 میتونستیم عدد ۱۹ رو قرار بدیم .
    چرا ریجستری GCIR رو در برنامه نمیان مقدار بدید و or میزاریذ اما ریجستر های دیگه رو or نمی زارین؟
    GICR|=
    MCUCR=
    MCUCSR=
    GIFR=
    ممنون میشم کمکم کنید

    پاسخ
    • مهدی دمرچیلو
      2017/05/11 در 21:19

      سلام
      این اعداد از دیتاشیت میان
      در مورد اون or هم باید بگم که چون تو هر رجیستر تقریبا یه چند تا بیت هستن که تو این واحد وقفه به کار نمیان – لذا اگه قبلا از اون استفاده کردیم باید | کنیم ولی اینجا لازم نیست و اون | ها اضافه هستن

      پاسخ
  40. علیرضا اهنی
    2017/07/18 در 08:11

    ایا کد زیر اشکالی دارد که کدویژن از ان اشکال میگیرد؟
    http://paste.debian.net/977006/
    متن خطا
    Error: C:\Users\\Desktop\New folder (3)\0.c(4): ‘(‘ expected

    پاسخ
    • مهدی دمرچیلو
      2017/07/18 در 09:17

      این غلطه – تا زمانی که ( وایل ) بعد اومدی گفتی اگر پایه ۰ بود ۰ نیازی به IF نیست –
      while if(PIND.2==0);
      سوتی دیگه ای ندیدم.
      به صورت زیر بنویس
      while (PIND.2==0);

      پاسخ
      • علیرضا اهنی
        2017/07/18 در 10:13

        سلام.
        خیلی ممنون.
        پس این جوری شد
        http://paste.debian.net/977010/
        فقط تو عمل برای لرزش دست چی کار کنم.

        پاسخ
        • مهدی دمرچیلو
          2017/07/18 در 10:29

          مقاومت پول آپ میکنی – قسمت های فلزی مربوطه رو ایزوله میکنه تا دست بهش نخوره – درباره نویز هم یکم مطالعه کن شاید نیا باشه یه خازن مازن بزنی تنگ دکمه متصل به وقفه خارجی

          پاسخ
  41. علی
    2017/08/18 در 16:13

    سلام دوست عزیز. این کد هایی که نوشتین فقط مال کدویژنه.
    یا همه رو میشه واسه اتمل استودیو هم نوشت؟ mail

    پاسخ
    • مهدی دمرچیلو
      2017/08/18 در 18:48

      سلام-کدویژنه کدی اگه تو سایت گزاشتم ولی تبدیلش کاری نداره – زیاد فرقی ندارن
      ولی خب بحث آموزش رجیسترها ربطی به کامپایلر نداره

      پاسخ
  42. حسن
    2017/10/04 در 20:40

    سلام و درود برشما
    چرا برای مقدار دهی بعضی از ثبات ها مثلام همین GICR‌ مقدار قبلی رو با یه عدد دیگه or میکنن؟؟؟ من یه بار خودمم امتحان کردم اگه این کارو نمیکردی جواب نمیداد .اصلا رجیسترها رو بار اول بود مقدار میدادم ولی مجبور شدم or کنم تا کار بکنه.دلیلش چی میتونه باشه؟ wacko

    پاسخ
  43. Ali
    2018/05/19 در 08:11

    سلام آیا فعال سازی وقفه در سرعت اجرای دستورات میکرو تاثیر داره؟

    پاسخ
    • مهدی دمیرچیلو
      2018/05/19 در 10:43

      سلام
      بله.میکرو از اون کدی که داره اجراش میکنه متوقف میشه و میره تو تابع وقفه و بعد که ازش خارج شد میره سراغ ادامه …
      تا جایی که یادمه اینطور بود.
      ولی خب میکرو سرعتش اون قدر زیاده که …

      پاسخ
  44. maryam
    2018/08/29 در 15:37

    امکان اینکه وقفه خارجی رو وسط برنامه غیر فعال کنیم وجود داره؟
    من توی اصل کدم وقفه خارجی لازمه، ولی باید توی بعضی از تابع هام غیر فعال بشه.
    وقفه عمومی رو هم نمیتونم غیر فعال کنم، چون دارم از وقفه ای داخلی میکرو استفاده میکنم.

    پاسخ
  45. ناشناس
    2018/10/11 در 18:02

    bye

    پاسخ

یک نظر بدهید

برای صرف‌نظر کردن از پاسخ‌گویی اینجا را کلیک کنید.

آزادی قدس نزدیک است، ان شاء الله

آزادی قدس نزدیک است، ان شاء الله

مطلب ( پروژه ) بعدی …

فعلا دارم رو USB و میکرو LPC کار میکنم، 3 تا موضوع مطرح هستش ( که تو ذهنمه هر3شو برم ) :

1) میکرو در نقش Device ( فعلا محوریت کار من این مورد هستش )
2) میکرو در نقش Host
3) میکرو در نقش OTG

 

و باز 2 تا موضوع مطرح هستش، برا راه اندازی usb دو تا راه داریم ( که تو ذهنمه هر2شو برم ) :

1) استفاده از میکروکنترلر ( فعلا محوریت کار من این مورد هستش که از LPC1768 استفاده میکنم )
2) استفاده از آیسی های مختص اینکار.

 

فعلا کارم با دیتاشیت usb تموم شده، دارم کلاس های usb رو مطالعه میکنم، کلاس cdc رو ماستمالی کردیم و یه پروژه ازش منتشر کردیم، الان رو کلاس HID ریز شدم و دارم مطالعه میکنمش و پروژه ازش میزارم تو سایت.

 

جزئیات داستان رو در لینک زیر میتویند ببینید :

آموزش جامع پروتکول USB

 

===

 

به علت اثطغبال بیش از حد دوستان از موضوع usb؛ فعلا یکم سرگرم طراحی قالب جدید سایت شدم ^_^

نظرات اخیر

  • میثم : اقا دم شما گرم. سایت شما یکی از منابع عالی الکترونیک هست که خیلی مط ...

  • مهدی دمیرچیلو : سلام پروژه - خط 3 MFRC522 mfrc522(10/*SS_PIN*/, 9/*RST_PIN*/); پین ...

  • مهدی دمیرچیلو : سلام - باید واحد تایمر میکرو رو مطالعه کنید و توابع مورد نیازتون رو ...

  • مهدی دمیرچیلو : سایت شخصی هستش - دوس دارم ته هر مطلبم یه عکس یا یه متلب متفرقه قرار ...

  • mosa : سلام آقا مهدی مرسی بابت مطلب عالیتون یه سوال داشتم!من از آردوینو می ...

جستجو

bigtheme
  1. پسورد فایل های سایت

    پسورد تمام فایل های سایت الکترونیک

  2. کانال ما در آپارات


ارائه دادن پروژه های سایت به استاد و یا فروختنشون مورد رضایت ما نیست و خلاف شرع و قانون می باشد / کپی کردن مطالب سایت ممنوعه /
  توسط بیگ تم