نمایش/عدم نمایش سایدبار
رفتن به بالای صفحه
آزادی حجاز از دست نااهلان
مهدی دمیرچیلو

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

به نام خدا : در این جلسه از  آموزش 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

گروه پرسش و پاسخ الکترونیکی در سروش
مهدی دمیرچیلو گوگل میفرماید : إِنَّ اللّه مَعَ السارِچین ( خداوند با سرچ کنندگان است )
ارسال دیدگاه
65

1) نظرات غیر فارسی به صورت خودکار حذف میشوند ( حداقل 5 حرف فارسی وارد کنید ).

2) به موارد درخواست پروژه/کد آماده و سوالاتی که بلد نباشم پاسخ داده نمیشه.

3) برای گزاشتن کدهاتون از این سایت استفاده کنید ( طبیعتا لینک کدتون رو باید برای من بفرستید! ) : debian

4) پسورد فایل های سایت : www.dmf313.ir

  1. Avatar

    مهمان

    میلاد

    سلام
    خیلی کارت درسته مهندس
    یه مشکل خنده دار برخوردم
    یه متغیر تعریف کردم ک از طریق کیبد قابل تغییره
    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 داخلشه
    هر عددی که تو متغیر باشه
    مشکل کجاست مهندس؟
    لطفا راهنمایی کنید
    سپاس
    }

  2. Avatar

    مهمان

    جی جی

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

  3. Avatar

    مهمان

    محمد

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

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

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

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

      سلام.

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

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

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

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

  4. Avatar

    مهمان

    محمد امین

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

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

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

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

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

  5. Avatar

    مهمان

    ناشناس

    با سلام و خسته نباشید
    این برنامه یک شمارنده ۰ تا ۹۹ با سون سگمنت دوبل هست.
    میخواستم سرعت شمارنده با تعداد سرریز 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
    {
    {
    {
    {

  6. Avatar

    مهمان

    علی

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

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

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

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

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

  7. Avatar

    مهمان

    Leonardo

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

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

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

      مهدی دمرچیلو

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

  8. Avatar

    مهمان

    مهدی

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

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

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

      مهدی دمرچیلو

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

      • Avatar

        مهمان

        مهدی

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

  9. Avatar

    مهمان

    علیرضا اهنی

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

  10. Avatar

    مهمان

    احمدرضا

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

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

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

      مهدی دمرچیلو

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

    • Avatar

      مهمان

      احمدرضا

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

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

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

        مهدی دمرچیلو

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

    • Avatar

      مهمان

      احمدرضا

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

  11. Avatar

    مهمان

    سید

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

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

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

      مهدی دمرچیلو

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

    • Avatar

      مهمان

      سید

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

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

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

        مهدی دمرچیلو

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

  12. Avatar

    مهمان

    سید

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

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

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

      مهدی دمرچیلو

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

  13. Avatar

    مهمان

    سید

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

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

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

      مهدی دمرچیلو

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

  14. Avatar

    مهمان

    سید

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

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

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

      مهدی دمرچیلو

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

  15. Avatar

    مهمان

    ناشناس

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

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

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

      مهدی دمرچیلو

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

  16. Avatar

    مهمان

    سارا

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

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

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

      مهدی دمرچیلو

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

      • Avatar

        مهمان

        سارا

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

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

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

          مهدی دمرچیلو

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

          • Avatar

            مهمان

            سارا

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

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

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

            مهدی دمرچیلو

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

  17. Avatar

    مهمان

    بهنام

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

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

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

      مهدی دمرچیلو

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

  18. Avatar

    مهمان

    مممم

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

  19. Avatar

    مهمان

    محمد

    داش دمت گرم

  20. Avatar

    مهمان

    power

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

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

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

      مهدی دمرچیلو

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

  21. Avatar

    مهمان

    حسین

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

  22. Avatar

    مهمان

    علیرضا

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

  23. Avatar

    مهمان

    الی

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

  24. Avatar

    مهمان

    ناشناس

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

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

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

      مهدی دمرچیلو

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

  25. Avatar

    مهمان

    شاهین

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

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

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

      مهدی دمرچیلو

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

  26. Avatar

    مهمان

    نوید

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

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

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

      مهدی دمرچیلو

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

  27. Avatar

    مهمان

    حامد

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

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

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

      مهدی دمرچیلو

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

  28. Avatar

    مهمان

    kami

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

  29. Avatar

    مهمان

    الی

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

  30. Avatar

    مهمان

    Farad

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

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

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

      مهدی دمرچیلو

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

  31. Avatar

    مهمان

    hossein

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

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

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

      مهدی دمرچیلو

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

  32. Avatar

    مهمان

    raminsalmani21

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

  33. Avatar

    مهمان

    پویا

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