avatar_ete

RF_KONTROL

Başlatan ete, 12 Aralık 2012, 13:49:42

ete

Bir fark olmaz. İkiside çalışır.

Ete

sinan5541

teşekkurler hocam demek benim devremde veya kullandığım elemanlarda sıkıntı var devreyi iki kez farklı elemanlarla denedim çalıştıramadım picten olabileceğini düşünmüştüm

ete

Çalışmadığına göre bir yerde var bir sıkıntı. Bulmak da sana düşüyor.
Bu gibi durumlarda tercih ettiğim yöntem önce işlemcilerin çalıştıklarından emin olmaktır.
Basitçe iki satır program yazım pinlereen birinden flash yapan çıktı alırım. Bu var şse işlemci çalışabiliyor demektir. Diğerinde de benzer bir çalışma yaptıktan sonra kusuru artık rf modüllerde ararsın. En azından iki pici direk bağlarsın o zaman sistemin çalışması gerekir çalışmıyorsa kod hatalıdır.

Ete

overlok

Selamlar,
Devredeki çıkışların hepsini bas-bırak şekline çevirerek yaptım. Gayet güzel çalışıyor. Yeğenime iş makinesi tarzında bire araç için değişiklik yapmak istiyorum. Mesela sınır anahtarları vasıtası ile kaldırma kolunu çalıştıran motorun belirli sınıra gelince durmasını sağlamaya çalışıyorum. Kodlar aşağıda; CASE 16 ve 32 kısımlarında değişiklikleri görebilirsiniz.
Örneğin motora bağlı kol aşağı yönde hareket ederken sınır anahtarları bağlı oldukları portlara 0 bilgisi veriyor, kol en aşağı gelip sınır anahtarına değince, sınır anahtarı bağlı olduğu porta 1 bilgisi veriyor ve motor duruyor. Buraya kadar tamam.
Sorunum ters yönde yani kolu yukarı yönde çalıştıramıyorum. Yanlışım nerede acaba yardımcı olabilir misiniz?



'@ DEVICE pic16F628A                      'işlemci 16F628                               
'@ DEVICE pic16F628A, WDT_ON              'Watch Dog timer açık
'@ DEVICE pic16F628A, PWRT_ON             'Power on timer açık
'@ DEVICE pic16F628A, PROTECT_OFF         'Kod Protek kapalı
'@ DEVICE pic16F628A, MCLR_off            'MCLR pini kullanılMIYOR.
'@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak
@ __config _INTRC_OSC_NOCLKOUT & _WDT_ON & _PWRTE_ON & _LVP_OFF & _CP_OFF
CMCON=7
DEFINE OSC 4
PORTA=0:TRISA=%11000000
PORTB=0:TRISB=%00000010
' -------------- haberlesme define
DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 20h ' Enable transmit, BRGH = 0
DEFINE HSER_SPBRG 25  ' 2400 Baud @ 4MHz, 0,17%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically


SYMBOL GIE  =INTCON.7   'genel interruptları açıyor
SYMBOL PEIE =INTCON.6   'peripheralinterruptları açıyor
SYMBOL RCIE =PIE1.5     'USART Recive interrupt enable bit
SYMBOL RCIF =PIR1.5     'USART Receive interrupt flag bit

BILGI var BYTE 56
I     VAR BYTE 57
TEMP  VAR BYTE 58
GELEN VAR BYTE 59
YENI  VAR BIT


PORTB=0
PORTA=0

RCIE=1
PEIE=1
GIE=1
ON INTERRUPT GOTO KES

BASLA:
                 
   IF YENI=1 THEN GOSUB TUSBAK
   GOSUB DELAY
   porta=0
   PORTB=0
   GOTO BASLA
   
TUSBAK:   
   SELECT CASE BILGI
   CASE 0
   YENI=0:BILGI=0
   return
   CASE 1
   HIGH PORTA.0
   LOW PORTA.1
   HIGH PORTA.2
   LOW PORTA.3
   CASE 2
   LOW PORTA.0
   HIGH PORTA.1
   LOW PORTA.2
   HIGH PORTA.3
   CASE 4
   LOW PORTA.0
   HIGH PORTA.1
   HIGH PORTA.2
   LOW PORTA.3
   CASE 8
   HIGH PORTA.0
   LOW PORTA.1
   LOW PORTA.2
   HIGH PORTA.3
   CASE 16
   IF PORTA.7=0 AND PORTA.6=1 OR PORTA.7=0 AND PORTA.6=0 THEN
   HIGH PORTB.3
   LOW PORTB.4
   ENDIF
   CASE 32
   IF PORTA.7=1 AND PORTA.6=0 OR PORTA.7=0 AND PORTA.6=0 THEN
   LOW PORTB.3
   HIGH PORTB.4
   ENDIF
   CASE 64
   HIGH PORTB.5
   LOW PORTB.6
   CASE 128
   LOW PORTB.5
   HIGH PORTB.6
   END SELECT
   RETURN

DELAY:
      FOR I=0 TO 255
      PAUSEUS 1
      NEXT
      RETURN   
           
DISABLE
KES:
    hSerIn 15,ATLA,[WAIT ("ETE"),BILGI]
    GELEN=BILGI
    YENI=1
ATLA:
    TEMP=RCREG
    Resume
    enable           
             
END


ete

Sorunu cevaplamak için bakıyorum bilgi eksikliği görüyorum. Şema da olmayınca motor nasıl çalışıyor, nasıl ileri dönüyor nasıl geri dönüyor anlamak imkansız.

Ete

overlok

Alıntı yapılan: ete - 24 Haziran 2018, 18:47:19
Sorunu cevaplamak için bakıyorum bilgi eksikliği görüyorum. Şema da olmayınca motor nasıl çalışıyor, nasıl ileri dönüyor nasıl geri dönüyor anlamak imkansız.

Ete
Pardon hocam. Ekledim.

ete

Anlaşıldı ağzından taksit taksit laf alacağız. Yazdıklarına ve şemaya bir bak istersen Ben senin kolu hangi motorla çalıştırdığını nasıl anlayacağım?
Programa ve Şemaya bakarak şunları tespit ettim. Bu tespitleri aşağıdaki kriterlere göre yaptım.
U4 motor kontrol entegresine bağlı Out-1 ve Out-2 de bağlı motora A dedik. Out-3 ve Out-4 de bağlı motora B dedik.
U5 motor kontrol entegresine bağlı Out-1 ve Out-2 ye bağlı motora C dedik. Out-3 ve Out-4 de bağlı motora da D dedik.

1. Case-1 de MotorA ve MotorB ileri gidiyor (ben ileri geri olarak niteleyeceğim sen istersen aşağı yukarı dersin)
2. Case-2 de MotorA ve MotorB geri gidiyor.
3. Case-4 de MotorA Geri. MotorB ileri gidiyor.
4. Case-8 de MotorA ileri, MotorB Geri gidiyor.
5. Case-16 da SW1=0 ve SW2=1 ise veya SW1=0, SW2=0 ise MOTORC=ileri gidiyor
6. Case-32 de SW1=1 ve SW2=0 ise MOTORC=geri gidiyor. İşte burada bir sorun var. SW1=0 ve SW2=0 ise MotorC=geri dönsün demişsin ama bir üstte Case-16 da aynı sw konumları için ileri dönsün demişsin. Burası yanlış . OR ları ya sil yada doğru lojik değer ver.
Case64 ve Case128 tamamen MotorD nin hareketlerini kontrol ediyor. O halde sorun Case16 ve Case32 deki OR ifadelerinden sonra yazılanlar olmalı.

Ete

overlok

Hocam kusura bakmayın dediklerinizde haklısınız.
U4 entegresi dediğiniz gibi motorlar ileri geri sağa sola hareket için. Paletli sistem olacak.
U5 entegresi Kol Yukarı Aşağı ve Kıskaç motoru ileri geri.

Case 1 = İleri
Case 2 = Geri
Case 4 = Sağa
Case 8 = Sola
Case 16 = Kol yukarı eğer anahtar AŞAĞI=0 ve anahtar YUKARI=1 ise veya Her iki anahtar 0 ise Yukarı
Case 32 = Kol aşağı eğer anahtar AŞAĞI=1 ve anahtar YUKARI=0 ise veya Her iki anahtar 0 ise Aşağı
(Burada yazarken anladım mantık hatasını teşekkür ederim :) )

Şimdi burada motor ortada kaldığında yani sınır anahtarlarına temas etmediği zaman ileri veya geri hangi komut geldi ise o yöne dönmesini istiyorum.
Bu kısmın mantığını kuramadım.

Case 64 = Kıskaç motoru ileri
Case 128 = Kıskaç motoru geri

ete

Kusura bakma ama olaya tam hakim olamadım ben.
Sınır anahtarları kim onu bile ancak tahmin yürüterek anlamaya çalışıyorum.
Motorun ortada kalması demek ya ileri giderken kalır yada geri giderken kalabilir.
Her iki durumda da  sınır anahtarları aynı yerdedir. Çünki temas eden bir şey yok anahtarlara (bir mikro-anahtar gibi düşünürsek.)
Kısaca her iki sınır anahtarına (galiba SW1 ve SW2) temas yok ise anahtarlar LOW verecekler. O halde başka bir Case eklersin,
CASE XX
IF SW1=0 and SW=0 AND Motor ileri emri gelmiş ise (BU nasıl geliyor bilmiyorum) git ileri dön

CASE XY
IF SW1=0 and SW=0 AND Motor Geri emri gelmiş ise git geri dön
şeklinde yapılabilir.

Ete

overlok

Şemada Aşağı ve Yukarı anahtarları sınır anahtarı olarak düşünün. Kol orta konumda sınır anahtarlarına temas etmiyor.
-Case 16 ile vericiden gelen bilgiye göre kol yukarı çıkıyor Yukarı sınır anahtarına temas edince anahtar High değerini verecek ve motor duracak. Aşağı sınır anahtarı Low'da.
-Case 32 ile (Yukarı sınır anahtarı High konumunda Aşağı sınır anahtarı Low konumunda) kol aşağı inecek ama anahtara teması kesileceği için anahtar tekrar Low değerini vermeye başlayacak. Dolayısı ile Kol aşağı inemeyecek. Yazılım olarak çözemiyorum bu mantığı.

ete

Mantığı basite indirgemeek zorundasın. Bir devre kesici kullanılacak ise kesmeden önce hangi konumda kasmeden sonra hangi konumd adiye bakılmaz. Motora hareket verilir ve mekanizma kesiciye dayanınca ne vereceekse o konum beklenir. Bu kadar basit bir iş için karmaşık şeyler düşünüyorsun.
Girişlere A ve B diyelim.
Kesici devreyi kesince HIGH versin farzedelim.
A=1:B=0 motor ileri hareket ett.
While Kesici=0:wend
dediğin zaman kesici HIGH verinceye kadar sistem çalışır.
Yada A=1:B=0
IF Kesici=1 then
  A=0:B=0
ENDIF dersin motor yine durur.
Motorun orta konumda durması halinde zaten anahtarlara bakman gerekmiyor.
IF İleri=0 then
  A=1:B=0
Endıf
IF geri=0 Then
A=0 : B=1
ENDIF demen yeterli.

Ete

Acuf

Merhabalar. Ders 14 için ete'ye teşekkürler. Çoğu konu kafamda netleşti ancak şu konuda yardımınıza ihtiyacım var. Örn benim elimde 100 tane verici 1 tane alıcı var. Bu 100 tane vericiden birine basıldığında alıcı hangisine basıldığını anlamasını istiyorum. Yani her bir verici kendine özgü bir sinyal göndermeli ki alıcının oraya koyacağım pic ile bunu ayırt edip işlem yapabileyim. Bunu nasıl veya hangi malzemelerle yapabilirim? Veya ders 14 te anlatılan PT2262 ve PT2272 ile bunu yapabilir miyim?

ete

Pt serisi ile bunu yapamazsın. Bu eride tuşa basılınca yalnızca ön tanımlı şifre karşıya iletilir.
Ete

Acuf

Peki 100 tane vericinin her birine PT2262 kullanarak ve adres pinleri ile her birine özgü şifre tanımlarsak. Alıcıda PT2272 yerine bu şifreleri çözecek PIC'li bir devre oluşturamaz mıyım. Böylece pic alıcıdan gelen şifreyi kontrol eder, içine önceden tanımladığımız şifrelerle karşılaştırır ve kaç numaralı vericiden geldiğini anlar. Böyle bişey olur mu?

ete

Elbette olur bu şekilde. Adres bacaklarının 7 tanesini kullanarak 100 adet alıcının adres bacaklarınıda abone numarasına göre kodlarsan tuşa basıldığında yalnızca o alıcı aktif olur.
Ama bu işi nasıl yapacaksın çok merak ediyorum doğrusu. Merakım 7 adet adres bacağını nasul kodlayacaksın. İmkansız değil ama çok zor iş bana kalırsa
Ete


Powered by EzPortal