PDA

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



kavehE
11-11-2009, 10:29
سلام . من ميخواستم يك پايه مثل پايه بيستم پورت ((بي)) رو ورودي تعريف كنم و مدام تو حلقه بينهايتم مقدارشو چك كنم تا زماني كه اين كليد صفر باشه يك ديود نوري رو كه به پايه بيستم پورت ((بي))وصله روشن بشه . ضمنا پايه وروديمو با يك مقاومت 10كيلو به 3.3ولت پول آپ كردم .
#include "AT91SAM7X256.H" /* AT91SAMT7X256 definitions */
#include "lib_AT91SAM7X256.h"
void wait(void);
int main (void)
{
AT91F_PIO_CfgOutput(AT91C_BASE_PIOB, AT91C_PIO_PB27);
AT91F_PIO_CfgOutput(AT91C_BASE_PIOB, AT91C_PIO_PB28);
AT91F_PIO_CfgInput(AT91C_BASE_PIOB, AT91C_PIO_PB20);

while(1)
{
AT91F_PIO_ClearOutput(AT91C_BASE_PIOB, AT91C_PIO_PB27);
wait();
AT91F_PIO_SetOutput (AT91C_BASE_PIOB, AT91C_PIO_PB27);
wait();
if ((AT91F_PIO_GetInput(AT91C_BASE_PIOB) &AT91C_PIO_PB20) == 0)
{
AT91F_PIO_SetOutput(AT91C_BASE_PIOB, AT91C_PIO_PB28);
}
else
{
AT91F_PIO_ClearOutput(AT91C_BASE_PIOB, AT91C_PIO_PB28);
}
}
}

void wait (void)
{
unsigned int n;
for (n = 0; n < 4000000; n++);
}

farzadsw
11-11-2009, 11:49
ببخشید ،سوالاتون چی بود؟!
اگه این بوده که چرا کار نمیکنه ، باید این خط رو به اول برنامه اضافه کنید

AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 1 << AT91C_ID_PIOB);
در ضمن خود میکرو پول آپ داخلی داره که بعد از هر بار ریست شدن به طور دیفالت پایه ها هم ورودی تعریف میشن و هم دارای پول آپ . اگه خواستید بین برنامه پول آپ رو عوض کنید از دستور

AT91F_PIO_CfgPullup(AT91C_BASE_PIOB,key);
استفاده کنید (به جای key از اسم پایه استفاده کنید.)

kavir
11-11-2009, 12:16
سلام
خوب شد بحث شد
من خودم شخصا با وردی یک خوندن مشکل دارم لطفا بگید کسی تست کرده تا الان؟
و نمونه برنامه لطفا بذارید

farzadsw
11-11-2009, 13:17
اون برنامه 7seg که براتون فرستادم رو امتحان نکردید؟ تو اون کلید کار میکنه

kavir
11-11-2009, 13:34
اگر ممکنه یه بار دیگه بفرستید و فقط برای ورودی یک بگیره باشه :wink:

kavehE
11-11-2009, 14:31
ممنون.درست شد ولي همونطور كه گفتيد با يك كار نميكنه يعني نميشه پول دونش كرد و با يك كارش انداخت.

farzadsw
11-11-2009, 14:58
برای اینکه موقع 1 کردن کلید کار کنه ، باید پول آپ رو صفر کنید (با همون دستور AT91F_PIO_CfgPullup) اما چون میکرو پول دان داخلی نداره ، مقدار ورودی نسبت به نویز خیلی حساس میشه . مثلا اگه دستتون رو نزدیک برد ببرید وضعیت ورودی تغییر میکنه. برای همین بهتره خودتون یه پول دان براش درست کنید.
*به نظر من بهتره از حالت فعال به ازای کلید صفر استفاده کنید تا با استفاده از پول آپ داخلی ورودی رو بخونید.
این برنامه 7سگمنت با پول آپ(کلید در حالت 0) :
You can see links before reply

برای کلید در حالت 1 باید این تغییرات رو بدید:
AT91F_PIO_CfgPullup(AT91C_BASE_PIOA,key);
تغییر پیدا کنه به
AT91F_PIO_CfgPullup(AT91C_BASE_PIOA,0x00000000);


همچنین

if((AT91F_PIO_GetInput(AT91C_BASE_PIOA)& key)==0x00000000){
تغییر پیدا کنه به

if((AT91F_PIO_GetInput(AT91C_BASE_PIOA)& key)==key){

babaki
29-12-2009, 12:35
سلام
متاسفانه برنامه منم کار نمیکنه :?or:(
حتی این خط
AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 1 << AT91C_ID_PIOB);
رو هم اضافه کردم به اول برنامه ولی جواب نداد

برنامه که نوشتم این بود

int main(void){


AT91F_PIO_CfgOutput(AT91C_BASE_PIOB,AT91C_PIO_PB19 );

(AT91F_PIO_GetInput(AT91C_BASE_PIOB),AT91C_PIO_PB1 );

AT91F_PIO_CfgPullup(AT91C_BASE_PIOB,AT91C_PIO_PB1) ;


while(1){

if((AT91C_PIO_PB1)==0){

delay_ms(100);
AT91F_PIO_SetOutput(AT91C_BASE_PIOB,AT91C_PIO_PB19 );
delay_ms(500);
}

AT91F_PIO_ClearOutput(AT91C_BASE_PIOB,AT91C_PIO_PB 19);

}


برنامه صفحه 10 مجله شماره 3 هم جواب نداد :?or:(