PDA

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



arvin2009
17-11-2013, 22:54
سلام.
یک مشکل دارم من سه تا پایه 1768 رو به صورت ورودی برای کلید استفاده کردم.مشکل اینجاست وقتی کلید رو فشار میدم پایه صفر میشه که درسته و میشه شناسایش کرد ولی وقتی کلید رو رها میکنم پایه یک نمیشه.یعنی پول اپ نداره که پین رو بالا نگه داره.با این که پیش فرض میکرو پول اپ فعال هست.کسی میتونه کمک کنه؟خیلی وقتم رو گرفته.این دستور کار نمیکنه

#define Q4 LPC_GPIO2->FIOPIN & (1<<11)
#define Q2 LPC_GPIO2->FIOPIN & (1<<12)
#define Q1 LPC_GPIO2->FIOPIN & (1<<13)

if (((Q1) == 0) &&( (Q2) == 1) && ((Q4) == 1)){

mzarkoob
17-11-2013, 23:25
sسلام
نمی شه که اینطوری چطوری برای بار دوم که شما کلید را می زنید چطور میکرو می فهمه دوباره پایه صفر شده!؟

arvin2009
17-11-2013, 23:59
چرا نشه.توی avr کلید رو اینجوری تعریف میکردیم که پایه یک هست وقتی کلید فشار داده میشه پین صفر می شد.
ولی تو این میکرو پایه در حالت معمول هیچ مقداری نداره که این خیلی بد هست.پس این پول اپ تو مدار چیکار میکنه؟

mzarkoob
18-11-2013, 00:19
همان طور که خودتان گفتید به صورت پیش فرض پایه ها وروی و پول آپ هست. وقتی زمین کنید پایه ای را و کلید را بردارید مجدد خودش 1 میشه. و دفعه بعد که دوباره زمین کنید این وضعیت تکرار میشه و در صورتی که برنامه درست باشه، تشخیص داده میشه ...

arvin2009
18-11-2013, 01:20
اینا رو میدونم ولی مدار اینجوری عمل نمیکنه.میتونید یک برنامه ساده بنویسید و با دیباگر تست کنید.پایه یک نیست و فقط صفر بازدن کلید صفر میشه.میشه امتحان کنید
این کد مشکلش چیه که جواب نمیده

if (((Q1) == 0) &&( (Q2) == 1) && ((Q4) == 1)){
ولی این جواب میده

if (((Q1) == 0) &&( (Q2) == 0) && ((Q4) == 0)){

arvin2009
18-11-2013, 02:06
اقا بیا اینم یک برنامه ساده حاکی از عمل نکردن پول اپ داخلی.یعنی سر کارمون گذاشتن و این اپشن روی چیپ نیست.

#include <lpc17xx.h>

int main(){
SystemInit();
LPC_GPIO2->FIODIR = 0x000000ff;
LPC_GPIO2->FIOMASK = 0x00000000;
while(1){
if((LPC_GPIO2->FIOPIN & (1<<10)) == 0) LPC_GPIO2->FIOPIN = 0x81;
else if((LPC_GPIO2->FIOPIN & (1<<11)) == 0) LPC_GPIO2->FIOPIN = 0x42;
else if ((LPC_GPIO2->FIOPIN & (1<<10)) == 1) LPC_GPIO2->FIOPIN = 0x03;
else if ((LPC_GPIO2->FIOPIN & (1<<11)) == 1) LPC_GPIO2->FIOPIN = 0x01;



}
}

Aghaeifar
18-11-2013, 09:36
اینا رو میدونم ولی مدار اینجوری عمل نمیکنه.میتونید یک برنامه ساده بنویسید و با دیباگر تست کنید.پایه یک نیست و فقط صفر بازدن کلید صفر میشه.میشه امتحان کنید
این کد مشکلش چیه که جواب نمیده

if (((q1) == 0) &&( (q2) == 1) && ((q4) == 1)){ ولی این جواب میده

if (((q1) == 0) &&( (q2) == 0) && ((q4) == 0)){


واضح است چرا این کد جواب نمی دهد، چون مساوی 1 قرارش دادی. باید مساوی مثلا 11>>1 قرارش بدهی و به همین ترتیب برای سایر کلیدها.

mzarkoob
18-11-2013, 10:09
سلام
بله همان طور که آقای آقایی فر فرمودند شما بیت 11 را ماسک کردید و باید با بیت 11 مقایسه کنید نه 1. بنابراین مورد از برنامه نویسی شما بوده و گرنه این مورد حتما برای ما پیش میومد

اقا بیا اینم یک برنامه ساده حاکی از عمل نکردن پول اپ داخلی.یعنی سر کارمون گذاشتن و این اپشن روی چیپ نیست.

البته حق کمپانی برای شکایت از شما به دلیل ... کاملا محفوظه ! :mrgreen:

arvin2009
18-11-2013, 11:15
سلام.مرسی از همکاریتون.مشکل این بود.مساوی یک بودن اشکال ندارد.

int main(){
LPC_GPIO2->FIODIR = 0x000000ff;
while(1){
if (((LPC_GPIO2->FIOPIN>>10)&1) == 0) LPC_GPIO2->FIOPIN = 0x81;
if (((LPC_GPIO2->FIOPIN>>11)&1) == 0) LPC_GPIO2->FIOPIN = 0x42;
if (((LPC_GPIO2->FIOPIN>>10)&1) == 1) LPC_GPIO2->FIOPIN = 0x03;
if (((LPC_GPIO2->FIOPIN>>11)&1) == 1) LPC_GPIO2->FIOPIN = 0x01;

}}
اره اقا مهدی فیلیپس شانس اورد .اهان پس من شانس بیارم.چون من دیشب پاین پست نوشتم میخوام برام از دست فلیپس شکایت کنم.

Aghaeifar
18-11-2013, 13:02
سلام.مرسی از همکاریتون.مشکل این بود.مساوی یک بودن اشکال ندارد.

int main(){
lpc_gpio2->fiodir = 0x000000ff;
while(1){
if (((lpc_gpio2->fiopin>>10)&1) == 0) lpc_gpio2->fiopin = 0x81;
if (((lpc_gpio2->fiopin>>11)&1) == 0) lpc_gpio2->fiopin = 0x42;
if (((lpc_gpio2->fiopin>>10)&1) == 1) lpc_gpio2->fiopin = 0x03;
if (((lpc_gpio2->fiopin>>11)&1) == 1) lpc_gpio2->fiopin = 0x01;

}}اره اقا مهدی فیلیپس شانس اورد .اهان پس من شانس بیارم.چون من دیشب پاین پست نوشتم میخوام برام از دست فلیپس شکایت کنم.

شما کد برنامه رو تغییر دادید تا با =1 جواب دهد وگرنه همانطور که عرض شد در برنامه ی قبلی مشکل از =1 بودن است که با شیف دادن 1 درست می شود (یا برعکس، مقدار رجیستر را شیفت بدهید همین کار که کردید)