برگزیده های پرشین تولز

چگونه می تونم از کریستال خارجی برای میکرو (AVR) استفاده کنم ؟

sheida1365

کاربر تازه وارد
تاریخ عضویت
24 جولای 2007
نوشته‌ها
29
لایک‌ها
0
سن
37
چطور می تونم به یک میکرو AVR بفهمونم که از منبع کلاک داخلی استفاده نکنه و از کریستال خارجی استفاده کنه !
یه جا خوندم که باید یک سری از فیوز ها رو ست کنم ، ولی چطور باید این کار رو انجام بدم !؟
یه سوال دیگه : من نمی تونم توی ال سی دی (با AVR) چیزی بنویسم ، من از زبون C استفاده می کنم ، ولی توی init کردن LCD مشکل داره ، مطمئن هستم که سیمها را درست وصل کردم (از روش چهار سیم استفاده می کنم) در ضمن الان میکرو من داره از منبع کلاک داخلی یک مگا هرتز استفاده میکنه !
خواهشا اگه کسی می تونه منو کمک کنه ، سریع این کار رو انجام بده ،برای تحویل پروژه وقت زیادی ندارم !
ممنون می شم
 

Electronics Art

کاربر فعال برق و الکترونیک
کاربر فعال
تاریخ عضویت
9 جولای 2005
نوشته‌ها
1,374
لایک‌ها
18
احتمالاً LCD رو به پورت C میکروکنترلر AVR وصل نکردین ؟
اگه به پورت C وصل کردید این پورت در حالت عادی 4 تا از پین هاش بصورت I/O کار نمی کنند
باید فیوز بیت JTAG رو غیر فعال کنید(بصورت 1 پروگرم کنید) تا بتونید از پورت C بصورت I/O استفاده کنید

در مورد کریستال خارجی هم باید ابتدا فیوز بیت CKOPT رو غیر فعال کنید یعنی بصورت 1 پروگرم کنید
بعدش فیوز بیت های CKSEL0 و CKSEL1 و CKSEL2 و CKSEL3 رو بصورت 1110 پروگرم کنید
(بیت اول فعال و سه بیت بعدی غیر فعال)
تا کریستال خارجی با رنج فرکانسی 3 تا 8 مگاهرتز انتخاب شود (با خازن های بالانس 12 تا 22 پیکو فاراد)

فیوز بیت ها رو هم با پروگرمر میتونید پروگرم کنید
در فیوز بیت ها صفر شدن به معنی فعال شدن هستش و یک شدن به معنی غیر فعال شدن هستش
مثلاً اگه از پروگرمر سریال STK200/300 در کامپایلر کدویژن استفاده کنید
در قسمت فیوز بیت ها اگر تیک هر فیوز بیت را بزنید اون فیوز بیت صفر یا فعال میشه
و اگه تیکی نزنید اون فیوز بیت بصورت یک یا غیر فعال باقی میمونه
 

reza_hajizade

کاربر تازه وارد
تاریخ عضویت
24 آگوست 2007
نوشته‌ها
7
لایک‌ها
0
با سلام
شما براي اين كار طبق گفته دوستمون مي توني قسمت پروگرم كردن فايل هاي كد حافظه flash و eeprom اقدام به رايت كردن وضعيت فيوز بيت ها بكني
با توجه به اين كه شما مي خواي وضعيت قسمت نوسان ساز خارجي رو به صورت كريستال خارجي ( فركانس بالا ) در بياري بايد فيوز هاي CKSEL رو تغيير بدي اگه رنج فركانسي شما بالاي 8 مگاهرتز بايد تيك Ckopt رو بزني

با ساده ترين بيان
شما همه تيك ها فيوز بيت ها رو برداريد يعني همه 1 و فقط تيك Ckopt رو بزنيد اين باعث ميشه شما كريستال خارجي با رنج فركانس بالا رو انتخاب بكنيد در ضمن بيشترين زمان ممكنه براي بوت شدن ميكرو بعد از reset و يا بعد از حالت هائي كه ممكنه كلاك ميكرو رو متوقف بكنيد ؛ بشه

فقط موقع استفاده از پروگرمر stk200/300 دقت كنيد كه بايد همراه ميكرو همون شبكه نوسان سازي رو كه روي بردتون پيدا كرديد رو استفاده بكنيد
ضمنا در حالت استفاده از اين نوع روش برنامه ريزي isp نبايد پايه reset رو io تعريف بكنيد

اگه خداي نكرده :blink: زديد و فيوز بيت ها رو اشتباه برنامه ريزي كرديد مي تونيد با توجه به نوع تنظيم فيوز بيت بخش نوسان ساز ( اگه يادتون مونده باشه .... توصيه مي كنم وضعيت ها رو روي كاغد بنويسيد ) و بستن همون نوع نوسان ساز دوباره فيوز ها رو تصحيح بكنيد

و يا در غير اين صورت مي تونيد از مدار jtagice استفاده بكنيد و فيوزهاتون رو درست بكنيد
در مورد lcd دقت كنيد كه اگه از نوع اتصال نيبل يا همون 4 سيمه استفاده مي كنيد سرعت كار ال سي دي در زمان ارسال ديتا نصف ميشه ( به خاطر اينكه ديتاي بايتي رو بصورت بسته هاي شكسته شده 4 بيتي ارسال مي كنه )

حتما پايه هاي آزاد رو با مقاومت ها 10 كيلو اهم به زمين وصل بكنيد

ضمنا حتما حتما اگه از رگلاتور 7805 استفاده مي كنيد حتما دقت كنيد كه اين رگلاتور به ازاري ورودي بيش از 2 ولت از خروجي عمل رگلاسيون رو انجام ميده
اين تذكر به خاطر مشكلات جانبي بود كه در خلال درست نبودن منبع تغذيه ميكرو رخ بده رو دادم

موفق باشي :)
 

pirmard

Registered User
تاریخ عضویت
21 آگوست 2007
نوشته‌ها
841
لایک‌ها
5
شما همه تيك ها فيوز بيت ها رو برداريد يعني همه 1 و فقط تيك Ckopt رو بزنيد اين باعث ميشه شما كريستال خارجي با رنج فركانس بالا رو انتخاب بكنيد .

توی کدویژن ؟ برعکس نگفتین برای کریستال خارجی ؟
:wacko:
 

reza_hajizade

کاربر تازه وارد
تاریخ عضویت
24 آگوست 2007
نوشته‌ها
7
لایک‌ها
0
توی کدویژن ؟ برعکس نگفتین برای کریستال خارجی ؟
:wacko:

خدائي نمي دونم چرا قضيه اين فيوز بيت رو اين جوري كردن
وقتي توي كد ويژن تيك زده ميشه يعني اون رو فعال مي كنيد توي قسمت فيوز بيت ها فعال شده يعني صفر
حالا وقتي مي خواي از نوسان ساز كريستالي خارجي استفاده مي كنيد بايد توي وضعيت هاي مخصوص فيوز هاي مربوطه رو تنظيم بكنيد
موفق باشيد :)
 

reza_hajizade

کاربر تازه وارد
تاریخ عضویت
24 آگوست 2007
نوشته‌ها
7
لایک‌ها
0
من همين الان ميكرو مگاه 16 رو با استفاده از پروگرمر stk200/300 به همراه نوسان ساز كريستالي تست كردم
موقع read كردن فيوز بيت ها همون بود كه عرض كردم موقع رايت كردن هم دوباره امتحان كردم
باز تست كردم ميكرو مشكلي نداشت
احتمالا اگه من اشتباه مي كنم معجزه اي ........... :blink: بي خيال
موفق باشيد
 

sheida1365

کاربر تازه وارد
تاریخ عضویت
24 جولای 2007
نوشته‌ها
29
لایک‌ها
0
سن
37
سلام دوستان
از راهنمایی هاتون ممنونم
بالاخره فهمیدم چطور باید فیوز ها رو ست کنم (البته فکر کنم)
یک نمونه برنامه کوچیک نوشتم و تست کردم و درست کار کرد ولی ..
ولی بعد از اینکه خواستم میکرو را برای برنامه اصلی برنامه ریزی کنم دیگه نشد و میکرو خطا داد .
Cheep Error: Address: 2H Buffer:35H Cheep:21H
این کار رو با سه تا آی سی انجام دادم و برای هرسه همین مشکل پیش اومد !
می خواستم ببینم مشکل از چیه ؟ آی سی (سوخته) ، پروگرامر ، یا من ، یا هرسه !؟
ممنون میشم
راستی آیا فیوزها را درست ست کردم (من از یک کریستال 4 مگا هرتز استفاده می کنم) ؟
 

فایل های ضمیمه

  • untitled.JPG
    untitled.JPG
    47.6 KB · نمایش ها: 72
  • untitled1.JPG
    untitled1.JPG
    49.2 KB · نمایش ها: 69

reza_hajizade

کاربر تازه وارد
تاریخ عضویت
24 آگوست 2007
نوشته‌ها
7
لایک‌ها
0
با سلام
چند تا سوال
1- شما اصلا در همون بار اول موفق به انجام عمل پروگرم شديد؟؟؟
اگه اره
پس اگه بار دوم موفق به اين كار نشديد دليلش اينه كه قبل از اين كار بايد حافطه فلش ميكرو رو ERASE مي كرديد

2- شما چون از فركانس پائين 8 مگ استفاده كردي نيازي نداري كه CKOPT رو تيك بزني مگه اينكه بخواهي با فركانس هاي بالاي 8 مگ كار بكني

3- CLKSEL0....3 هم درسته مشكلي نداره ضمنا بهتر بود زمان بوت شدن ميكرو در حالات مختلف براي ميكرو هم بستگي به SUT0.1 داره كه اونم اينجا مسله ساز نيست

4- ايا پروگرمرتون رو از بازار خريد ؟؟؟؟ يا خودتون ساختيد
اگه خودتون ساختيد بهتره يه كابل نر به ماده بسازيد تا وقتي اون رو به LPT كيس مي زنيد ( سر نري ) سر ماده گي كه دستونه مبين همون پشت كيس باشه
البته به شماره هاي اتصال و ترتيب اونا كاملا دقت كنيد
ضمنا كابل نبايد بيش تر از نيم متر باشه ( چون بدون بافر مي سازيد )

روي برد برد هم يه 7805 رو كه خروجي اون با يه زنر 5 ولتي تثبت شده ( براي ولتاژهاي 5 تا 7 ولت ورودي كه ممكنه به ورودي بديد و دقت نكنيد كه اون موقع رگلاتور اتصال كوتاه ميشه وبايد ورودي اين رگلاتور بيش تر از 7 باشه تا رگلاتور درست عمل بكنه ) و اون رو به ولتاژ VCC و AVCC وصل بكني GND رو به يكي وصل بكنيد حله

5- توصيه مي كنيم براي پروگرم كردن در شروع از بسكام استفاده بكنيد يا PONYPROG
نكته كنكوري : وقتي با پوني پروگ استفاده مي كنيد همه تيك ها رو بر دارديد حتي BOOTSZ چون از حافظه بوت استفاده نمي كنيد حتي در اين حالت 256 بايت از حافظه اتون بر باد رفته است ( اگه دست يادم مونده باشه )
اره همه تيك رو برداريد حله ( واسه فركانس بالاي 8 اون تيك ..... رو بزنيد )

6- اگه باز نشد باز به قسمت BIOSE بريد و اونجا توي قسمت تنظيمات IO هاتون حتما نوع استاندارد پورت LPT رو به نوع استاندارد يا همون SPP تغيير بديد ضمنا بايد آدرس پورت روي روي ( معمولا ) LPT1 بگذاريذ
البته اين مورد ممكنه نباشه ولي خوب گفتنش ضرري نداره

7- خدائي ديگه نمي دونم :blush:

موفق باشيد :)
 

sheida1365

کاربر تازه وارد
تاریخ عضویت
24 جولای 2007
نوشته‌ها
29
لایک‌ها
0
سن
37
سلام دوستان
لز راهنمايي هاي شما ممنونم
مشكل من با ال سي دي و فيوز بيتها حل شد
و الان با ال ام 35 مشكل دارم !
من براي خواندن دماي محيط قطعه كد روبرو را در برنامه نوشته ام ، ولي جواب دلخواه را به من نمي دهد !
اين برنامه را عينا مثل كتاب نوشته ام واز بعضي جاهاي اون رو از جمله tf=(tf*500/1023); اصلا سر در نمي آورم !!!
لطفا من رو در حل اين مشكل هم ياري كنيد
ADMUX=ADC_VREF_TYPE;
ADCSRA=0x85;


tf=read_adc(0);
tf=(tf*500/1023);


ftoa(tf,0,str);
lcd_puts(str);
ممنون
 

ErfanEa

کاربر فعال برق و الکترونیک
کاربر فعال
تاریخ عضویت
9 می 2005
نوشته‌ها
811
لایک‌ها
10
سن
36
محل سکونت
Lost Heaven
بهتره که شماتیک مدارت هم بزاری .
و منظورتون از " ولي جواب دلخواه را به من نمي دهد " چیه ؟؟
یعنی چی نشون میده ؟؟
 

sheida1365

کاربر تازه وارد
تاریخ عضویت
24 جولای 2007
نوشته‌ها
29
لایک‌ها
0
سن
37
بهتره که شماتیک مدارت هم بزاری .
و منظورتون از " ولي جواب دلخواه را به من نمي دهد " چیه ؟؟
یعنی چی نشون میده ؟؟

سلام
من lm35 رو به پايه 40 ميكرو وصل كردم ، پايه 31 (AGND) را به زمين و 32 (AREF) را با يك خازن 100 نانوفاراد به زمين وصل كردم همچنين AVCC را به 5 ولت وصل كردم .
Lcd را هم به پورت C وصل كردم.
از طريق كد ويزارد پورت PORTA.0 را به صورت ورودي و در حالت Tri-State تنظيم كردم و Adc را نيز فعال كردم ؛
وقتي Volt.Ref را در حالت AREF Pin قرار مي دهم ميكرو هيچ توجهي به محيط نمي كند . با كد فوق مقدار ثابت 500 را نشان مي دهد !
وقتي Volt.Ref را در حالت AVCC Pin قرار مي عدد نشان داده شده توسط ميكرو مرتب نوسان مي كند (در حدود 3 تا 4 واحد) و عددي بين 40 تا 45 را نشان مي دهد !
سوال من اين است كه :
1) دليل جواب ندادن پروژه چيست !؟
2) فرق دو حالت AREF.Pin و AVCC.Pin براي Volt.Ref چيست !؟ (كاربرد آن)
3) فرمول tf=(tf*500/1023) به چه معني است و بر چه اساس ...
 

ErfanEa

کاربر فعال برق و الکترونیک
کاربر فعال
تاریخ عضویت
9 می 2005
نوشته‌ها
811
لایک‌ها
10
سن
36
محل سکونت
Lost Heaven
شما باید به پایه ی Aref ماکزیمم ولتاژی رو وصل کنید که به ADC میدین . در واقع اگه به ADC ولتاژی برابر ولتاژ آنالوگ رفرنس وصل کنید ADC مقدار 1023 رو میخونه ( اگه ADC ده بیتی باشه )
و باید به پایه ی AGND هم مینیمم ولتاژ رو وصل کنید . مثلا برای این مدارات ساده که زمین آنالوگ و دیجیتال یکیه بهتره که این پایه رو به زمین وصل کنید .
آنالوگ VCC هم که وازحه .....
اگه Volt.ref رو روی AREF بزاری یعنی ولتاژ مرجعت همون پایه ی Aref میشه . و اگه روی Avcc بزاری ولتاژ مرجعت همون پایه ی Avcc میشه .

پس شما پایه ی AGND رو به زمین وصل کن ..... پایه ی AVCC و ARef رو به VCC وصل کن .

volt.ref رو هم در حالت ARef قرار بده .


آی سی LM35 به ازای هر درجه 10mV ولتاژ روی خروجی میندازه . برای یه ADC یه 10 بیتی که رنج اندازه گیریش از صفر تا 5 باشه هر 10 میلی ولت میشه 1023/500 واحد ... یعنی هر درجه ی سانتیگراد 2.046 واحد . حالا برای اینکه مقدار خونده شده به درجه سانتیگراد نشون داده بشه باید در معکوس این عدد ضرب بشه یعنی 500/1023 اینجوری عدد خونده شده از ADC به درجه ی سانتیگراد تبدیل میشه .


;) موفق باشید ....
 

sheida1365

کاربر تازه وارد
تاریخ عضویت
24 جولای 2007
نوشته‌ها
29
لایک‌ها
0
سن
37
شما باید به پایه ی Aref ماکزیمم ولتاژی رو وصل کنید که به ADC میدین . در واقع اگه به ADC ولتاژی برابر ولتاژ آنالوگ رفرنس وصل کنید ADC مقدار 1023 رو میخونه ( اگه ADC ده بیتی باشه )
و باید به پایه ی AGND هم مینیمم ولتاژ رو وصل کنید . مثلا برای این مدارات ساده که زمین آنالوگ و دیجیتال یکیه بهتره که این پایه رو به زمین وصل کنید .
آنالوگ VCC هم که وازحه .....
اگه Volt.ref رو روی AREF بزاری یعنی ولتاژ مرجعت همون پایه ی Aref میشه . و اگه روی Avcc بزاری ولتاژ مرجعت همون پایه ی Avcc میشه .

پس شما پایه ی AGND رو به زمین وصل کن ..... پایه ی AVCC و ARef رو به VCC وصل کن .

volt.ref رو هم در حالت ARef قرار بده .


آی سی LM35 به ازای هر درجه 10mV ولتاژ روی خروجی میندازه . برای یه ADC یه 10 بیتی که رنج اندازه گیریش از صفر تا 5 باشه هر 10 میلی ولت میشه 1023/500 واحد ... یعنی هر درجه ی سانتیگراد 2.046 واحد . حالا برای اینکه مقدار خونده شده به درجه سانتیگراد نشون داده بشه باید در معکوس این عدد ضرب بشه یعنی 500/1023 اینجوری عدد خونده شده از ADC به درجه ی سانتیگراد تبدیل میشه .


;) موفق باشید ....

حالا يه سوال !

اگه به ازاي هر درجه تغيير دما ما ده ميلي ولت تغيير ولتاژ داريم ،‌پس براي بازه صفر تا پنج ولت مي نوانيم 500 درجه تغيير دما داشته باشيم ،‌كه اين رنج براي ما وجود ندارد و رنج دماي سنسور در حدود كمتر از منفي 40 تا حدود يه كم بيشتر از 100 است !
خب ما چطور بايد اين رنج را مشص كنيم !
آخه هنوز من نتونستم جواب صحيحي بگيرم !
با اين فرمول قبلي هميشه جوابي در حدود 40 تا 45 با نويز و نوسان زياد دارم !
لطفا من را ياري كنيد (امروز آخرين فرصت تحويل پروژه بود)
ممنون
باي
 

ErfanEa

کاربر فعال برق و الکترونیک
کاربر فعال
تاریخ عضویت
9 می 2005
نوشته‌ها
811
لایک‌ها
10
سن
36
محل سکونت
Lost Heaven
نیازی به مشخص کردن رنج نیست ... سنسور خودش بیشتر از یه حدی ولتاژ نمیده ...
شما ببینید ADC بدون اون فرمول چه عددی رو نشون میده .. و همینطور ولتاژ خروجی سنسور رو با ولتمتر اندازه بگیرید و نتیجه رو بگید
 
بالا