ARM'den Alınan 5 Biti Pıc'e İşleme

Başlatan yusufburak, 06 Nisan 2013, 14:19:24

yusufburak

Merhaba.
Arkadaşımın bir proje yapıyorda ARM'den 5 bitlik bir bilgi geliyor.

Bu bilgi 1-20 arasında bir sayıyı ifade ediyor.
Aldığımız sayıyı bulup ona göre bir işlem yaptırmak isteniyor.

Mesela 10 geldi diyelim X ve Y motoru çalıştırılacak.
15 geldi diyelim o zaman Y ve Z çalışacak gibi.
Bunu nasıl algılayabilir en rahat bir şekilde ?

Ben switch-case mantığı kullanmasını önerdim ancak o hafızada çok yer eder dedi :S

Sizinde düşüncelerinizi alabilir miyim ?

Teşekkürler.
Öğretici aranıyor :)

z

Hafızada kaç byte yeri kalmış ki?

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

muhittin_kaplan

bit işlem (and, or gibi) yapın ama oda "if" e girer :)

yusufburak

Alıntı yapılan: z - 06 Nisan 2013, 14:32:45
Hafızada kaç byte yeri kalmış ki?



bilmiyorum :S

Alıntı yapılan: muhittin_kaplan - 06 Nisan 2013, 14:35:28
bit işlem (and, or gibi) yapın ama oda "if" e girer :)


if döngüsündense benim dediğim daha mantıklı oluyor gibi gelecek sayılar 1,2,3,4.....,20 şeklinde olacağından daha rahat bi kullanımı olur diye düşünüyorum. Ayrıca 877A kullanılacak pıc olarak. Projede WV park kulenin 20 araçlık prototipi olucak.
Öğretici aranıyor :)

engerex

Kaç adet motor çalıştırılacak? Diyelim 5. ARM den 5 bitlik veri gelir ve her bit 0/1 durumuna göre bir motorun açık kapalı olduğunu teşkil eder.
ve sende motor sayısı kadar döngü yerleştirirsin.
eğer 1. bit 1 ise motor1 çalış aksi halde motor1 dur

mufitsozen

#5
Alıntı yapılan: yusufburak - 06 Nisan 2013, 15:22:04
bilmiyorum :S

if döngüsündense benim dediğim daha mantıklı oluyor gibi gelecek sayılar 1,2,3,4.....,20 şeklinde olacağından daha rahat bi kullanımı olur diye düşünüyorum. Ayrıca 877A kullanılacak pıc olarak. Projede WV park kulenin 20 araçlık prototipi olucak.

5 bit ile 0-31 arasi sayi gosterilebileceginden, 32 bytelik bir array tanimlayip, her indise tekabul eden motor bitini set edin.

or: Bit 2=X, Bit 1=Y ve Bit 0= Z,
yani
eger 7 ise X, Y, Z ON,
eger 4 ise X ON,
eger 5 ise X ve Z ON, ve
eger 6 ise X ve Y ON gibi



ornegin, 10 indisi icin 6 ve 15 indisi icin 3 vs.(sizin verdiginiz ornek icin)


unsigned byte Motor_Arr[]={ 0, 0, 0, 0, 0,  /* 0 - 4 */     
                                               0, 0, 0, 0, 0,  /* 5 - 9 */
                                               6, 0, 0, 0, 0,  /*10-14*/
                                               3, 0, 0, 0, 0,  /*15-19*/
                                               0, 0, 0, 0, 0,  /*20-24*/
                                             .....
                                         }


Boylece ARM_Val degiskeni ARMdan gelen degeri gosteriyorsa:

Motor = Motor_Arr[Arm_Val];

Motor_ON_OFF(eMotor_X,Motor && 4);   /* Motor X icin */
Motor_ON_OFF(eMotor_Y,Motor && 2);   /* Motor Y icin */
Motor_ON_OFF(eMotor_Z,Motor && 1);   /* Motor Z icin */

vs vs vs (vesairenin kisaltilmisi  :))

Boylece butun degerler icin ayni uzunlukta kod calisir.

Hatta enum MOTORLAR {-1, eMotor_X,  eMotor_Y, -1, eMotor_Z};

yazarak MOTOR_ON_OFF cagrilirken kullanilan 4,2,1 degerleri ve Motor_Arr degerleri yerine filan falan....

yada eMotor_X, eMotor_Y filan yerine

#define MOTOR_X 4
#define MOTOR_Y 2
#define MOTOR_Z 1

ve yine filan falan  :) Gerci ben bunu onermem, enum diyerek compilerda daha cok calisir, hem #definelar kafa karistirabilir vs vs
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

yusufburak

:)) önerebileceğiniz bişey var mı peki *
Öğretici aranıyor :)

sadogan

Hagi veri geldiğinde hangi işler yapılacak
listsini versediniz keşke

yusufburak

ya şimdi şöyle mesela 14 geldi.
14 numaralı garaja gidilecek ordan araç alınacak ya da araç oraya park edilecek.
Daha sonra yeniden başlangıç pozisyonuna gelecek.
Öğretici aranıyor :)

speak48

sen garaja gidip geldikten sonra 14 lemi yapacak 15 lemi yapacak sorun değildir.
ister case ile yap ister ifelse asmde aynı işi yapar yer sorunu olmaz.

yusufburak

Alıntı yapılan: speak48 - 06 Nisan 2013, 20:23:26
sen garaja gidip geldikten sonra 14 lemi yapacak 15 lemi yapacak sorun değildir.
ister case ile yap ister ifelse asmde aynı işi yapar yer sorunu olmaz.

peki teşekkür ederim
Öğretici aranıyor :)