نمایش/عدم نمایش سایدبار
رفتن به بالای صفحه
أَللّهُمَّ ارْزُقْنی شَفاعَةَ الْحُسَیْنِ یَومَ الْوُرُودِ
مهدی دمیرچیلو

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

87

به نام خدا : در این جلسه از  آموزش avr من مطلبی در این مورد نمیزارم در عوض لینک های زیر رو میزارم که یکی از وبلاگ ها این مطلب رو به خوبی (بهتر از اونی که فکر کنید ) آموزش داده لذا من دیگه این کار رو نمیکنم و این مطلب رو آموزش نمیدم ولی در عوض یه سری پروژه در زیر میزارم و توشون توضیحات لازم رو میدم تا این پروژه ها و اون آموزش ها باعث بشه شما این مبحث رو به خوبی یاد بگیرید.در کل بعد از یادگیری کامل  میکروکنترلر avr میتونید برید سراغ میکروکنترلر arm >>> آموزش جامع میکروکنترلر AVR جلسه۹
موضوع این جلسه : آموزش جامع تایمر/کانتر در AVR   >>>>> آموزش تایمر به صورت پروژه محور

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

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

جلسه۱  جلسه۲  جلسه۳  جلسه۴  جلسه۵  جلسه۶  جلسه۷  جلسه۸
بیرید این لینک هایی رو که گزاشتم بخونید که خدایش طرف خیلی خوب توضیح داده.بعد بیان اینجا و دونه دونه پروژه های زیر رو بخونید و یاد بگیرید و ….

آموزش تایمر به صورت پروژه محور

این تقریبا پروژه مربوط به جلسه ۳ لینک بالا هستش که من یه کم ویرایشش کردم و…
کار این پروژه اینه که هر ۲۰ms یه led رو روشن خاموش میکنه.>>>led به PORTB.0 وصل هستش.
۱) فرکانس کاری میکرو ۸MHZ هستش.
۲) فرکانس کاری تایمر/کانتر : ما تقسیم فرکانسی ۲۵۶ رو براتایمر/کانتر انتخاب میکنیم.>>>لذا ۸ مگا هرتز(فرکانس کل) رو بر ۲۵۶ تقسیم میکنیم و عدد حاصل فرکانس کاری تایمر/کانتر هستش.
۳) به دست ابردن تعداد کلاک مورد نیاز برای تولید زمان مورد نیاز ما : >>>>زمان مورد نیازمون رو بر فرکانس تایمر/کانتر تقسیم میکنیم(یا زمان مورد نیازمون رو بر دوره تناوبتایمر/کانتر ضرب میکنیم)>>>و بعد مقدار به دست اومده رو منهای ۱ میکنیم>>>و بعد عدد رو رند میکنیم.>>>عدد حاصل در این پروژه تقریبا میشه ۲۴۹ تا کلاک.
توجه : تایمر/کانتر ۰  هشت بیتی فقط میتونه از ۰ تا ۲۵۵ تا کلاک رو بره.
در زیر عکسی از  محاسابت قرار میدم براتون(تا ۳ مورد بالا رو قشنگ متوجه بشید.)>>>اگه خطم بده دیگه به بزرگی خودتون ببخشید.
آموزش جامع میکروکنترلر AVR جلسه9

توضیحاتی برای عکس بالا
ما تو این پروژه هدفمون اینه که یه led رو هر 1 ثانیه 1بار خاموش روشن کنیم – و میخوایم برا اینکار از تایمر استفاده کنیم.
حالا 12 ثانیه رو که به صورت مستقیم که نمیشه با تایمر تولید کرد، باید زمان های کوچیک رو تولید کرد و بعد تکرار کرد اونو(عمرا کسی فهمید من چی گفتم)
مثلا برا 1 ثانیه، میایم و با تایمر 8 میلی ثانیه تولید میکنیم و چند تا 8میلی ثانیه میشه 1 ثانیه؟ بله 125 بار باید این زمان رو تولید کنیم.
حالا یه موردی؟ آیا میتونستیم با تایمر 0 16 میلی ثانیه تولید کنیم؟ بیاید تست کنیم
تو عکس بالا اگه 16 میلی رو در 31.25کیلو ضرب کنیم و منهای 1 کنیم حاصل میشه 499 تا کلاک، در حالی که ماکزیمم تعداد کلاک در تایمر0 برابر 256 تا هستش لذا یا باید از تایمر1 استفاده میکردیم و یا زمان تولیدیمون رو کم میکردیم و یا فرکانس تایمر کانتر رو کم میکردیم(که چون فرکانس تایمر رو من یکی مونده به آخر گزاشتم یعنی فرکانس میکرو رو تقسیم بر 256 کردم و به تایمر کانتر دادم لذا دیگه روم نشد فرکانس تایمر کانتر رو کم کنم^_^ لذا گفتم زمان تولیدیم رو کم کنم و دیگه نرم سمت اسفاده از تایمر1) —خب حالا اگه 8میلی ثانیه رو در فرمول قرار بدید میبینید که تعداد کلاک مورد نیاز از حداکثر تعداد کلاک کمتر هستش(برابر 249 هستش) و خب اینم دلیل درستی کار ما^_^
خب میگفتم، پس تا اینجا تایمر ما تو هر 249 کلاک 8میلی ثانیه تولید میکنه و لذا ما باس این کار رو حدود 125 بار تکرار کنیم تا 1 ثانیه تولید کنیم(بلاخره باید از 7خوان/خان^_^ رستم رد شد دیگه) >>> جان داش غلط املایی از من نگیرید(از کسی غلط املایی میگیرن که امیدی به درست شدن املاش باشه، ولی برا من امیدی نیستش، من املای انگلیسیم از املای فارسیم بیشتر میشد زمان مدرسه خودتون دیگه فکرش رو بکنید laugh )
خب حالا مقدار ماکس تعداد کلاک تو تایمر0 برابر 256 تا هستش و ما نیاز به 249 تا کلاک داریم لذا تفریق این دو عدد میشه 7 لذا ما تایمر رو طوری تنظیم میکنیم(به کمک ریجستر TCNT0) تا از کلاک 7 شروع به شمارش بکنه و وقتی به کلاک حداکثر خودش(256) رسید وقفه رخ میده و تو اون وقفه ما مقدار یه متغییری رو 1واحد افزایش میدیم(وقتی این متغییر به مقدار 125 برسه یعنی به کمک تایمر 1 ثانیه تولید کردیم و بعد وضعیت led رو تغییر میدیم و بعد مقدار اون متغییر رو 0 میکنیم تا شمارش زمان از اول شروع بشه)

تایمر/کانتر در کدویزارد نرم افزار کدویژن

در کدویژارد باید تنظیمات مطابق شکل زیر باشه(دو پروژه ای که در زیر گزاشتم به صورت شکل زیر هستن.)
۱) انتخاب Timer0
۲) Clock Source : انتخاب منبع فرکانسی…>>>>ما فرکانس کاری میکرو رو انتخاب کردیم.
۳) Clock Value : فرکانس کاری تایمر هستش>>>با فرض این که تقسیم فرکانسی ۲۵۶ هستش و فرکانس کاری میکرو ۸ مگا هرتز هستش.
۴) Mode : انتخاب مد نرمال. (جلسات بعد در مورد بقیه مد ها پروژه هایی رو میزارد انشاالله)
۵) Output : گفتم که خروجی تغییر نکنه (منظور PORTB.0 یا همون T0 در میکروکنترلر هستش)
۶) Overflow Interrupt : وقفه سر ریز رو فعال کردم>>>>یعنی هر موقع به کلاک ۲۵۵ رسیدیم >>>وقفه رخ میده.
اگه در مورد وقفه چیزی نمیدونید مطلب مقابل رو بخونید : آموزش جامع میکروکنترلر AVR جلسه۳

تایمر/کانتر در کدویزارد نرم افزار کدویژن

پروژه ۱ >>>مد نرمال>>>تقسیم فرکانسی ۲۵۶>>خروجی تغییر نمیکند>>>فرکانس کل میکرو ۸ MHZ

تولید ۱ ثانیه واقعی با تایمر

توضیح پروژه : تو کد به میکرو میگم هر موقع تایمر/کانتر ۱۲۵ بار به کلاک ۲۵۵ رسید(شمارش کلاک ها از ۷ آغاز میشود) شما! led رو اگه خاموشه  روشن کن و اگه روشنه خاموشش کن.تو این پروژه led هر ۱ ثانیه روشن میشه(البته اگه خاموش باشه و اگه خاموش باشه روشن میشه)

اینم از مدار پروژه
آموزش جامع میکروکنترلر AVR جلسه25
اینم از کد های پروژه

پروژه ۲ >>>مد نرمال>>>تقسیم فرکانسی ۲۵۶>>خروجی تغییر نمیکند>>>فرکانس کل میکرو ۸ MHZ

تولید ۱ ثانیه واقعی و نمایش در LCD

این پروژه هم دقیقا مثل پروژه بالا هستش>>>فقط به جای این که LED ها روشن خاموش بشن>>>زمان رو روی LCD نشون میده…
مثلا خودتون میتونید پروژه رو اجرا کنید تا یه زمان خاصی بشموره و هم زمان کرنومتر گوشیتون رو هم فعال کنید >>تا دقت این پروژه رو ببینید چه قدر هستش…
اگه اشتباه نکنم این پروژه دقیق دقیق هم ۱ ثانیه تولید نمیکنه>>> ممکنه یه ذره کمتر یا بیشتر باشه…

 اینم از کد های پروژه

 

یه فراموشی رایج

خودم هم بیشتر مواقع یادم میره فرکانس میکرو رو تو پروتئوس تعیین کنم>>>مثلا تو پروژه های بالا >>>فرکانل میکرو ۸ مگا هرتز داخلی بوده است(یعنی از کریستال استفاده نکرده)>>>لذا شکل زیر رو ببینید و تو پروژه هاتون اعمال کنید>>>و هی نگید چرا پروژه من ۱ ثانیه تولید نمیکنه و ۱۰ ثانیه  تولید میکنه در حالی که تمام مراحل رو مثل شما رفتم>>>>و از این جور حرف ها که بعضی دوستان ممکنه بزنن>>>عکس زیر رو ببینید و انجام ببدید تو پروژه هاتون>>>فقط همین>>> به همین سادگی و به همین بد مزگی!!!( رو عکس کلیک کنید و در اندازه واقعیش نگاش کنید )

 آموزش جامع تایمر/کانتر در AVR

دانلود ۲ پروژه این مطلب

بعد از خوندن این مطلب ، مطلب زیر رو هم ببینید بد نیست : پروژه تولید تمام رنج های فرکانسی با TIMER0

تعداد مطالب : 367 تا
جنگ ما فتح قدس را به همراه خواهد داشت. [ امام خمینی (ره) ]
ارسال دیدگاه
67
نظرات این مطلب بسته شده است.
  1. سید مجتبی

    مهمان

    سید مجتبی

    سلام با استفاده از این فرمولی که گفتید دارم یک تایمر ثانیه دقیقه ساعت با سگمنت می سازم به نوعی تایمر معکوس هست. به عنوان مثال تا 60 دقیقه رو تنظیم می کنم و بعد کلید رو میزنم بعد یک ساعت یک عملی رو انجام میده. مشکل اینجاست که این یک ثانیه ای که گتید برای 60 ثانیه دقیق هستو تو بازه یک ساعت حدود 15 الی 20 ثانیه جلو می افته. چطوری اینو بر طرف کنم؟

  2. رضا

    مهمان

    رضا

    سلام در مورد این کدها راهنمایی بفرمایید مثلا اگر فرکانس 200 باشد
    ;freq_t=-(float)1000000/frequncy
    ;TCNT1L_TEMP=freq_t & 0x00ff
    ;TCNT1H_TEMP=freq_t/256

  3. میلاد

    مهمان

    میلاد

    سلام
    خیلی کارت درسته مهندس
    یه مشکل خنده دار برخوردم
    یه متغیر تعریف کردم ک از طریق کیبد قابل تغییره
    eeprom unsigned char wwt=100;
    بعد اومدم تایمر رو گفتم برعکس بشماره
    long int o;
    unsigned char sec=59,mint;

    interrupt [TIM0_OVF] void timer0_ovf_isr(void){
    TCNT0=0x37;
    o++;

    if(o==22500){ //22500
    sec–;
    o=0;
    }
    }
    unsigned char str[10];

    بعد گفتم نشون بده

    void check_time(void){
    //ftoa(mint, 0 , p);
    //ftoa(sec, 0 , n);
    lcd_gotoxy(0,1);
    lcd_puts(“Time: “);sprintf(str,”%d:%d”,mint,sec);lcd_puts(str);

    داخل برنامه که میخوام مقدار متغیر را بریزم تو دقیقه شمارم
    if(h==0){sec=60;mint=wwt;h=1;}
    همیشه عدد 5 داخلشه
    هر عددی که تو متغیر باشه
    مشکل کجاست مهندس؟
    لطفا راهنمایی کنید
    سپاس
    }

  4. جی جی

    مهمان

    جی جی

    سلام.خیلی کارت درسته

  5. محمد

    مهمان

    محمد

    سلام وقت بخیر
    من میخام یه پروژه ای رو راه بندازم که وظیفش اینه :
    بامقدار گیری یک متغیر از 1 الی … (به فرض n تعداد )
    حالا یک موتور باید زمان مثلا 1 ثانیه ای رو به ازای 1= n روشن بشه و در حالات بعد مثلا n=3 موتور 3 بار به مدت 1 ثانیه روشن بشه بین روشن وخاموش شدن موتور هم یه زمان خیلی کمی هم وجود داشته باشه
    (و حالا یه سوال دیگه : آیا میکرو این قابلیت رو داره که مقدار متغیرش رو دستگاه خارجی مثل کامپیوتر مقدار دهی کنه؟؟؟)

    مشاهده پاسخ ها (1)
    • مهدی دمیرچیلو

      نویسنده این مطلب

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

      سلام.

      بامقدار گیری یک متغیر ….

      میشه، هر روشی که دوست داری میتونی پیاده سازی کنی ( این که چطوری عددو بخوای بدی به میکرو ) – با دو تا کلید – یا کیبورد – با نمایشگر لمسی – و…

      آیا میکرو این قابلیت رو داره که مقدار متغیرش رو دستگاه خارجی مثل کامپیوتر مقدار دهی کنه؟؟؟

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

  6. محمد امین

    مهمان

    محمد امین

    سلام جناب دمرچیلو
    من دقیقا برنامه بالا (تولید یک ثانیه با تایمر) رو تو کد ویژن کپی میکنم و یا حتی خودم مجددا تنظیمات ویزارد رو انجام میدم ولی وقتی کامپایل میکنم این خطا رو میده:
    Error: undefined symbol ‘TIM0_OVF’
    لطفا راهنماییم کنید.ممنون

    مشاهده پاسخ ها (1)
    • مهدی دمیرچیلو

      نویسنده این مطلب

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

      سلام-با نسخه 3.12 الان تست کردم موردی نبود – یا نسخه کدویژن شما فرق داره که ممکنه این ماکرو ( TIM0_OVF ) اسمش تغییر کرده باشه تو نسخه جدید – یا شما موقع ایجاد پروژه جدید – نوع میکرو رو درست تعیین نکردید – میتویند برید تو دیتاشیت و جدول “Reset and Interrupt Vectors” و مقدار این وقفه رو پیدا کنید و مقدارش رو ( که 10 هستش ) قرار بدید ( بجای TIM0_OVF ) یا این که ماکروی زیر رو اول پروژه تعریف کنید :
      #define TIM0_OVF 10

  7. ناشناس

    مهمان

    ناشناس

    با سلام و خسته نباشید
    این برنامه یک شمارنده ۰ تا ۹۹ با سون سگمنت دوبل هست.
    میخواستم سرعت شمارنده با تعداد سرریز TCNT کنترل کنم.
    <include <mega16.h#
    <include <delay.h#
    ;volatile unsigned char tot_overflow
    ()void timer1_init
    }
    {
    ;( TCCR1B |= (1 << CS11
    ; TCNT1 = 0
    ; (TIMSK |= (1 << TOIE1
    (" asm("sei#
    ; tot_overflow = 0
    {
    }( interrupt [TIM1_OVF] void timer1_ovf_isr(void
    ;++ tot_overflow
    {
    (void main(void
    }
    ; unsigned char S,i,j,tekrar
    ;{unsigned char cathode_seg[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}
    ;() timer1_init
    ; DDRA=0xff
    ; DDRB=0xff
    } (while(1
    (۲۰=<if(tot_overflow
    }
    ( ++ for(i=0; i<=۹; i
    }
    (++ for(j=0; j<۱۰; j
    }
    (++for(tekrar=0; tekrar<۲۵; tekrar
    {
    ;PORTA.0=0; PORTA.1=1
    [ PORTB=cathode_seg[i
    ;(delay_ms(10
    ;PORTA.0=1; PORTA.1=1
    ; PORTA.0=1; PORTA.1=0
    ;[PORTB=cathode_seg[j
    ;(delay_ms(10
    ;PORTA.0=1; PORTA.1=1
    ; tot_overflow=0
    {
    {
    {
    {

  8. علی

    مهمان

    علی

    سلام
    ایا درAVRمیشه هم زمان که برنامه های خواسته شده رو میکرو انجام که میده در کنارش یه lED رو هم فلاشر کنه بدون توجه به برنامه؟
    مثلا PORTB.6یکسره از اول کار تا زمان خاموش شدن میکرو قلاشر باشه

    مشاهده پاسخ ها (1)
    • مهدی دمیرچیلو

      نویسنده این مطلب

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

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

  9. Leonardo

    مهمان

    Leonardo

    چرا از نرم افزار اتمل استودیو واسه برنامه نویسی استفاده نمی کنید؟ کدویژن یک نرم افزار فرعی و فیکه که سطح علمی برنامه نویسان را پایین نگه میداره. کدویژن باعث شد بنده در طی چهار سال از یادگیری کامل avr عاجز بمونم

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      نمیدونم والا – شاید چون اولین چیزی که کار کردم و تو کتابا بوده همین کدویژن بوده و دیگه سمت اتمل نرفتم چون نیاز پیدا نکردم – شاید هم سر تنبلی بوده – نمیدونم

  10. مهدی

    مهمان

    مهدی

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

    مشاهده پاسخ ها (2)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      عکس بده ببینیم.

      • مهدی

        مهمان

        مهدی

        مشکل حل شد اون اومده از max کم کرده تا bottom بدست بیاد یعنی منم بیام همین عددی که شما بدست آوردید رو از 255 کم کنم همون میشه wacko

  11. علیرضا اهنی

    مهمان

    علیرضا اهنی

    سلام.
    ایا در تایمر کانتر۰این صادق است که:
    در مودCTCوقتی وقفه تایمر کانتر را فعال نمودایم مقدار ریجیستر TCNT0تازمانی شمره میشود که با مقدار ریجیسترOCR0برابر شود و در این زمان وقفه تایمر کانتر۰صورت میگیرد smile

  12. احمدرضا

    مهمان

    احمدرضا

    سلام برادر دمرچیلو
    خداقوت
    ببخشید یه سوالی داشتم خدمتتون:
    توی پروژه ۲ اون قسمت آخر که شرط if(i==125 رو گذاشتید اگه بخوایم زمان تولیدی رو سریعتر کنیم یه راهش اینه که اون ۱۲۵ رو کمترش کنیم. ولی خیلی عجیبه. چون اگر این ۱۲۵ رو از ۴۰ کمتر کنیم دیگه هیچی نشون نمیده.
    دلیلیش چیه؟ sad sad

    مشاهده پاسخ ها (4)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام – زمان چشمک زدن رو کم کنی- از یه مقدار کم بشه دیگه چشم انسان متوجه نمیشه – همین لامپ های توی خونه چون برق شهر فرکانسش ۵۰ هستش یعنی در هر ثانیه ۵۰ بار رخ میده موجش – لامپ هی خاموش روشن میشه لذا انسان متوجه نمیشه – داستان شما هم همینه.

    • احمدرضا

      مهمان

      احمدرضا

      سلام مجدد
      منظورم نمایش زمان روی LCD بود. برای اونم همینطوره؟
      عجیبه. خب آخه باید با کم کردن اون عدد ۱۲۵ شمارش روی صفحه نمایش سریعتر بشه و مثلا ۰ تا ۱۰۰ رو خیلی سریعتر طی کنه.
      چه ربطی به فرکانس و اینا داره؟ shock
      ———————–
      عجبببببب!!!!!
      شما که همش میگید نظر بدبد بعدم نظرات رو تایید نمیکنید!
      سوال نامربوطی که نپرسیدم!!!!!

      • مهدی دمرچیلو

        نویسنده این مطلب

        مهدی دمرچیلو

        خب نمایشگر – خب نه چون نمایشگر همش پاک میکنی و مینویسی – نمایش دیتا با مشکل رو برو میشه – ولی اگه باز نویسی کنی مشکل تا حدودی حل میشه و فقط اون قسمتی که تغییر میکنه به مشکل بر میخوره که برا حل این مورد هم میتونی میانگین بگیری از دیتات یا هر موقع تغییر کرد نشونش بدی یا یه محدودیتی بزاری تا تعداد دفعات نمایش کم بشه.
        در ضمن کدوم نظر شما تا حالا تایید نشده؟ dash

    • احمدرضا

      مهمان

      احمدرضا

      آهاااااا متوجه شدم give_rose
      بابت اون تایید نظرات هم شرمنده برادر. حواسم نبود. چون نظرم موقتا رفته بود فکر کردم تایید نکردید.
      بازم ببخشید give_rose heart

  13. سید

    مهمان

    سید

    داداش مهدی مجدد معذرت میخوام بابت مزاحمت همیشگی
    آقا من این مبحث تایمر/کانتر و وقفه رو متوجه نمیشم…نه این که کلا نفهمم چیه!!!نمیتونم تو برنامه هام کدنویسیشونو انجام بدم
    مشکل کجاس؟؟چیکار کنم
    چند روزه گیج شدم ..خیلی وقتمو گرفته

    مشاهده پاسخ ها (3)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      نه بابا این چه حرفیه – خب تایمر یکم سنگینه – باید خیلی وقت بزاری روش – شاید ۱ هفته
      ولی وقفه خارجی آسونه – حالا وقفه داخلی منظورته یا خارجی؟

    • سید

      مهمان

      سید

      من الان چندمین باره ک مبحث وقفه رو خوندم….نه فقط تو این سایت…چند تا فایلم داشتم اونا رو هم……(حالا فعلا بیخیال تایمر/کانتر میشم)
      الان تقریبا(شایدم کاملا no ) وقفه رو بلدم …میدونم رجیستراشم از چه قراره
      ولی نمیدونم چرا اون برنامه ی ساعت ارور میده
      نمیفهمم کجاش اشتباهه
      همش میگه متغیر ساعت و دقیقه رو تعریف نکردی
      همه جای کدامم گذاشتمشون ولی هرجا که باشن ارور میده
      این یکیو بگو مشکلش چیه لااقل برا کارای بعدیم بفهمم مشکل کار کجاس!!
      جون خودت اذیت نکن بگو لطفا sorry

      • مهدی دمرچیلو

        نویسنده این مطلب

        مهدی دمرچیلو

        حرف گوش نمیدی چیکارت کنم
        میگم برو کتاب برنامه نویسی سی بگیر و بخون – گوش نمیدی – متغیرت رو باید سراسری تعریف کنی – بعد از کتابخونه ها

  14. سید

    مهمان

    سید

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

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      برا این که با رجیسترها کار کنی – وگرنه اگه نخوای با رجیستر ها کار نکنی – همون بهتر که بری با آردوینو کار کنی.

  15. سید

    مهمان

    سید

    ببخشید
    واقعا شرمنده ام
    اینجا TCCRO=0X04 گذاشتی ولی تو مبحث ساعت دیجیتال با تایمر ۰X02 گذاشتی
    مگه هردوش تقسیم فرکانسیه ۲۵۶نیست؟؟
    یه سوال دیگه
    من با کدویزارد پروژه انجام میدم
    اون جاهایی ک گفتی کلاک از هفت باید شروع شه رو خودش مینوبسه یا خودم باید تغییر بدم
    TCCROرو هم مینویسه؟؟

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      نه داش شرمندمون نکن دیگه sorry این حرفا چیه
      کجا TCCR0=0x02; گزاشتم؟ تو این مطلب من هرجا رو دیدم همش TCCR0=0x04 بود
      اگه این مطلب مد نظرت نبود، لینک مطلب مد نظرت رو بده.
      از کدویزارد استفاده نکن اصلا !!! از ما گفتن.
      اینم تست کن، یادم نیست، خیلی وقته از کدویزارد استفاده نکردم – خودت یه بار تست کنی آمار میاد دستت

  16. سید

    مهمان

    سید

    اینجا چرا تو پروژهایی ک انجام دادی
    تو کدای وقفه TCNT0=7 گذاشتی ولی تو کد تایمر کانتر TCNT=6 گذاشتی؟؟
    مگه این کد نمیگه ک شمارش کلاک از هفت باید شروع بشه؟؟؟
    اینو دیگه میشه جواب بدی لطفا sorry

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      اشتباه چاپی شده pardon

  17. ناشناس

    مهمان

    ناشناس

    ببخشید میشه از تایمر صفر هم به عنوان تایمر و هم به عنوان کانتر استفاده کرد؟

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      تا جایی که یادم میاد نه.
      از بقیه تایمرها استفاده کن.

  18. سارا

    مهمان

    سارا

    سلام خیلی ممنون از مطالب مفیدتون.من میخام یک سری پالس توی یه زمان مشخص با تایمرو کانتر میکرو اندازه بگیرم.برنامه رو نوشتم و پالسا رو هم میشماره.اماا اینکه چطوری بگم توی مثلا یک ثانیه چند تا پالس شمرده رو میشه توضیح بدین باید چیکار کنم؟
    ممنون

    مشاهده پاسخ ها (5)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      میکرو چند تا تایمر داره – از یکیش برا بحث محاسبه زمان استفاده کنید.
      یه شمارنده تعریف کیند برا تعداد پالس ها و…

      • سارا

        مهمان

        سارا

        میشه راهنمایی کنین چطوری باید بنویسم؟من تازه کارم

        • مهدی دمرچیلو

          نویسنده این مطلب

          مهدی دمرچیلو

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

          • سارا

            مهمان

            سارا

            نه اخه من تایمر یک رو مثل تایمر ۰ فعال کردم ولی نمیشماره.میخاستم ببینم فرقشون توی کد در چیه؟

          • مهدی دمرچیلو

            نویسنده این مطلب

            مهدی دمرچیلو

            والا نمیدونم دقیقا مشکلتون چیه که حل کنم، کلی میگید مشکل رو pardon

  19. بهنام

    مهمان

    بهنام

    سلام
    پروژه اول خط۳۰ چرا مقدار اولیه رو ۶ دادین مگ بالا یه بار مقدار اولیه ۷ رو ندادین الان کلا خط ۲۹ و ۳۰ رو چرا دوباره باید بنویسیم ؟اونارو که قبلا یه بار بالاتر نوشتیم, لطفا توضیح بدین.
    با تشکر

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام-خط ۳۰ باید بشه ۷، ۶ درست نیست
      این جا تنظیم میکنیم در داخل وقفه هم باید تنظیم کنیم – چون وقتی شمارنده سرریز میکنه وقفه رخ میده و ما باید دوباره مبدا شروع رو ۷ تنظیم کنیم و وگرنه از ۰ شروع به شمارش میکنه.
      و ۷ تا ۲۵۵ میشه ۲۴۹ تا کلاک که ۱۲۵ تا از این ۲۴۹ تا رو ما نیاز داریم لذا تو تابع وقفه شه شمارنده I تعریف کردیم که در هر بار رخ دادن وقفه مقدارش یه واحد زیاد میشه و در برنامه هم بررسی میکنیم هر موقع مقدار I به ۱۲۵ رسید کارمون رو انجام میدیم و شمارنده رو ۰ میکنیم بعدش

  20. مممم

    مهمان

    مممم

    سلام ببخشید من اموزش ها رو از جلسه یک میخوام ولی توی سایتتون نمیبینم درواقع بهم ریختس چی کار کنم؟

    مشاهده پاسخ ها (1)
  21. محمد

    مهمان

    محمد

    داش دمت گرم

  22. power

    مهمان

    power

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

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام-مطلب انواع فرکانش کاری میکرو تو سایت هستش – سری مطالب آموزش جامع avr

  23. حسین

    مهمان

    حسین

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

  24. علیرضا

    مهمان

    علیرضا

    اکثر مطالبت خوندم خیلی عالی بودن. دمت گررررررررررررررم مشتی

  25. الی

    مهمان

    الی

    سلام ب نظرم تعداد کلاک لازم میشه 250تا کلاک نه 249 چون تایمر از 0 شروع ب شمارش میکنه تا به 249 برسه در نتیجه باید کلا 250تا کلاک بزنه تا 8ms ساخته بشه و در نتیجه باید مقدار اولیه رو 6 بذاریم چون تایمر در اصل 256 تا عدد میشمره .درسته؟؟؟آخه تو برنامه یه جا 7 گذاشتین و یه جا 6 .

  26. ناشناس

    مهمان

    ناشناس

    سلام…
    یه پروژه ی ساعت با atmega8 دارم، میشه کمکم کنید…
    چطور می تونم هر دقیقه یکبار وقفه ایجاد کنم؟
    ساعت فقط شامل ساعت و دقیقه هستش…

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

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

  27. شاهین

    مهمان

    شاهین

    با سلام و خسته نباشید ویژه
    خیلی ممنونم از مطالبتون
    آقا مهدی 2 تا سوال (خواهش میکنم راهنمایی کنید)
    زمان مورد نیاز ما مگه 20میلی ثانیه نیستش ؟ پس تو فرمول 8 میلی ثانیه ازکجا اومده؟ (واقعا گیج شدم)
    اگه ممکنه در مورد شرطی هم که تو قسمت حلقه گذاشتید یه توضیحی بدید؟ ( (تو کد به میکرو میگیم هر موقع تایمر/کانتر ۱۲۵ بار) , و برای i مقدار رو برابر ۱۰۰ گذاشتید در بخش شرط)

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      خب مثل این که م اشتباه کردم – معضرت میخوام
      الان مطلب رو تصحیح میکنم.

  28. نوید

    مهمان

    نوید

    سلام ممنون از این مطلبتون یه سوال دارم با اجازه میپرسم
    این خط عمودی تو مثال زیر دقیقا نقشش چیه چون بدون اون هم دستور به همون شکل اجرا میشه
    TCCR0 |=0x05;
    ممنون میشم راهنمایی کنید (:

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      کد زیر
      TCCR0 |=0x05;
      برابر است با کد زیر
      TCCR0 = TCCR0 | 0x05;
      و حالا در کد بالا | یعنی اور بیتی –
      در مرود اند و اور بیتی بسرچی مطلب تو نت کم نیستش

  29. حامد

    مهمان

    حامد

    سلام
    آقا مهدی اگه بیایم دقیقا 1 ثانیه درست کنیم ممکنه که بعد یه مدت شمردن cpu خسته شه و ریتمش کند شه و عقب بیوفته؟
    برا پیشگیری میتونیم بیایم و یه کم کمتر بگیریم تاخیرو مثلا998 میلی ثانیه؟

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      تنها وقتی میکرو هنگ بکنه ممکنه این اتفاق رخ بده و میکرو کارهای پیش بینی نشده ای انجام بده
      و برا بحث هنگ کردن میکرو هم راه حل وجود داره، و اونم بحث واچ داگ هستش

  30. kami

    مهمان

    kami

    یبار کامل توضیح میدین چرا ۱۲۵ گرفتید (تو کد به میکرو میگم هر موقع تایمر/کانتر ۱۲۵ بار) , و برای iمقدار رو برابر ۱۰۰ گذاشتید در بخش شرط- در ضمن بابت سایتتون هم خیلی ممنونم

  31. الی

    مهمان

    الی

    خیلی عالییییییییی .

  32. Farad

    مهمان

    Farad

    نباید پایه 40 39 38 تو کد مقدار بدی؟پروتیوس اصلا معتبر نیست.فقط پروژه LED چشمک زن درست کار میکنه.اگه میخای یاد بدی حداقل مثه استادای بی سواد ایرانی نباش

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام smile
      این ۳ تا پایه که برا adc-porta هستن…من با adc-porta کار ندارم که….با مقدار دهیشون جیکار دارم….
      بله پروتئوس زیاد معتبر نیست چون بعضی وقت ها درست جواب نمیده…..ولی تا وقتی که درست جواب مید چرا استفاده نکنم.
      در ضمن پروژه ها هر دوتاشون کار میکنن که!!!…..اون یکی مشکل چیه که میگی درست کار نمیده؟؟؟
      داداش ما بیسواد و شما با سواد قبوله….
      ما که ادعایی نکردیم تا حالا
      ما چیزایی که یاد میگیریم و بلد هستیم (به نظر خودمون) رو میزاریم تو سایت….پولی هم کار نمیکنیم لذا هیچ بنی بشری حق نداره بهم توهین کنه…..انقاد و پیششنهاد یه بحثیه و توهین یه چیز دیگه

  33. hossein

    مهمان

    hossein

    مهندس میشه لطفا به صورت ساده I2C با کد ویزارد رو یاد بدید؟
    مثل پروژه های SPI و… که آموزش دادید.
    TWI , 1wire رو توضیح بدید.

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      چشم…
      تو نظر قبلی تون جواب دادم که…

  34. raminsalmani21

    مهمان

    raminsalmani21

    داداش با سون سگمنت هم پروژه میبندی؟

    مشاهده پاسخ ها (1)
  35. پویا

    مهمان

    پویا

    نظر ندی یه وقت…گناه میشه