PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : برنامه مجله



zavar
27-06-2010, 20:34
با سلام من این برنامه را از توی مجله روی میکرو ریختم اما اصلا کلیدا نمیخونه کسی میتونه کمک کنه ممنون
#include "AT91SAM7X256.h"
#include "lib_AT91SAM7X256.h"
int main (){
AT91F_PIO_CfgOutput( AT91C_BASE_PIOB, AT91C_PIO_PB0);
( AT91F_PIO_GetInput( AT91C_BASE_PIOB) , 0x02) ;
AT91F_PIO_CfgPullup( AT91C_BASE_PIOB, AT91C_PIO_PB1);
AT91F_PIO_SetOutput ( AT91C_BASE_PIOB, AT91C_PIO_PB0);
if (( AT91C_PIO_PB1) == 0)
{
AT91F_PIO_ClearOutput ( AT91C_BASE_PIOB, 0x01);
} }

Division
27-06-2010, 23:14
شما بايد قبل از تعريف كردن پورت مورد نظرتون به صورت ورودي يا خروجي كلاك PIO‌ رو فعالش كنيد دستورشم اينه :



AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 1 << AT91C_ID_PIOA);


و اينم اشاره كنم كه تو مجله اين نكته اشاره شده كه اين برنامه رو تو محيط كيل شبيه سازي كنيد نه روي برد آموزشي .
تو محيط كامپايلر KEIL نوشتن يا ننوشتن اين دستور هيچ تاثيري نداره و پروژتون عملا تو شبيه سازي جواب ميده .

zavar
28-06-2010, 09:27
با سلام میخواستم بدونم آیا دستور ساده تری برای تعریف پورتها نیست؟مثلا مثل avr؟

zavar
28-06-2010, 10:10
با این دستورم نمیشه بازم کار نکرد اگر میشه درباره دستور بالا یه توضیح بدید من کلید را به pb29وled را بهpb28وصل کردم در ضمن تو دستور شما هم pioaراpiobنوشتم در ضمن من مقاومت وخازن pll را گذاشتم اگر بخوام از فرکانسهای بالا مثلا 50 مگ استفاده کنم باید چی کار کنم ؟ممنون

Division
28-06-2010, 16:22
اين دستور كلاك پورت مشخصي رو كه شما بش ميديد رو فعال مي كنه ، بدون فعال كردن كلاك پورت مورد نظر ، خب معلومه كه اين پورت اصلاً كار نمي كنه كه ديگه :roll:.
شما تصور كن كه بايد قبل از اينكه ميكروت رو راه اندازي كني بايد يه كانفيگي رو همين ابتدا انجام بدي كه يكيش اين دستوره .


و اما در مورد اينكه چرا كار نكرد بايد بگم، نرم افزار شما به نظره من مشكلي نداره و تو شبيه سازي هم جواب ميده و احتمال بعدي مطمئنا بررسي سخت افزاره .
شما سورس كد هاي ديگه رو هم رو ميكرو تست كن ببينين آيا اصلا ميكروي شما سالمه ؟ آيا اصلا ميكروتون رو به درستي مي تونيد پروگرمش كنيد؟ و ...


در ضمن من مقاومت وخازن pll را گذاشتم

من دقيقاً متوجه منظوره شما نشدم، چون pll مقاومت و خازن نمي خواد كه 8O

براي افزايش فركانس كاري ميكرو شما بايد pll‌ ميكروي مورد نظرتون رو كانفيگش كنيد روي اون فركانسي كه مد نظره خودتونه . و اگه از نرم افزار keil استفاده مي كنيد مي تونيد از سر برگ configuratuion wizard تو فايل Startup با مقدار دهي ضريب تقسيم و ضريب ضرب فركانس ورودي به pll ، فركانس ورودي رو چند برابرش كنيد .


با سلام میخواستم بدونم آیا دستور ساده تری برای تعریف پورتها نیست؟مثلا مثل avr؟

براي اين كامپايلر نه فقط اين دستوره ولي مي توني تغييرش بدي كه به نظره من يه جور اضافه كاريه .

zavar
28-06-2010, 17:07
من باkeil 4 کار میکنم اما سر برگ configuratuion wizard را پیدا نمیکنم دقیقا کجاست؟در ضمن میکروم سالمه برنامه های دیگه را اجرا میکنه فقط کلیدا نمیخونه ممنونم

Division
28-06-2010, 20:34
در تصوير پايين مشخص كردم كه configuratuion wizard كجاست .


You can see links before reply (You can see links before reply)

درباره كليدا بايد بگم كه ، تست كنيد ببنيد كه آيا حالت pull up روشون اعمال شده يا نه ؟
و يه چيزه ديگه اينكه، يه پايه كليدا بايد به زمين وصل بشه .

zavar
28-06-2010, 21:01
از پاسختون ممنونم من از کریستال 12 مگ استفاده کردم با این مقادیر pllیعنی میکروی من داره با کلاک 60مگ کار میکنه من از کتابخانه delay استفاده میکنم اما زمانش بیشتر از چیزیه که میخوام دلیلش بخاطر کریستاله؟در ضمن من 6 کانال pwm میخوام از کدام شماره استفاده کنم؟ممنونم

Division
28-06-2010, 22:29
من از کریستال 12 مگ استفاده کردم با این مقادیر pllیعنی میکروی من داره با کلاک 60مگ کار میکنه من از کتابخانه delay استفاده میکنم اما زمانش بیشتر از چیزیه که میخوام دلیلش بخاطر کریستاله؟
نحوه محاسبه فركانس كاري ميكرو اين جوريا نيست كه هر فركانسي رو كه از pll خارج ميشه به عنوان فركانس كاري ميكرو در نظر گرفته بشه بايد از يه سري تقسيم كننده هايي عبور كنه كه مي تونيد با مطالعه ديتا شيت قطعه مورد نظر اطلاعات كامل رو بدست بياريد .


در ضمن من 6 کانال pwm میخوام از کدام شماره استفاده کنم؟

تو هسته هاي ARM7TDMI فقط پلتفرم هاي شركت NXP‌ داراي 6 تا ماژول PWM هستن و تو پلتفرم هاي ATMEL كلاً 4 تا PWM وجود داره .

تراشه پيشنهادي من LPC2378 هستش كه تو مجله شماره 9 و 10 دربارش بحث كرديم و در مجله شماره بعدي ما كل مطالب مربوط به راه اندازي تايمرها و ماژول هاي PWM رو مياريم كه مي تونيد ازشون استفاده كنيد .

zavar
28-06-2010, 23:08
این تقسیم کنندهها توی همون قسمت که pllرا تنظیم میکنیم هست؟یا جای ذیگه باید تنظیم بشه؟میکرو میتونه با همون فرکانس pll کار کنه؟یعنی تقسیم نشه

Division
28-06-2010, 23:41
ین تقسیم کنندهها توی همون قسمت که pllرا تنظیم میکنیم هست؟

نخير، بعد از توليد فركانس جديد تو خروجي pll يه سري تقسيم كننده هايي بيرون pll تعبيه شدن كه فركانس مورد نياز رو براي واحد هاي Core , Usb , Peripherals تنظيم مي كنن .


میکرو میتونه با همون فرکانس pll کار کنه؟یعنی تقسیم نشه

بازم در جواب سواله شما بايد بگم كه نه اين امكان وجور نداره چون مهمترين فاكتوري كه بر اساس اون سرعت عملكرد يه ميكروكنترلر رو بررسي مي كنيم سرعت مغز پردازنده سيستمه كه براي سري at91sam7 نهايتش 55مگاهرتزه .

تو سري مجلاتي كه از طرف تيم تحقياتي آرم ايران ميكرو منتشر شده، خيلي روي اين مباحث بحث كرديم، توصيه مي كنم با دقت مطالعه شون كنيد و از ديتا شيت خود تراشه مورد نظرتون هم استفاده مفيد رو ببرين :wink:

zavar
29-06-2010, 10:31
من از کریستال 12 مگ استفاده کردم اما وقتی از کتابخانه delay استفاده میکنم زمانش بیشتر از چیزیه که میخوام دلیلش بخاطر کریستاله؟مثلا delay 1 ثانیه 8 ثانیه طول میکشه باید چی کار کنم؟من کتابخانه delay را دیدم
void delay_s(unsigned long c){
do{
unsigned long f=0;
x=crystal/5;
for (f=0;f<x;f++);
y++;
} while(y<c);
y=0;
}
چرا تقسیم به 5 شده کریستال؟من اول برنامه کریستال را 12مگ کردم اما بازم زمانش درست نشد

Division
29-06-2010, 14:14
شما دقيقا بگبد از كدوم تراشه استفاده مي كنيد تا من توضيحات كامل رو رائه كنم . :wink:

zavar
29-06-2010, 16:07
از at91sam7x256 ممنونم از راهنماییتون

Division
01-07-2010, 21:16
ببخشيد كه جواب سواله شما رو با تاخير ميدم چون به شدت درگير امتحانات هستم:(

من برنامه شما و كتابخونه تاخير رو بررسي كردم و به اين نتيجه رسيدم كه اين كتابخونه كه نمي دونم كي اونو نوشتهii998) مشكل داره و اصلا استاندارد نيست به دليل اينكه پالس هاي كلاك رو درست حساب نكرده و محاسبه پريود زمانيش مشكل داره تازشم اين كتابخونه برا كريستال 18432000 نوشته شده بود كه با خوده اين كريستالم باز محاسباتش درست از آب در نمي اومد 8O

من تابع تاخير رو بيرون كتابخونه از اول شبيه سازي كردم و تونستم تاخير دقيقا يه ثانيه اي درست كنم، سورس كد تاخير و كل برنامه رو براتون ميزارم خودتون تست كنيد انشاءالله مشكل حل ميشه .


#include <AT91SAM7X256.h>
#include <lib_AT91SAM7X256.h>
#define crystal 12000000


void delay_s(unsigned long c)
{
unsigned long x,y=0,f;
x=crystal/5;
do
{
for(f=0;f<x;f++);
y++;
}while(y<c);
}


int main(void)
{
AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 1 << AT91C_ID_PIOA);
AT91F_PIO_CfgOutput( AT91C_BASE_PIOB, AT91C_PIO_PB0);
( AT91F_PIO_GetInput( AT91C_BASE_PIOB) , 0x02) ;
AT91F_PIO_CfgPullup( AT91C_BASE_PIOB, AT91C_PIO_PB1);
AT91F_PIO_SetOutput ( AT91C_BASE_PIOB, AT91C_PIO_PB0);

while (1)
{
AT91F_PIO_ClearOutput ( AT91C_BASE_PIOB, 0x01);
delay_s(1);
AT91F_PIO_SetOutput ( AT91C_BASE_PIOB, 0x01);
delay_s(1);
};
}


تو برنامه بالا كافيه فقط زمان رو بر حسب ثانيه به تابع delay_s بدين تا براتون تاخير x ثانيه اي دقيق توليد كنه ولي قبلش حتما بايد كريستالتون رو تو خط اول برنامه كه من 12 مگ تعريف كردم، تعريف كنيد .

من يه پيشنهاد دارم اونم اينكه به جاي اينكه از اين نوع كتابخونه ها استفاده كني كه اكثرا غيره اصولي نوشته ميشه و بيشتر تو پروژه هاي شخصي جواب ميدن، خودتون از تعريف تابع تو محيط برنامه نويسي خودتون استفاده كنيد اين جوري همه سورس دسته خودتونه .

موفق باشيد :wink:

zavar
01-07-2010, 22:22
از راهنمایی شما واقعا ممنونم چرا تقسیم به 5 شده کریستال؟من از کتابخانه delayکهبا مجله ها در همین سایت بود استفاده کردم به نظر شما مشکل داشتند؟

Division
01-07-2010, 23:08
اون كتابخونه اي كه درباره ايجاد تاخير اره يكم مشكل داشت كه بايد اصلاح بشه اگه اصلاحش كنم ميزارم تا همه ازش اسفاده كنن .

درباره علت تقسيم فركانس كاري ميكرو به عدد 5 ،بايد بگم كه براي هر سيكل شمارشي كه كانتر توي برنامه فرعي انجام ميده ، 5 تا كلاك پالس زمان لازمه و به همين دليل فركانس اسيلاتور رو به عدد ثابت 5 هميشه تقسيم مي كنيم . :wink:

خيلي سادس خودتم ميتوني محاسبه كني به اينصورت كه شما اگه اسيلاتورت 12 مگاهرتزي باشه فركانسش رو تقسيم بر 5 كن به اون دليلي كه توضيح دادم كه ميشه حدود 2.4 مگاهرتز الان براي محاسبه مدت زمان يه پالس تو تابع فرعي بايد فركانس كاري رو به زمان كاري تبديل كني كه اونم ميشه ريورسه فركانسه كاري كه ميشه 0.41 ميكرو ثانيه .
يعني براي يه شمارش ميكروي شما اين مدت زمان رو لازم داره الان يه تناسب ببند به اينصورت كه اگه يه ثانيه بخواي سر ميكرو رو گرم كني چند شمارش نياز داري كه ميشه 410000 شمارش .

ما در تابع فرعي اين كار رو پارامتريك كرديم همين :0013:

zavar
02-07-2010, 11:45
این 5 تا کلاک پالس بخاطر تعداد دستوراته؟من تفاوت برنامه شما را با برنامه مجله پیدا نکردم میشه یه توضیح بدید که ایراد اون برنامه کجا بود؟مگه میکرو با کلاک pll کار نمیکنه؟پس چرا زمان را با مقدار کریستال محاسبه میکنیم؟در ضمن کتابخانه lcd هم خیلی درست کار نمیکنه دوباره از شما متشکرم

Division
02-07-2010, 12:04
این 5 تا کلاک پالس بخاطر تعداد دستوراته؟

دو تاش براي واكشي دستور از حافظه فلشه و 3 تاش هم براي اجراي يه دوره زماني تو روتين حلقه شمارنده هستش.


من تفاوت برنامه شما را با برنامه مجله پیدا نکردم میشه یه توضیح بدید که ایراد اون برنامه کجا بود؟

بارزترين تفاوت ديناميك نبودن برنامه توي هدر هستش به اين صورت كه برنامه هدر براي كلاك ثابت 18432000 تعريف شده ولي تابع فرعي كه من تو متن برنامه تعريف كردم براي حالت ديناميك تعريف شده يعني مي تونيد مستقيما مقدار فركانس كاري رو وارد كنيد .


مگه میکرو با کلاک pll کار نمیکنه؟
نه PLL به صورت ديفالت خاموشه اينو خودتون مي تونيد از ويزارد چك كنيد .


چرا زمان را با مقدار کریستال محاسبه میکنیم؟
دوست عزيز مقدار كريستال براي ميكرو يه ملاكي از تعريف زمانه يعني ميكرو يه نوسان اسيلاتورش رو به عنوان يه واحد زماني تصور مي كنه و اين مسئله براي تمامي پردازنده ها صادقه .
شما فكر كن در واقع اسيلاتور ساعت مچي هر پردازنده اي به شمار مياد .


در ضمن کتابخانه lcd هم خیلی درست کار نمیکنه
باشه اينم بايد تست كنم البته فعلاً درگيره امتحانات هستم :wink: