به نام خدا : در این جلسه از آموزش avr من مطلبی در این مورد نمیزارم در عوض لینک های زیر رو میزارم که یکی از وبلاگ ها این مطلب رو به خوبی (بهتر از اونی که فکر کنید ) آموزش داده لذا من دیگه این کار رو نمیکنم و این مطلب رو آموزش نمیدم ولی در عوض یه سری پروژه در زیر میزارم و توشون توضیحات لازم رو میدم تا این پروژه ها و اون آموزش ها باعث بشه شما این مبحث رو به خوبی یاد بگیرید.در کل بعد از یادگیری کامل میکروکنترلر avr میتونید برید سراغ میکروکنترلر arm >>> آموزش جامع میکروکنترلر AVR جلسه۹
موضوع این جلسه : آموزش جامع تایمر/کانتر در AVR >>>>> آموزش تایمر به صورت پروژه محور
آموزش جامع میکروکنترلر AVR جلسه۹
جلسه۱ جلسه۲ جلسه۳ جلسه۴ جلسه۵ جلسه۶ جلسه۷ جلسه۸
بیرید این لینک هایی رو که گزاشتم بخونید که خدایش طرف خیلی خوب توضیح داده.بعد بیان اینجا و دونه دونه پروژه های زیر رو بخونید و یاد بگیرید و ….
آموزش تایمر به صورت پروژه محور
این تقریبا پروژه مربوط به جلسه ۳ لینک بالا هستش که من یه کم ویرایشش کردم و…
کار این پروژه اینه که هر ۲۰ms یه led رو روشن خاموش میکنه.>>>led به PORTB.0 وصل هستش.
۱) فرکانس کاری میکرو ۸MHZ هستش.
۲) فرکانس کاری تایمر/کانتر : ما تقسیم فرکانسی ۲۵۶ رو براتایمر/کانتر انتخاب میکنیم.>>>لذا ۸ مگا هرتز(فرکانس کل) رو بر ۲۵۶ تقسیم میکنیم و عدد حاصل فرکانس کاری تایمر/کانتر هستش.
۳) به دست ابردن تعداد کلاک مورد نیاز برای تولید زمان مورد نیاز ما : >>>>زمان مورد نیازمون رو بر فرکانس تایمر/کانتر تقسیم میکنیم(یا زمان مورد نیازمون رو بر دوره تناوبتایمر/کانتر ضرب میکنیم)>>>و بعد مقدار به دست اومده رو منهای ۱ میکنیم>>>و بعد عدد رو رند میکنیم.>>>عدد حاصل در این پروژه تقریبا میشه ۲۴۹ تا کلاک.
توجه : تایمر/کانتر ۰ هشت بیتی فقط میتونه از ۰ تا ۲۵۵ تا کلاک رو بره.
در زیر عکسی از محاسابت قرار میدم براتون(تا ۳ مورد بالا رو قشنگ متوجه بشید.)>>>اگه خطم بده دیگه به بزرگی خودتون ببخشید.
توضیحاتی برای عکس بالا
ما تو این پروژه هدفمون اینه که یه 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خوان/خان^_^ رستم رد شد دیگه) >>> جان داش غلط املایی از من نگیرید(از کسی غلط املایی میگیرن که امیدی به درست شدن املاش باشه، ولی برا من امیدی نیستش، من املای انگلیسیم از املای فارسیم بیشتر میشد زمان مدرسه خودتون دیگه فکرش رو بکنید )
خب حالا مقدار ماکس تعداد کلاک تو تایمر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 هر ۱ ثانیه روشن میشه(البته اگه خاموش باشه و اگه خاموش باشه روشن میشه)
اینم از مدار پروژه
اینم از کد های پروژه
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 |
//<a title="آموزش میکروکنترلر avr" href="https://dmf313.ir/electronics/learning-avr/" target="_blank" rel="noopener noreferrer">آموزش میکروکنترلر avr</a> جلسه۹ #include <mega16.h> int i=0; // Timer 0 overflow interrupt service routine interrupt [TIM0_OVF] void timer0_ovf_isr(void) { TCCR0=0x04;//شروع تایمر با تقسیم فرکانسی ۲۵۶ TCNT0=7;//مقدار دهی اولیه i++;//هر ۲۴۹ کلاک یعنی ۸ میلی ثانیه } // Declare your global variables here void main(void) { DDRB=0x01; PORTB.0=1; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 31.250 kHz >>> تقسیم فرکانس : ۲۵۶ // Mode: Normal top=FFh TCCR0=0x04; TCNT0=6;//مقدار دهی اولیه TIMSK=0x01; //فعال کردن وقفه تطبیق مقایسه ای تایمر/کانتر صفر // Global enable interrupts #asm("sei") while (1) { //i==125 >>>> 1s if(i==125) { // معکوس مقدار پایه ۰ پورت بی در همین پایه قرار میگیرد //یعنی اگه اولیه این پایه صفر باشد کد زیر معکوس ۰ را یعنی ۱ رو در این پایه قرار میدهد PORTB.0=!PORTB.0; i=0;//اینم که معلومه کارش چیه>>و چرا من صفرش کردم } }; } |
پروژه ۲ >>>مد نرمال>>>تقسیم فرکانسی ۲۵۶>>خروجی تغییر نمیکند>>>فرکانس کل میکرو ۸ MHZ
تولید ۱ ثانیه واقعی و نمایش در LCD
این پروژه هم دقیقا مثل پروژه بالا هستش>>>فقط به جای این که LED ها روشن خاموش بشن>>>زمان رو روی LCD نشون میده…
مثلا خودتون میتونید پروژه رو اجرا کنید تا یه زمان خاصی بشموره و هم زمان کرنومتر گوشیتون رو هم فعال کنید >>تا دقت این پروژه رو ببینید چه قدر هستش…
اگه اشتباه نکنم این پروژه دقیق دقیق هم ۱ ثانیه تولید نمیکنه>>> ممکنه یه ذره کمتر یا بیشتر باشه…
اینم از کد های پروژه
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 38 39 40 41 42 43 |
#include <mega16.h> #include <stdlib.h> #include <lcd.h> #asm .equ __lcd_port=0x1b #endasm int i=0; // Timer 0 overflow interrupt service routine interrupt [TIM0_OVF] void timer0_ovf_isr(void) { TCCR0=0x04;//شروع تایمر با تقسیم فرکانسی ۲۵۶ TCNT0=7;//مقدار دهی اولیه i++;//هر ۲۴۹ کلاک یعنی ۸ میلی ثانیه } // Declare your global variables here void main(void) { int j=0; char arr[]; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 31.250 kHz >>> تقسیم فرکانس : ۲۵۶ // Mode: Normal top=FFh TCCR0=0x04; TCNT0=6;//مقدار دهی اولیه TIMSK=0x01; //فعال کردن وقفه تطبیق مقایسه ای تایمر/کانتر صفر // Global enable interrupts #asm("sei") lcd_init(16); while (1) { //i==125 >>>> 1s if(i==125) { itoa(j,arr); lcd_clear(); lcd_gotoxy(0,0); lcd_puts(arr); j++; i=0; } }; } |
یه فراموشی رایج
خودم هم بیشتر مواقع یادم میره فرکانس میکرو رو تو پروتئوس تعیین کنم>>>مثلا تو پروژه های بالا >>>فرکانل میکرو ۸ مگا هرتز داخلی بوده است(یعنی از کریستال استفاده نکرده)>>>لذا شکل زیر رو ببینید و تو پروژه هاتون اعمال کنید>>>و هی نگید چرا پروژه من ۱ ثانیه تولید نمیکنه و ۱۰ ثانیه تولید میکنه در حالی که تمام مراحل رو مثل شما رفتم>>>>و از این جور حرف ها که بعضی دوستان ممکنه بزنن>>>عکس زیر رو ببینید و انجام ببدید تو پروژه هاتون>>>فقط همین>>> به همین سادگی و به همین بد مزگی!!!( رو عکس کلیک کنید و در اندازه واقعیش نگاش کنید )
بعد از خوندن این مطلب ، مطلب زیر رو هم ببینید بد نیست : پروژه تولید تمام رنج های فرکانسی با TIMER0
مهمان
سلام با استفاده از این فرمولی که گفتید دارم یک تایمر ثانیه دقیقه ساعت با سگمنت می سازم به نوعی تایمر معکوس هست. به عنوان مثال تا 60 دقیقه رو تنظیم می کنم و بعد کلید رو میزنم بعد یک ساعت یک عملی رو انجام میده. مشکل اینجاست که این یک ثانیه ای که گتید برای 60 ثانیه دقیق هستو تو بازه یک ساعت حدود 15 الی 20 ثانیه جلو می افته. چطوری اینو بر طرف کنم؟
مهمان
سلام در مورد این کدها راهنمایی بفرمایید مثلا اگر فرکانس 200 باشد
;freq_t=-(float)1000000/frequncy
;TCNT1L_TEMP=freq_t & 0x00ff
;TCNT1H_TEMP=freq_t/256
مهمان
سلام
خیلی کارت درسته مهندس
یه مشکل خنده دار برخوردم
یه متغیر تعریف کردم ک از طریق کیبد قابل تغییره
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 داخلشه
هر عددی که تو متغیر باشه
مشکل کجاست مهندس؟
لطفا راهنمایی کنید
سپاس
}
مهمان
سلام.خیلی کارت درسته
مهمان
سلام وقت بخیر
من میخام یه پروژه ای رو راه بندازم که وظیفش اینه :
بامقدار گیری یک متغیر از 1 الی … (به فرض n تعداد )
حالا یک موتور باید زمان مثلا 1 ثانیه ای رو به ازای 1= n روشن بشه و در حالات بعد مثلا n=3 موتور 3 بار به مدت 1 ثانیه روشن بشه بین روشن وخاموش شدن موتور هم یه زمان خیلی کمی هم وجود داشته باشه
(و حالا یه سوال دیگه : آیا میکرو این قابلیت رو داره که مقدار متغیرش رو دستگاه خارجی مثل کامپیوتر مقدار دهی کنه؟؟؟)
نویسنده این مطلب
سلام.
میشه، هر روشی که دوست داری میتونی پیاده سازی کنی ( این که چطوری عددو بخوای بدی به میکرو ) – با دو تا کلید – یا کیبورد – با نمایشگر لمسی – و…
آره – روش های متعددی برای این کار هستش – ارتباط میکرو با کامپیوتر، بیسیم باشه یا با سیم – بعد برا هر کدوم از روشها، پروتکل ها و مدارات مختلفی وجود داره.
مهمان
سلام جناب دمرچیلو
من دقیقا برنامه بالا (تولید یک ثانیه با تایمر) رو تو کد ویژن کپی میکنم و یا حتی خودم مجددا تنظیمات ویزارد رو انجام میدم ولی وقتی کامپایل میکنم این خطا رو میده:
Error: undefined symbol ‘TIM0_OVF’
لطفا راهنماییم کنید.ممنون
نویسنده این مطلب
سلام-با نسخه 3.12 الان تست کردم موردی نبود – یا نسخه کدویژن شما فرق داره که ممکنه این ماکرو ( TIM0_OVF ) اسمش تغییر کرده باشه تو نسخه جدید – یا شما موقع ایجاد پروژه جدید – نوع میکرو رو درست تعیین نکردید – میتویند برید تو دیتاشیت و جدول “Reset and Interrupt Vectors” و مقدار این وقفه رو پیدا کنید و مقدارش رو ( که 10 هستش ) قرار بدید ( بجای TIM0_OVF ) یا این که ماکروی زیر رو اول پروژه تعریف کنید :
#define TIM0_OVF 10
مهمان
با سلام و خسته نباشید
این برنامه یک شمارنده ۰ تا ۹۹ با سون سگمنت دوبل هست.
میخواستم سرعت شمارنده با تعداد سرریز 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
{
{
{
{
مهمان
سلام
ایا درAVRمیشه هم زمان که برنامه های خواسته شده رو میکرو انجام که میده در کنارش یه lED رو هم فلاشر کنه بدون توجه به برنامه؟
مثلا PORTB.6یکسره از اول کار تا زمان خاموش شدن میکرو قلاشر باشه
نویسنده این مطلب
سلام-از تایمر و وقفش میتونی استفاده کنی برا ترتمیز شدن کار.
مهمان
چرا از نرم افزار اتمل استودیو واسه برنامه نویسی استفاده نمی کنید؟ کدویژن یک نرم افزار فرعی و فیکه که سطح علمی برنامه نویسان را پایین نگه میداره. کدویژن باعث شد بنده در طی چهار سال از یادگیری کامل avr عاجز بمونم
نویسنده این مطلب
نمیدونم والا – شاید چون اولین چیزی که کار کردم و تو کتابا بوده همین کدویژن بوده و دیگه سمت اتمل نرفتم چون نیاز پیدا نکردم – شاید هم سر تنبلی بوده – نمیدونم
مهمان
سلام
آقا مهدی یکم گیج شدم تو کتاب جابر الوندی یه جور دیگه tcnt بدست آورده
کدوم درسته
نویسنده این مطلب
سلام
عکس بده ببینیم.
مهمان
مشکل حل شد اون اومده از max کم کرده تا bottom بدست بیاد یعنی منم بیام همین عددی که شما بدست آوردید رو از 255 کم کنم همون میشه
مهمان
سلام.
ایا در تایمر کانتر۰این صادق است که:
در مودCTCوقتی وقفه تایمر کانتر را فعال نمودایم مقدار ریجیستر TCNT0تازمانی شمره میشود که با مقدار ریجیسترOCR0برابر شود و در این زمان وقفه تایمر کانتر۰صورت میگیرد
مهمان
سلام برادر دمرچیلو

خداقوت
ببخشید یه سوالی داشتم خدمتتون:
توی پروژه ۲ اون قسمت آخر که شرط if(i==125 رو گذاشتید اگه بخوایم زمان تولیدی رو سریعتر کنیم یه راهش اینه که اون ۱۲۵ رو کمترش کنیم. ولی خیلی عجیبه. چون اگر این ۱۲۵ رو از ۴۰ کمتر کنیم دیگه هیچی نشون نمیده.
دلیلیش چیه؟
نویسنده این مطلب
سلام – زمان چشمک زدن رو کم کنی- از یه مقدار کم بشه دیگه چشم انسان متوجه نمیشه – همین لامپ های توی خونه چون برق شهر فرکانسش ۵۰ هستش یعنی در هر ثانیه ۵۰ بار رخ میده موجش – لامپ هی خاموش روشن میشه لذا انسان متوجه نمیشه – داستان شما هم همینه.
مهمان
سلام مجدد
منظورم نمایش زمان روی LCD بود. برای اونم همینطوره؟
عجیبه. خب آخه باید با کم کردن اون عدد ۱۲۵ شمارش روی صفحه نمایش سریعتر بشه و مثلا ۰ تا ۱۰۰ رو خیلی سریعتر طی کنه.
چه ربطی به فرکانس و اینا داره؟
———————–
عجبببببب!!!!!
شما که همش میگید نظر بدبد بعدم نظرات رو تایید نمیکنید!
سوال نامربوطی که نپرسیدم!!!!!
نویسنده این مطلب
خب نمایشگر – خب نه چون نمایشگر همش پاک میکنی و مینویسی – نمایش دیتا با مشکل رو برو میشه – ولی اگه باز نویسی کنی مشکل تا حدودی حل میشه و فقط اون قسمتی که تغییر میکنه به مشکل بر میخوره که برا حل این مورد هم میتونی میانگین بگیری از دیتات یا هر موقع تغییر کرد نشونش بدی یا یه محدودیتی بزاری تا تعداد دفعات نمایش کم بشه.
در ضمن کدوم نظر شما تا حالا تایید نشده؟
مهمان
آهاااااا متوجه شدم

بابت اون تایید نظرات هم شرمنده برادر. حواسم نبود. چون نظرم موقتا رفته بود فکر کردم تایید نکردید.
بازم ببخشید
مهمان
داداش مهدی مجدد معذرت میخوام بابت مزاحمت همیشگی
آقا من این مبحث تایمر/کانتر و وقفه رو متوجه نمیشم…نه این که کلا نفهمم چیه!!!نمیتونم تو برنامه هام کدنویسیشونو انجام بدم
مشکل کجاس؟؟چیکار کنم
چند روزه گیج شدم ..خیلی وقتمو گرفته
نویسنده این مطلب
نه بابا این چه حرفیه – خب تایمر یکم سنگینه – باید خیلی وقت بزاری روش – شاید ۱ هفته
ولی وقفه خارجی آسونه – حالا وقفه داخلی منظورته یا خارجی؟
مهمان
من الان چندمین باره ک مبحث وقفه رو خوندم….نه فقط تو این سایت…چند تا فایلم داشتم اونا رو هم……(حالا فعلا بیخیال تایمر/کانتر میشم)
) وقفه رو بلدم …میدونم رجیستراشم از چه قراره
الان تقریبا(شایدم کاملا
ولی نمیدونم چرا اون برنامه ی ساعت ارور میده
نمیفهمم کجاش اشتباهه
همش میگه متغیر ساعت و دقیقه رو تعریف نکردی
همه جای کدامم گذاشتمشون ولی هرجا که باشن ارور میده
این یکیو بگو مشکلش چیه لااقل برا کارای بعدیم بفهمم مشکل کار کجاس!!
جون خودت اذیت نکن بگو لطفا
نویسنده این مطلب
حرف گوش نمیدی چیکارت کنم
میگم برو کتاب برنامه نویسی سی بگیر و بخون – گوش نمیدی – متغیرت رو باید سراسری تعریف کنی – بعد از کتابخونه ها
مهمان
چرا از کدویزارد استفاده نکنم؟؟؟دلیل خاصی داری؟؟؟
برای تایمر و وقفه خوبه که؟؟
اونجا فعالش میکنی خودش کدارو مینویسه برات
نویسنده این مطلب
برا این که با رجیسترها کار کنی – وگرنه اگه نخوای با رجیستر ها کار نکنی – همون بهتر که بری با آردوینو کار کنی.
مهمان
ببخشید
واقعا شرمنده ام
اینجا TCCRO=0X04 گذاشتی ولی تو مبحث ساعت دیجیتال با تایمر ۰X02 گذاشتی
مگه هردوش تقسیم فرکانسیه ۲۵۶نیست؟؟
یه سوال دیگه
من با کدویزارد پروژه انجام میدم
اون جاهایی ک گفتی کلاک از هفت باید شروع شه رو خودش مینوبسه یا خودم باید تغییر بدم
TCCROرو هم مینویسه؟؟
نویسنده این مطلب
نه داش شرمندمون نکن دیگه
این حرفا چیه
کجا TCCR0=0x02; گزاشتم؟ تو این مطلب من هرجا رو دیدم همش TCCR0=0x04 بود
اگه این مطلب مد نظرت نبود، لینک مطلب مد نظرت رو بده.
از کدویزارد استفاده نکن اصلا !!! از ما گفتن.
اینم تست کن، یادم نیست، خیلی وقته از کدویزارد استفاده نکردم – خودت یه بار تست کنی آمار میاد دستت
مهمان
اینجا چرا تو پروژهایی ک انجام دادی
تو کدای وقفه TCNT0=7 گذاشتی ولی تو کد تایمر کانتر TCNT=6 گذاشتی؟؟
مگه این کد نمیگه ک شمارش کلاک از هفت باید شروع بشه؟؟؟
اینو دیگه میشه جواب بدی لطفا
نویسنده این مطلب
اشتباه چاپی شده
مهمان
ببخشید میشه از تایمر صفر هم به عنوان تایمر و هم به عنوان کانتر استفاده کرد؟
نویسنده این مطلب
تا جایی که یادم میاد نه.
از بقیه تایمرها استفاده کن.
مهمان
سلام خیلی ممنون از مطالب مفیدتون.من میخام یک سری پالس توی یه زمان مشخص با تایمرو کانتر میکرو اندازه بگیرم.برنامه رو نوشتم و پالسا رو هم میشماره.اماا اینکه چطوری بگم توی مثلا یک ثانیه چند تا پالس شمرده رو میشه توضیح بدین باید چیکار کنم؟
ممنون
نویسنده این مطلب
سلام
میکرو چند تا تایمر داره – از یکیش برا بحث محاسبه زمان استفاده کنید.
یه شمارنده تعریف کیند برا تعداد پالس ها و…
مهمان
میشه راهنمایی کنین چطوری باید بنویسم؟من تازه کارم
نویسنده این مطلب
گفتم دیگه
الان کدش رو منظورتونه بنویسم یا چیز دیگه ای؟
مهمان
نه اخه من تایمر یک رو مثل تایمر ۰ فعال کردم ولی نمیشماره.میخاستم ببینم فرقشون توی کد در چیه؟
نویسنده این مطلب
والا نمیدونم دقیقا مشکلتون چیه که حل کنم، کلی میگید مشکل رو
مهمان
سلام
پروژه اول خط۳۰ چرا مقدار اولیه رو ۶ دادین مگ بالا یه بار مقدار اولیه ۷ رو ندادین الان کلا خط ۲۹ و ۳۰ رو چرا دوباره باید بنویسیم ؟اونارو که قبلا یه بار بالاتر نوشتیم, لطفا توضیح بدین.
با تشکر
نویسنده این مطلب
سلام-خط ۳۰ باید بشه ۷، ۶ درست نیست
این جا تنظیم میکنیم در داخل وقفه هم باید تنظیم کنیم – چون وقتی شمارنده سرریز میکنه وقفه رخ میده و ما باید دوباره مبدا شروع رو ۷ تنظیم کنیم و وگرنه از ۰ شروع به شمارش میکنه.
و ۷ تا ۲۵۵ میشه ۲۴۹ تا کلاک که ۱۲۵ تا از این ۲۴۹ تا رو ما نیاز داریم لذا تو تابع وقفه شه شمارنده I تعریف کردیم که در هر بار رخ دادن وقفه مقدارش یه واحد زیاد میشه و در برنامه هم بررسی میکنیم هر موقع مقدار I به ۱۲۵ رسید کارمون رو انجام میدیم و شمارنده رو ۰ میکنیم بعدش
مهمان
سلام ببخشید من اموزش ها رو از جلسه یک میخوام ولی توی سایتتون نمیبینم درواقع بهم ریختس چی کار کنم؟
نویسنده این مطلب
سلام
منو بالای سایت.
https://dmf313.ir/electronics/learning-avr/training-avr/
مهمان
داش دمت گرم
مهمان
سلام. اگه همین پروژه را با کریستال خارجی هم توضیح بدی بسیار ممنون می شوم.
نویسنده این مطلب
سلام-مطلب انواع فرکانش کاری میکرو تو سایت هستش – سری مطالب آموزش جامع avr
مهمان
سلام داداش دمت گرم مطالب سایتت خیلی خوبه ممنون
من یه مشکلی برام پیش اومده میخواستم اگه میشه کمک کنی
اگه میشه ایمیلتو برام بفرست تا مطرح کنم
ممنون
مهمان
اکثر مطالبت خوندم خیلی عالی بودن. دمت گررررررررررررررم مشتی
مهمان
سلام ب نظرم تعداد کلاک لازم میشه 250تا کلاک نه 249 چون تایمر از 0 شروع ب شمارش میکنه تا به 249 برسه در نتیجه باید کلا 250تا کلاک بزنه تا 8ms ساخته بشه و در نتیجه باید مقدار اولیه رو 6 بذاریم چون تایمر در اصل 256 تا عدد میشمره .درسته؟؟؟آخه تو برنامه یه جا 7 گذاشتین و یه جا 6 .
مهمان
سلام…
یه پروژه ی ساعت با atmega8 دارم، میشه کمکم کنید…
چطور می تونم هر دقیقه یکبار وقفه ایجاد کنم؟
ساعت فقط شامل ساعت و دقیقه هستش…
نویسنده این مطلب
سلام
ریجستر های مگا8 که تو دیتاشیتش هستش
از تایمر باید استفاده کنید.
مهمان
با سلام و خسته نباشید ویژه
خیلی ممنونم از مطالبتون
آقا مهدی 2 تا سوال (خواهش میکنم راهنمایی کنید)
زمان مورد نیاز ما مگه 20میلی ثانیه نیستش ؟ پس تو فرمول 8 میلی ثانیه ازکجا اومده؟ (واقعا گیج شدم)
اگه ممکنه در مورد شرطی هم که تو قسمت حلقه گذاشتید یه توضیحی بدید؟ ( (تو کد به میکرو میگیم هر موقع تایمر/کانتر ۱۲۵ بار) , و برای i مقدار رو برابر ۱۰۰ گذاشتید در بخش شرط)
نویسنده این مطلب
سلام
خب مثل این که م اشتباه کردم – معضرت میخوام
الان مطلب رو تصحیح میکنم.
مهمان
سلام ممنون از این مطلبتون یه سوال دارم با اجازه میپرسم
این خط عمودی تو مثال زیر دقیقا نقشش چیه چون بدون اون هم دستور به همون شکل اجرا میشه
TCCR0 |=0x05;
ممنون میشم راهنمایی کنید (:
نویسنده این مطلب
سلام
کد زیر
TCCR0 |=0x05;
برابر است با کد زیر
TCCR0 = TCCR0 | 0x05;
و حالا در کد بالا | یعنی اور بیتی –
در مرود اند و اور بیتی بسرچی مطلب تو نت کم نیستش
مهمان
سلام
آقا مهدی اگه بیایم دقیقا 1 ثانیه درست کنیم ممکنه که بعد یه مدت شمردن cpu خسته شه و ریتمش کند شه و عقب بیوفته؟
برا پیشگیری میتونیم بیایم و یه کم کمتر بگیریم تاخیرو مثلا998 میلی ثانیه؟
نویسنده این مطلب
سلام
تنها وقتی میکرو هنگ بکنه ممکنه این اتفاق رخ بده و میکرو کارهای پیش بینی نشده ای انجام بده
و برا بحث هنگ کردن میکرو هم راه حل وجود داره، و اونم بحث واچ داگ هستش
مهمان
یبار کامل توضیح میدین چرا ۱۲۵ گرفتید (تو کد به میکرو میگم هر موقع تایمر/کانتر ۱۲۵ بار) , و برای iمقدار رو برابر ۱۰۰ گذاشتید در بخش شرط- در ضمن بابت سایتتون هم خیلی ممنونم
مهمان
خیلی عالییییییییی .
مهمان
نباید پایه 40 39 38 تو کد مقدار بدی؟پروتیوس اصلا معتبر نیست.فقط پروژه LED چشمک زن درست کار میکنه.اگه میخای یاد بدی حداقل مثه استادای بی سواد ایرانی نباش
نویسنده این مطلب
سلام
این ۳ تا پایه که برا adc-porta هستن…من با adc-porta کار ندارم که….با مقدار دهیشون جیکار دارم….
بله پروتئوس زیاد معتبر نیست چون بعضی وقت ها درست جواب نمیده…..ولی تا وقتی که درست جواب مید چرا استفاده نکنم.
در ضمن پروژه ها هر دوتاشون کار میکنن که!!!…..اون یکی مشکل چیه که میگی درست کار نمیده؟؟؟
داداش ما بیسواد و شما با سواد قبوله….
ما که ادعایی نکردیم تا حالا
ما چیزایی که یاد میگیریم و بلد هستیم (به نظر خودمون) رو میزاریم تو سایت….پولی هم کار نمیکنیم لذا هیچ بنی بشری حق نداره بهم توهین کنه…..انقاد و پیششنهاد یه بحثیه و توهین یه چیز دیگه
مهمان
مهندس میشه لطفا به صورت ساده I2C با کد ویزارد رو یاد بدید؟
مثل پروژه های SPI و… که آموزش دادید.
TWI , 1wire رو توضیح بدید.
نویسنده این مطلب
چشم…
تو نظر قبلی تون جواب دادم که…
مهمان
داداش با سون سگمنت هم پروژه میبندی؟
نویسنده این مطلب
https://dmf313.ir/electronics/avr-project/7segment/
مهمان
نظر ندی یه وقت…گناه میشه