ÇIKIŞ SAYDIRMA

Başlatan designer.21, 01 Mayıs 2020, 14:56:14

designer.21

Merhabalar;
oturdum çıkış saydırma ile ilgili bir kod yazayım dedim elime yüzüme bulaştırdım:)
16f628'in B Portna bağlı butona bastığımda PORTA'nın 0. pini 10 flip flop tarzında defa çıkış verdikten sonra o dursun ve bu defa 1. pin 10 defa saydırsın ondan sonra tekrar başa dönsün.

buton saydırma ile ilgili bilgiler mevcut ama çıkış saydırma ile ilgili bi konuya rastlayamadım, displayler ile alakalalı çıkış bilgileri mevcut, onları referans alıp bişeyler yapmak istedim ama yapamadım bi türlü.

devre similasyonunu paylaşıyorum ama kodlar kalsın:)



MC_Skywalker

eğer PORTB.0 = 1 ise

şunu yap (i=0; i<10; i++)
 {
  tetikle PORTA.0
 }

şunu yap (j=0; j<10; j++)
 {
  tetikle PORTA.1
 }

Fikir veriri sanırım.

fatih88

Resime baktığımızda portb.0 pinine buton bağlamışın herhangi bir pullup veya pulldown direnci göremedim belki dahili pullup ları kullanıyorsundur bilemiyorum a portunada led bağlanmış a portu comparatör barındırır açılışta komparatöerleri kapatmalısın herhangi bir kod olmadığından çok fazla yardım alamayabilirsin
Arkadaşımız c dili ile örnek oluşturmuş lakin ondada yanlışlık var sen önce hangi dil ile program yazdığını paylaşırsan yardımcı olacaklar çıkabilir
bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

designer.21

dili belirtmeyi unutmuşum kusura bakmayın. picbasic ile olacak. aynen dahili pull up kullanılacak. bu alanda acemi olduğum için portları karıştırabiliyorum. dediklerinizi dikkate alacağım teşekkürler. burada öğrenmek istediğim bu saydırma mantığını öğrenmek. müşkülatımı tekrar dile getirmek gerekirse, en az iki tane pin çıkışını istediğim bir sayı kadar flip flop vermek.

fatih88

Trisa=%00000000
Porta=%00000000
Trisb=%00000001
Portb=%00000000

Cmcon=7
Symbol buton portb.0
Symbol led1  porta.0
symbol led2  porta.1

I var buda

Basla:
If buton=0 then
 For i=0 to 9
  Toggle led1
 Next i
I=0
 For i=0 to 9
  Toggle led2
 Next i

Goto basla
End

Ben pek pic basic bilmem ama bu aralar bir projemde ihtiyaç oldu hatalarım alabilir
bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

ete

Ledleri döngü süratinde toggle yaptırırsan hiç bir şey göremezsin. Bir ledin yandığını yada yanarken söndüğünü fark edebilmen için en azından 50-100 ms lik bir gecikmeye ihtiyaç vardır. Sende eksik olan bu.

Ete

designer.21

#6
Ete hocam; fatih88 hocamın yazdıklarından yola çıkarak biraz değişiklik yaparak yaptığım bu kodlar ile sorunsuz çalıştı. kontrol edebilir misiniz


@ __config _CP_OFF & _PWRTE_ON & _WDT_ON & _LVP_OFF & _MCLRE_OFF & _INTRC_OSC_NOCLKOUT

CMCON=7
OPTION_REG.7=0 
TRISA=0
TRISB=%00000000
PORTA=%00000001
PORTB=0
I var BYTE

LED1 VAR PORTB.0
LED2 Var  PORTB.1
BUTON VAR PORTA.0

BASLA:
    IF BUTON=0 THEN
    For I=1 to 10
    LED1=1
    PAUSE 200
    LED1=0
    PAUSE 200
    Next I
    
    I=0
    For I=1 to 10
    LED2=1
    PAUSE 200
    LED2=0
    PAUSE 200
    Next I
    
    ENDIF

Goto basla




fatih88

Evet hocam delay koymamışım pause 300 yazmam gerekirdi bide enfif komutunu koymayı unutmuşum
bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

designer.21

fatih88 hocam sizin cevabınıza istinaden sorumun cevabımın FOR NEXT komutu ile ilgili olduğunu anladıktan sonra ve sizin kodlarınızı biraz değişiklikle yazdığım  kodlar sorunsuz çalıştı. B0 istediğim kadar yanıp söndükten sonra B1'e geçiyor onu da istediğim kadar saydırdıktan sonra başa dönüyor ve buton komutunu bekliyor. yani tam olarak istediğim gibi oldu. bu kodlarla ilgili bir hata falan var mı acaba.

Ayrıca başta belirttiğiniz A Portu comparatör barındırır yazmıştınız. rica etsem bu komparatör ve A PORTU hakkında kısa ve öz bir bilgi verebilir misiniz acaba

fatih88

Karşılaştırıcı demek iki değeri karşılaştırıp çıktı almak için kullanılır değer derken voltaj veya akim benimde çok kullandığım hakim olduğum bir register değil datasheet e cmcon yazarsan teknik detaylarını görebilirsin
bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

ete

KOmparatör bilgisini benvereyim. Türkçesi karşılaştırıcı anlamına geliyor ve tamda bu amaçla kullanılıyor gerektiği zaman. Ayarlama işini CMCON registeri yapıyor. Bit bazında registerin yaptıkları şunlar. (Aslında lisan bilmeye bile gerek olmadan data sheet de comparator module kısmını açarsanız ve registeri incelerseniz her şeyi anlarsınız. Anlamazsanız zaten elektronik bilginiz yeterli değil demektir anlatsamda anlamayacaksınız)
Bit-7: C2_OUT yani Komparatör-2 nin çıkışını test edeceğiniz bit bu.
Şayet C2INV=0  (c2 komparatör çıkışının ters çevirilmesi iptal ise)
C2 nin V+in>V2-in bu bit 1 oluyor.
Tersi olduğunda ise bu bit sıfır oluyor. Doğal olarak bit ters çevirme aktif ise bu anlatılanların tersini kabul etmek gerekecek. Yani 1 olduğunda V+in<V-in oluyor demektir.

Bit-6: C1 Out yani KOmparatör-1 çıkış biti
C1INV=0 ise ,
1= C1+in>C1-in oluyor
0= C1+in<C1-in oluyor

C1INV=1 ise yani çıkış ters çevriliyor ise bunların tersini dikkate almanız gerekiyor.

Bit-5:C2INV biti Bu bit=1 ise C2çıkışı ters çevrilerek çıkıyor sıfır ise olduğu gibi çıkıyor.

Bit-4:C1INV biti. Buda C1 çıkışının ters çevirildiği yada çevrilmediğini ayarlıyor. Bit=1 ise çıkış ters çevriliyor 0 ise çıkış ters çevrilmiyor.

Bit-3:CIS yani Comparator Input Switch,Şayet 0-2 nolu bitler ;
%001 olarak ayarlanmış ise, bu 3 nolu bite 1 verirseniz C1Vin- girişi PORTA.3 pinine bağlanmış oluyor.
sıfır verirseniz aynı giriş PORTA.0 pinine bağlanmış oluyor.
Şayet ilk 3 bite %010 değerini verirseniz; bu 3 nolu bite 1 verirseniz C1Vin- girişi PORTA.3 e ve C2Vin- girişi PORTA.2 ye bağlanmış oluyor.
Aynı bite sıfır verirseniz C1Vin- girişi PORTA.0 a ve C2Vin- girişide PORTA.1 e bağlanmış oluyor.
Bit0-bit1-bit2 :CM2:CM0 seçim bitleri oluyor. Buna ait bir tablo verilmiş Figure 9-1. BUna göre
%000: Komparatörler reset pozisyonu
%100: İki bağımsız komparatör seçeneği
%011: iki adet ortak referanslı komparatör seçeneği
%101: Bir adet bağımsız komparatör seçeneği
%111: Komparatörler kapalı (BU yüzden ğptal etmek için CMCON=7 değerini veriyoruz)
%010: 4 girişli ancak girişleri multiplex çalıştırılan komparatör
%110: Iki ortak referanslı ama çıkışlı komparatör
%001: 3 multiplex girişli iki komparatör
9-1 nolu resimde hangi girişlerin Analog (A harfi ile işaretlenmiş) hangi girişlerin Digital (D harfi ile işaretlenmiş)gösterilmiş. Ayrıca girişlerin CIS seçimine göre 1 yada sıfır olma durumlarıda girişler üzerinde gösterilmiş durumda.
KOnu hakkında basitçe verebileceğim bilgi bu kadar. Detaylı incelemek isteyen data sheet'e müracaat etsin.
SOn olarak basit bir kullanım şekli ni de açıklayayım. ELinizde iki voltaj kaynağı olsun. Bunlardan birisi ref voltajı olur genellikle ve değişmez olduğu kabul edilir. Elinizdeki diğer voltaj da diyelimki bir pil voltajı ve pil voltajının ref voltajından daha düşük hale geldiği yani pilin bitmeye başladığı noktayı tespit etmek istiyorsunuz diyelim. İşte bu amaçla komparatör kullanabilirsiniz. Size 1 adet komparatör yeterli olur. %101 seçeneğini vererek bir adet bağımsız komparatör seçeneğini seçerim. BU seçimde C1 kapalı olacak C2 yi kullanmış olacağım. PORTA.1 den Pil voltajını gireceğim yani C2V-in olacak, PORTA.2 den de pil voltajını gireceğim. Yani C2V+in girişi olacak.
CMCON registerine Şu değeri vereceğim. CMCON=%00000101
Daha sonra CMCON.7 bitine bakarak komparatörü test edeceğim. Şayet bu bit=1 ise Pİl voltajım ref voltajından büyüktür diyeceğim. SOnuçta bu 7 nolu bit'in sıfır olduğu anı yakalamam gerekiyor. Sıfırı yakaladığınız anda piliniz bitmiş demek olacaktır.
Hepsi bu kadar.
Ete

designer.21

verdiğiniz bilgiler iiçn çok teşekkürler.
Ete Hocam; evet maalesef datasheet ile çalışma eksiğim var. o yüzden işin mantığını kavramak adına, geçen haftalarda 628A datasheet dosyasını google çeviri büyük bir kısmını (her nekadar birebir olmasa da) türkçeleştirdim. hem o hem de burdaki bilgiler ile inşallah belli bir mesafe katedebilirim : ) Siz değerli hocalarıma saygılarımı sunarım.

Powered by EzPortal