avatar_elektro77

picin herhangibir pinini diğerine okutma

Başlatan elektro77, 18 Nisan 2018, 18:43:49

elektro77

merhabalar üstatlarım.
kablo sağlamlığını anlamak için bir cihaz yapmak istiyorum. xlr dediğimiz kablodaki kopukları ve yanlış bağlantıyı, cakı parçalarına ayırmadan bulmak için.kablo 3 uçlu ve her iki tarafı xlr dediğimiz erkek ve dişi jak ile yapılmış. caklarda 1 nolu uç 1 nolu uca, 2 nolu uç 2 nolu uca, 3 nolu uc yani şase ise şaseye bağlı olmalı.
yapacağım cihazda bu iki jakı taktığım bir bolüm var ve her cakın pinleri picin pinlerinden 6 adedini arada üçlü bir switch varmış gibi birbirine bağlıyor.

picin bir pininden binary veya decimal bir değer gönderip diğer başka bir pininde bunu nasıl okuruz. bu işlemi ayrı ayrı üç pine yapmalıyım.

Örneğin:
PORTA=0:portb=0
TRISB=%00001111   'PortB tamamı giriş yapıldı.
TRISA=%00000000   'A portu tamamı çıkış yapıldı.
'-------------------------------------------------------------------------------
INTCON=%11000000                'INTCON.7 ve INTCON.6 bitleri SET edilecek.

    x    VAR     BYTE       
    l    VAR     BYTE 
    r    VAR     BYTE
porta.0=254
porta.1=128
porta.2=64
 
BASLA:
if portb.1=254 then
high portb.5
else
low portb.5
                 endif
                 
if portb.2=128 then
high portb.6
else
low portb.6
                 endif
                 
if portb.3=64 then
high portb.7
else
low portb.7
                 endif
GOTO BASLA
END

gibi
bunu üç pin için ayrı ayrı yapıp kablodaki sıralama hatasını jakları parçalamadan bulmayı amaçlıyorum.
bu programla isis te denedim ama çalışmıyor.çokta bilgili değilim
bunu nasıl yapmalıyım veya bunu yapmak için başka bir yol varmı?
dosya ektedir.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

Pic ile buton kontrolü nasıl yapılırsa sende öyle yapacaksın.
Madem kablon 4 pinli sana 8 bitlik bir Port lazım.
Portun 0-1-2-3 nolu pinleri kablonun bir tarafını bağlayacağın pinler olacak. Portun 4-5-6-7 nolu pinleri ise kablonun diğer ucunu bağlayacağın uçlar olacak.
Burada dikkat edilecek husu 0 nolu pin karşılığı 4 nolu pin ve sırası ile 3 nolu pin karşılığıda 7 nolu pin olacak.
Bunlardan ilk 4 bit çıkış (terside olabilir) sonraki 4 bit ise giriş olacak.
Dahili Pullup ları aktif edeceksin. Bundan sonrası adımlar halinde şöyle olmalı.
- Çıkış pinlerini LOW yap
- Sonra giriş pinlerini kontrol et Herhangi birisi LOW ise kabloda kopuk var demektir.
- Hangisi kopuk anlamak için bitleri tek tek kontrol edebilirsin. En iyisi bir döngü iile  kontrol etmek ve döngüyü oluşturan index değişkeni sana kopuk olan kablo pin numarasını verecektir.
Bu dediklerimi anlamıyorsan anlamadığın yeri söyle açayım.
Ete

elektro77

Peki hocam kopugu anladim. kablo siralamasi yanlışsa nasil bilicez. 1 nolu kablo cakin 1 nolu pinine. 2 numarali kablo cakin 2 nolu pinine. 3 nolu kablo ise cakin 3 nolu pininde olmali.bunun disindaki baglantilarda hata ledi koyup hata almaliyim   Yardim edermisiniz.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

Bu demektirki sen önce bağlantı kontrolü yapacaksın şöyle,
(bu örnekte PORTB yi kullanıyorum. ilk 4 pin giriş sonraki 4 pin ise çıkış çalışıyor.)
FOR I=0 to 3
PORTB.0[I+4]=0:pause 10
IF PORTB.0[I]=1 then
   lcdout $fe,$80," kablo kopuk!!!!!!"
   lcdout $fe,$c0," kopuk kablo=",dec I  '0-1-2-3 olarak bilgi çıkacak
endif
next

Şimdi de sıralama kontrolü, burada önce bir bağlantı hatası olup olmadığına bakarız. Var ise hangi kablo olduğunu buluruz.

FOR I=0 to 3
  PORTB.0[I+4]=0:PAUSE 10
    IF PORTB.0[I]!=0 then HATA_BAK
Next
'program buraya gelirse hata yok demektir.
..
HATA_BAK:
FOR W=4 to 7
PORTB.0[W]=0:pause 10
FOR I=0 to 3
  IF PORTB.0[I]=0 THEN
     LCDOUT $FE,$80,dec1 w," nolu kablo "
     LCDOUT $FE,$C0, dec1 I, "nolu kabloya baglı"     
ENDIF
NEXT


Ete


elektro77

hocam hata bak komutundan sonra next komutu eksik hangi satırdan sonra koyacağımı bilemedim.
birde 64 bit mcs kullanmaya başladım ve sigorta ayar dizini bir farklı ve hata veriyor. bi bakarmısınız.önce ki mcs de device deyip alt alta yazıyordum.(16f628a da.)
üçüncüsü ise pullupları aktive etme kodu doğrumu.

@ __config _BODEN_ON & _BOREN_ON & _CP_ON & _PWRTE_ON & _WDT_ON & _LVP_OFF & _MCLRE_OFF


'-------------------------------------------------------------------------------
PORTA=0:portb=0
TRISB=%00001111   'PortB tamamı giriş yapıldı.
TRISA=%00000000   'A portu tamamı çıkış yapıldı.
'-------------------------------------------------------------------------------
OPTION_REG.7=0 'pullup dirençler aktif  '1 ise devrede değil
'-------------------------------------------------------------------------------   
   
    I    VAR     BYTE       
    w    VAR     BYTE 

basla:

FOR I=0 to 3
PORTB.0[I+4]=0:pause 10
IF PORTB.0[I]=1 then
   lcdout $fe,$80," kablo kopuk!!!!!!"
   lcdout $fe,$c0," kopuk kablo=",dec I  '0-1-2-3 olarak bilgi çıkacak
endif
next

'Şimdi de sıralama kontrolü, burada önce bir bağlantı hatası olup olmadığına bakarız. Varr ise hangi kablo olduğunu buluruz.

FOR I=0 to 3
  PORTB.0[I+4]=0:PAUSE 10
    IF PORTB.0[I]!=0 then HATA_BAK
Next
'program buraya gelirse hata yok demektir.

HATA_BAK:
FOR W=4 to 7
PORTB.0[W]=0:pause 10
FOR I=0 to 3
  IF PORTB.0[I]=0 THEN
     LCDOUT $FE,$80,dec1 w," nolu pin "
     LCDOUT $FE,$C0, dec1 I, "nolu pine baglı"     
ENDIF

next


goto basla
end
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

@Elektro77,
Program yazmayı biliyormusun? Bilmediğin çok belli oluyor.
Peki neden bilmediğin bir işi yapmaya balıklama dalıyorsun?.
Programda bir sürü eksik var. Ben sana genel anamda bu işi nasıl yaparsın açıkladım.
Bu açıklamaları program bilgisi ile birleştirip önce uygun bir şema daha sonrada uygun programa dönüştürmen gerekir.
Bu şekilde olurmu hiç. Daha bir nex komutunun nereye gelmesi gerektiğine bile karar veremedikten sonra ne olacak bu işin sonu?. Adım adım programı bana yaptıracaksın gibi geliyor bana. Zaten en önemli kısmını sana verdim. Bundan sonrasını kendin yapacaksın.
Madem bu işlerle uğraşıyorsun öğreneceksin. Sitede Basic dersleri var. Onları okursan öğrenirsin 1 hafta içine bu programıda yazabilirsin.
Sigorta ayarlarının ne olması gerektiği sitede Önemli Bilgiler başlığı altında detaylı olarak açıkladım. Onları okumayıp bu konuda bile benden yardım istemen hiç hoşuma gitmedi. Biraz çaba harcaman lazım. Üstelik hata veriyor deyip geçmende senin hatan. Insan hata mesajının ne olduğunu yazarda bizde ona göre yorum yapardık. Bunu bile düşünemedikten sonra ben ne diyeyim artık.

Yinede yardımcı olmak açısından son takviyemi yapıyorum.
Programda , LCD tanımlamaları eksik. LCD kullanacaksan tabiiki. B portunu kablo testi için ayırırsan A portunu LCD için kullanman gerekecek.
Programa bir açılış gecikmesi eklemen gerek. BAsla satırından evvel Pause 300 ekle.
Eksik olan Next  hemen next komutunun altına yazılacak.

Ete

elektro77

#6
sigorta ayarlarında "overwriting previous  address contents (2007)"
diye bir hata veriyor.

ınc dosyasıda şu şekilde
_BODEN_ON                    EQU     H'3FFF' ;Backwards compatability to 16F62X
_BODEN_OFF                   EQU     H'3FBF' ;Backwards compatability to 16F62X
_BOREN_ON                    EQU     H'3FFF'
_BOREN_OFF                   EQU     H'3FBF'
_CP_ON                       EQU     H'1FFF'
_CP_OFF                      EQU     H'3FFF'
_DATA_CP_ON                  EQU     H'3EFF'
_DATA_CP_OFF                 EQU     H'3FFF'
_PWRTE_OFF                   EQU     H'3FFF'
_PWRTE_ON                    EQU     H'3FF7'
_WDT_ON                      EQU     H'3FFF'
_WDT_OFF                     EQU     H'3FFB'
_LVP_ON                      EQU     H'3FFF'
_LVP_OFF                     EQU     H'3F7F'
_MCLRE_ON                    EQU     H'3FFF'
_MCLRE_OFF                   EQU     H'3FDF'
_RC_OSC_CLKOUT               EQU     H'3FFF'
_RC_OSC_NOCLKOUT             EQU     H'3FFE'
_ER_OSC_CLKOUT               EQU     H'3FFF' ;Backwards compatability to 16F62X
_ER_OSC_NOCLKOUT             EQU     H'3FFE' ;Backwards compatability to 16F62X
_INTOSC_OSC_CLKOUT           EQU     H'3FFD'
_INTOSC_OSC_NOCLKOUT         EQU     H'3FFC'   
_INTRC_OSC_CLKOUT           EQU     H'3FFD' ;Backwards compatability to 16F62X
_INTRC_OSC_NOCLKOUT        EQU     H'3FFC' ;Backwards compatability to 16F62X
_EXTCLK_OSC                  EQU     H'3FEF'
_HS_OSC                      EQU     H'3FEE'
_XT_OSC                      EQU     H'3FED'
_LP_OSC                      EQU     H'3FEC'

porta da lcd bağlantı örneğini sitede nerde bulabilirim hocam.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

Şunu dene,
#config
__config _BODEN_ON & _BOREN_ON & _CP_ON & _PWRTE_ON & _WDT_ON & _LVP_OFF & _MCLRE_OFF & _INTRC_OSC_NOCLKOUT
#endconfig

LCD nin D4-D7 pinlerini A0-A3 pinlerine bağla.
LCD nin E pinini A7 ye
LCD nin RS pinini A6 ya bağla.
Bu komutları programa ekle
DEFINE LCD_DREG    PORTA    'LCD data bacakları hangi porta bağlı?
DEFINE LCD_DBIT        0        'LCD data bacakları hangi bitten başlıyor?
DEFINE LCD_EREG    PORTA    'LCD Enable Bacağı Hangi Porta bağlı?
DEFINE LCD_EBIT        7        'LCD Enable Bacağı Hangi bite bağlı ?
DEFINE LCD_RSREG    PORTA    'LCD RS Bacağı Hangi Porta bağlı ?
DEFINE LCD_RSBIT    6        'LCD RS bacağı Hangi Bite bağlı  ?
DEFINE LCD_BITS        4        'LCD 4 bit mi yoksa 8 bit olarak bağlı?
DEFINE LCD_LINES    2

CMCON=7 komutunu programa ekla bu komparatörleri iptal edecektir.
Ayrıca Define OSC 4
komutunu ekle buda işlemcinin çalışma frekansını belirleyecek.
Başla satırından evvel ;
LCDOUT $FE,1
PAUSE 300 ekle
Böylece programın LCD ile çalışır hale gelecektir.
Ama hemen söyleyeyim bu iş senin düşündüğün kadar kolay bir iş değil. O kadar fazla alternatif varki şaşarsın.
Kopuk kontrolü çok kolay. Ama bunun için kablonun bir ucundan verdiğin HIGH (Yada LOW) sinyalin diğer uçta olup olmadığına bakıyorsun. Peki kablolar kısa devre ise ve birinden LOW alıyorsa ne olacak?.
Ayrıca kabloların çapraz bağlı olması da 4x4=16 farklı şekilde olabilir. Her biri için ayrı bir test sistemi geliştirmek gerekiyor.
Şöyle bir uğraşayım dedim de  henüz istediğim şekilde kontrol yapamıyorum. Konsantrasyon meselesi bu zaman ayırıp
Uygun çözümler bulmak gerekiyor.
Ama senin yapacağın iş değil bu. Bence vazgeç sen. Çünki bayağı bir program yazmak gerek bunun için. Öyle basit bir iş değil.

Ete

elektro77

#8
anladım hocam. analog yapabilmekiçin bende çok kafa yordum ama işin içinden çıkamadım

bu arada bana sadece 3 uç gerekli. yani 3x3=9 olasılık
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

elektro77

#9
peki ilk yazdığım mesajdaki gibi her pinden decimal değerler gönderip diğer pine bunu okutsak olurmu.
verici alıcı gibi yani
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

elektro77

bu arada sadece kabloda hata bulsa yeter hocam. hangi nolu pinin hangi nolu pine bağlı olduğunu göstermesede olur.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

elektro77

aşagıda yaptıgınızı kopyala yapıstır yaptım   "syntax error" hatası verdi hocam. Şu 64 bit işine alışamıycam galiba. daha ilk defa kullanıyorum çünkü.
ınc dosyasınıda save ettim ama yinede olmuyor.


#config
__config _BODEN_ON & _BOREN_ON & _CP_ON & _PWRTE_ON & _WDT_ON & _LVP_OFF & _MCLRE_OFF & _INTRC_OSC_NOCLKOUT
#endconfig
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

Hiç düşündünmü bu işi el yordamı ile nasıl yapardın.
Aynısını mantık olarak programa dönüştürmek gerekir.
1. Kopuk kontrolü. Bütün kablolara sırası ile LOW verip diğer taraftan sırası ile LOW olmuşmu bakılacak.
2. Kısadevre Kontrolü, Kablo bir ucundan LOW verilecek aynı anda birden fazla LOW varmı bakılacak.
3. Çapraz bağlantı kontrolü;
a) 1 nolu kabloya bir uçtan LOW verilecek. Bütün girişler HIGH da bekliyor. Bunun karşılığı uç da HIGH ise çapraz bağlantı ihtimali var demektir.
    - Bir sonraki kablo ucuna bakılacak.  LOW varise 1=>2 ye bağlıdır.  Değilse
    - Birsonraki kablo ucuna bakılacak  LOW ise 1=>3 e bağlıdır, değil ise
    - Bir sonraki uca bakılacak LOW ise 1=>4 e bağlıdır.
Bu söylenenlerin bütün kablolar için tekrarlanması gerekir.
4 kablo üzerinden konuşursak 1 ini kontrol ucu olarak aldığın için her bir kablonun;
a) Kopuk kontrolü
b) Kısadevre Kontrolü
c) Çapraz bağlantı kontrolü 3 adet
olmak üzere her bir kablonun 5 adet kontrolü olacak. 4 kabloda bu 20 farklı kontrol eder. Amaç bunu işlemciye yaptırmak
biraz ip ucun var elinde biraz kafa yor istersen.
Ete


elektro77

inanın yoruyorum hocam. ama benim kapasitemle bişey çokmıyor. yarım kalıyor. Yani pbp nin henüz tam olarak neler yapabildiğini bilmediğim için hep biyerde takılıp kalıyorum.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

Sigorta hataalrındaki hatan şu,
PBP klasörü içinde yer alan  16F628A.INC dosyası içinde altta yer alan sigorta satırlarını başına ; koyarak kapatman gerekiyor.

MicroCode Studio içinde View===>Compile & program Options seçenklerinde Assembler seçeneğinde sağda yer alan MPASM kutusu seçilmiş olmalı ve MPASM klasörünün yeri orda gösterilmelidir. Sonuta derleme esnasında derleyici MPASM klasörünü kullanacak ve derlemeyi yapacaktır.
Bunları yapmazsan hata devam edecektir.

Ete

Powered by EzPortal