12f675

Başlatan newservis, 23 Mayıs 2021, 02:09:47

newservis

@__config _INTRC_OSC_NOCLKOUT & _WDT_ON & _MCLRE_ON & _CP_OFF
DEFINE OSC 4 
DEFINE OSCCAL_1K 1 
CMCON=7 
ANSEL=0
TRISIO=%110111
GPIO=0

SYMBOL AC=GPIO.3
SYMBOL ROLE=GPIO.0
LOW ROLE
basla:
IF AC=0 THEN
GOTO START
ENDIF
GOTO BASLA
START:
HIGH ROLE
PAUSE 300
LOW ROLE
PAUSE 1000
IF AC=0 THEN
LOW ROLE
ENDIF
GOTO BASLA


merhaba yazdığım kodlar uygulamada çalışmıyor. yardımcı olurmusunuz.

power20

Kod tamamen büyük harfle yazıldığı için, derleyicinin gücüne gitmiştir bu yüzden çalışmaz

ete

Sorun TRIS register değerinde.
AC isimli giriş pini olduğunu düşündüğüm sembol için TRIS registerine Çıkış değeri kullanmışsın.
TRISIO=%110111, Sağdan sola doğru 0-1-2-3-4-5 şeklinde sayarsan çıkış pinleri için "1" yani Giriş değeri, giriş pini için ise "0" yani çıkış değeri kullanmışsın. Bu komutun doğru değeri;
TRISIO=%00001000  şeklinde olmalıdır. 8 bitlik registerler için kesinliklikle 5 bitlik değer kullanmayınız. Daima 8 bit üzerinden değer vermeyi alışkanlık haline getiriniz. Böylece hata yapma olasılığınız en aza inmiş olur.

Diğer bir ekskilik ise programa açılış gecikmesi vermemiş olmanızdır. İlk açılışta registerlerin değerleri işlemci tarafından yaklaşık 150-200 ms dolayında bir sürede ayarlanır. Bu nedenle ilk başlangıçta ortalama 300 ms lik bir gecikme koyarız. Bu süre her şeyin yerli yerine koyulması için yeterli zamanı programa tanır ve sonra asıl program Basla satırından itibaren başlayabilir.

Bu arada büyükharf ile program yazma şakalarına kulak asma. Bu derleyici kodların büyükharf ile yazılmasını özellikle tercih eder. Büyük haf ile kod yazma ayrıca görsel açıdan daha avantajlıdır. Türkçe karekter hatalarını önler ve görünüş olarak program daha iyi izlenebilir hale gelir.


Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

newservis

Alıntı yapılan: ete - 23 Mayıs 2021, 13:28:28Sorun TRIS register değerinde.
AC isimli giriş pini olduğunu düşündüğüm sembol için TRIS registerine Çıkış değeri kullanmışsın.
TRISIO=%110111, Sağdan sola doğru 0-1-2-3-4-5 şeklinde sayarsan çıkış pinleri için "1" yani Giriş değeri, giriş pini için ise "0" yani çıkış değeri kullanmışsın. Bu komutun doğru değeri;
TRISIO=%00001000  şeklinde olmalıdır. 8 bitlik registerler için kesinliklikle 5 bitlik değer kullanmayınız. Daima 8 bit üzerinden değer vermeyi alışkanlık haline getiriniz. Böylece hata yapma olasılığınız en aza inmiş olur.

Diğer bir ekskilik ise programa açılış gecikmesi vermemiş olmanızdır. İlk açılışta registerlerin değerleri işlemci tarafından yaklaşık 150-200 ms dolayında bir sürede ayarlanır. Bu nedenle ilk başlangıçta ortalama 300 ms lik bir gecikme koyarız. Bu süre her şeyin yerli yerine koyulması için yeterli zamanı programa tanır ve sonra asıl program Basla satırından itibaren başlayabilir.

Bu arada büyükharf ile program yazma şakalarına kulak asma. Bu derleyici kodların büyükharf ile yazılmasını özellikle tercih eder. Büyük haf ile kod yazma ayrıca görsel açıdan daha avantajlıdır. Türkçe karekter hatalarını önler ve görünüş olarak program daha iyi izlenebilir hale gelir.


Ete
@ __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF

DEFINE OSC 4
DEFINE OSCCAL_1K 1
CMCON=7
ANSEL=0
TRISIO=%00001000
GPIO=0


SYMBOL AC=GPIO.3

SYMBOL ROLE=GPIO.0
LOW ROLE

basla:
PAUSE 300
IF AC=0 THEN
GOTO START
ENDIF
GOTO BASLA

START:
HIGH ROLE
PAUSE 300
LOW ROLE
PAUSE 1000
IF AC=0 THEN
LOW ROLE
ENDIF
GOTO BASLA


hocam dediğiniz gibi düzenleme yaptım ama çalışmadı.giriş pinim 3 çıkış pinim 0

OG

#4
GPIO3 (12F675'in 4 nolu pini) buton ise
ve buton bastığında GND yani LOW olması gerekiyorsa
bu pini 1K gibi dirençle pullUP yap
(tersi ise, yani bastığında H olması, yani +5V olması gerekiyorsa pullDOWN direnç, yani pin'den GND'ye direnç)

pullup ise;
pini 1K gibi bir direnç ile +5V'a bağla

bağlamazsan butona basmadığın zamanlarda pin yüzer
(ne konumda olacağı belli olmaz, H de olabilir, L da olabilir, hiç birisi de olabilir)
bir buton pini belirsiz olmayı sevmez.

Programda ne yapmak istediğini anlat ki daha iyi yardım alabilesin.

edit (ek)
Buton pinleri, röleden oluşacak elektriksel girişimlere (parazitlere)
veya diğer belirsiz (bilinmeyen) parazitlere duyarlı olabilir,
mesela elektriksel hatların oluşturduğu parazitler

gerekli durumlarda buna önlem almak esastır,
her birisi kendine has problemdir, ayrı usüllerle çözülür

buton temas parazitleri çok ayrı bir konudur, debounce önlemleri gerekir
röle ark parazitleri ayrı konudur
röle bobin zıt emk üretme problemleri ayrı konudur
vs
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

ete

Her zaman söylerim bir program sorunu bişldiriyorsanız kullandığınız şemayıda ekleyin.
Zira burada buton bağlı bir giriş pininden bahsediliyor. Bu pin butona basınca LOW olacağına göre işlemcinin aradaki farkı algılayabilmesi için o pinin butona basılmadığı durumlarda HIGH da beklemesi gerekiyor. @OG açıklamış gerekenleri zaten.
Bu bağlantıyı doğrumu yaptın yanlışmı yaptın nereden anlayacağız bir düşün bakalım. Yanlızca programa odaklanmak yanlış. Donanım kısmıda programla beraber incelenmeliki hatalar ortaya çıkartılabilsin.
Birde Giriş pinim 3 , çıkış pinim 0 şeklinde bir açıklamada yanlış. Bu açıklamanın bir kaç farklı anlamı olabilir. Doğrusu GPIO.0 pini Çıkış, GPIO.3 pini Giriş demek daha doğru olurdu.

Açılış gecikmesinden bahsetmiştim sen onu program döngüsel gecikme olarak uygulamışsın. BASLA satırından öncesine koyulması gereken gecikmeyi BASLA satırından sonrasına koyarak her program döngüsünde bu gecikmeyi çalıştırmış oluyorsun. Bu gecikme sayesinde tuş basılmasını program gecikmeli olarak uygulayacaktır. O gecikmeyi BASLA satırından öncesine koyarak yanlızca açılışta bir kere uygulanmasını sağlamalısın.
Program çok basit kodlardan oluşuyor. Mantıksal doğruluğunu karşılıklı tartışmak gerekir.
Şayet Giriş pininde Pullup direncin var ise programın doğru şekilde çalışması gerekir.
Ancak şu hususlara dikkat etmelisin.
- AC tuşuna bastın.
- Program START etiketine atladı.
- Röle aktif oldu ve 300 ms bekledi.
- Röle Pasif oldu bu satıra epeyce dikkat etmeni isterim.
- Şayet hala AC tuşuna basılıyor ise Röle Pasif olsun demişsin burada. Zaten pasif olmuştu bu komuta gerek varmı sence?
Üstelik 1000 ms uzun bir süre orada. Neden 1000 ms bekliyoruz röle pasif olduktan sonra?. Bence gereksiz bir süre.
Sonuçta zaten pasif konuma sokulmuş rölenin yeniden AC tuşu basılmış ise pasif olsun demek bence yanlış hata değil ama kusur denilebilecek lüzumsuz bir komut satırı. Yeniden düşün bence.

Yada orada yapmak istediğin nedir onu söyle ona göre yeniden düşünelim.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

newservis

Alıntı yapılan: ete - 24 Mayıs 2021, 12:43:35Her zaman söylerim bir program sorunu bişldiriyorsanız kullandığınız şemayıda ekleyin.
Zira burada buton bağlı bir giriş pininden bahsediliyor. Bu pin butona basınca LOW olacağına göre işlemcinin aradaki farkı algılayabilmesi için o pinin butona basılmadığı durumlarda HIGH da beklemesi gerekiyor. @OG açıklamış gerekenleri zaten.
Bu bağlantıyı doğrumu yaptın yanlışmı yaptın nereden anlayacağız bir düşün bakalım. Yanlızca programa odaklanmak yanlış. Donanım kısmıda programla beraber incelenmeliki hatalar ortaya çıkartılabilsin.
Birde Giriş pinim 3 , çıkış pinim 0 şeklinde bir açıklamada yanlış. Bu açıklamanın bir kaç farklı anlamı olabilir. Doğrusu GPIO.0 pini Çıkış, GPIO.3 pini Giriş demek daha doğru olurdu.

Açılış gecikmesinden bahsetmiştim sen onu program döngüsel gecikme olarak uygulamışsın. BASLA satırından öncesine koyulması gereken gecikmeyi BASLA satırından sonrasına koyarak her program döngüsünde bu gecikmeyi çalıştırmış oluyorsun. Bu gecikme sayesinde tuş basılmasını program gecikmeli olarak uygulayacaktır. O gecikmeyi BASLA satırından öncesine koyarak yanlızca açılışta bir kere uygulanmasını sağlamalısın.
Program çok basit kodlardan oluşuyor. Mantıksal doğruluğunu karşılıklı tartışmak gerekir.
Şayet Giriş pininde Pullup direncin var ise programın doğru şekilde çalışması gerekir.
Ancak şu hususlara dikkat etmelisin.
- AC tuşuna bastın.
- Program START etiketine atladı.
- Röle aktif oldu ve 300 ms bekledi.
- Röle Pasif oldu bu satıra epeyce dikkat etmeni isterim.
- Şayet hala AC tuşuna basılıyor ise Röle Pasif olsun demişsin burada. Zaten pasif olmuştu bu komuta gerek varmı sence?
Üstelik 1000 ms uzun bir süre orada. Neden 1000 ms bekliyoruz röle pasif olduktan sonra?. Bence gereksiz bir süre.
Sonuçta zaten pasif konuma sokulmuş rölenin yeniden AC tuşu basılmış ise pasif olsun demek bence yanlış hata değil ama kusur denilebilecek lüzumsuz bir komut satırı. Yeniden düşün bence.

Yada orada yapmak istediğin nedir onu söyle ona göre yeniden düşünelim.

Ete
hocam öncelikle  cevabın için çok teşekkür ederim.ben piç programlama konusunda cok iyi değilim bu yazdığım satırları yaklaşık 3 yıl önce yazdım. şuan çoğunu unuttum. şuan bu kodları kullanmam gerekiyor sizden ricam kodlarda hatam varsa düzenleme yapabilirmisiniz. kartta GP3 pin giriş GP0 pin ise çıkış pin. seneryo ise hocam start tuşuna bastığımda 300ms röle çekecek daha sonra röleyi bırakacak. bu esnada röle çekili iken butona basıldığında tekrar herhangi bir komut almayacak.

ete

Buton pinine 10K pullup direnci bağladıktan sonra aşağıdaki programı derleyip dene.
@ __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF


DEFINE OSC 4
DEFINE OSCCAL_1K 1
CMCON=7
ANSEL=0
TRISIO=%00001000
GPIO=0

SYMBOL AC=GPIO.3
SYMBOL ROLE=GPIO.0

LOW ROLE
PAUSE 300

BASLA:
      WHILE AC=1:WEND  'butona basılmadığı sürece bekle
      ROLE=1           'butona basıldı o halde röleyi aktif et 
      PAUSE 300        '300 ms bekle
      ROLE=0           'röleyi pasif yap 
      WHILE AC=0:WEND  'butona hala basılıyor ise bırakıncaya kadar burada bekle
      PAUSE 100        'Buton bırakıldı , 100 ms tuş titremesini önelemk için gecikme ver
      GOTO BASLA       'yeniden başa dön aynı şeyleri tekrarla.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

newservis




bağlantı şemam.

newservis

Alıntı yapılan: ete - 24 Mayıs 2021, 13:34:36Buton pinine 10K pullup direnci bağladıktan sonra aşağıdaki programı derleyip dene.
@ __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF


DEFINE OSC 4
DEFINE OSCCAL_1K 1
CMCON=7
ANSEL=0
TRISIO=%00001000
GPIO=0

SYMBOL AC=GPIO.3
SYMBOL ROLE=GPIO.0

LOW ROLE
PAUSE 300

BASLA:
      WHILE AC=1:WEND  'butona basılmadığı sürece bekle
      ROLE=1           'butona basıldı o halde röleyi aktif et 
      PAUSE 300        '300 ms bekle
      ROLE=0           'röleyi pasif yap 
      WHILE AC=0:WEND  'butona hala basılıyor ise bırakıncaya kadar burada bekle
      PAUSE 100        'Buton bırakıldı , 100 ms tuş titremesini önelemk için gecikme ver
      GOTO BASLA       'yeniden başa dön aynı şeyleri tekrarla.

Ete
hocam denedim çalışmadı. şemayı paylatım hocam

ete

#10
Bende deniyorum mükemmel çalışıyor. Sende kusur var. Araştır bul.
Zaten iki satırlık basit bir sistem bu çalışmaması imkansız.
Şayet gerçek devrede deniyor isen ya o işlemciyi bozdun o yüzden çalışmıyor yada işlemciyi gerektiği gibi programlayamıyorsun.
Bu işlemcide program hafızası son adresinde kayıtlı bir kalibrasyon değeri vardır.
Şayet işlemciyi durup dururken sil komutu ile sıfırlamaya çalışırsanbu değerde silinir ve bir daha o işlemci düzgün çalışmaz. Kalibrasyon değeride silinir. Program içinde yer alan,
DEFINE OSCCAL_1K 1
komut satırı bu kalibrasyon değerinin önce işlemciden okunup sonra tekrar yerine yazılmasını sağlar. Bu komut olmadan programlanmış işlemcilerde bozulmaya mahkum.
Pickit2 programlayıcı kullanıyor isen OSCAL değerini bulup yerine yeniden yazdırabilen bir fonksiyonu var. Onu kullanarak işlemciyi tekrar çalışır hale getirebilirsin.
Simulasyonda deniyor isen o röleyi kullanma. Çalışmayan röledir. Yerine ya led bağla yada RELAY olarak aradığında gelen röleyi kullan ve bu röle 12V olduğundan bobin ucuna 12V ver.
Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

newservis

Alıntı yapılan: ete - 25 Mayıs 2021, 08:40:08Bende deniyorum mükemmel çalışıyor. Sende kusur var. Araştır bul.
Zaten iki satırlık basit bir sistem bu çalışmaması imkansız.
Şayet gerçek devrede deniyor isen ya o işlemciyi bozdun o yüzden çalışmıyor yada işlemciyi gerektiği gibi programlayamıyorsun.
Bu işlemcide program hafızası son adresinde kayıtlı bir kalibrasyon değeri vardır.
Şayet işlemciyi durup dururken sil komutu ile sıfırlamaya çalışırsanbu değerde silinir ve bir daha o işlemci düzgün çalışmaz. Kalibrasyon değeride silinir. Program içinde yer alan,
DEFINE OSCCAL_1K 1
komut satırı bu kalibrasyon değerinin önce işlemciden okunup sonra tekrar yerine yazılmasını sağlar. Bu komut olmadan programlanmış işlemcilerde bozulmaya mahkum.
Pickit2 programlayıcı kullanıyor isen OSCAL değerini bulup yerine yeniden yazdırabilen bir fonksiyonu var. Onu kullanarak işlemciyi tekrar çalışır hale getirebilirsin.
Simulasyonda deniyor isen o röleyi kullanma. Çalışmayan röledir. Yerine ya led bağla yada RELAY olarak aradığında gelen röleyi kullan ve bu röle 12V olduğundan bobin ucuna 12V ver.
Ete
hocam simulasyonda normal çalışıyor. yalnız ilk yüklemede DEFINE OSCCAL_1K 1 komutunu yazmamıştım büyük ihtimalle işlemçi arızaya gecmiş. yarın yeni işlemçi temin edip deneyip sonuçları size paylaşacam. değerli vaktinizi ayırdığınız için teşekkür ederim.

ete

Mantığını anlamam zor gerçekten. Sana komple hazır program veriyorum sen bazı satırlarrı çıkartıyorsun. Neye dayanarak acaba?
Pickit2 de Tools menüsü altında OSCCAL seçeneği ile bu işlemci yeniden hayata döndürülebilir. Bunu ikinci defa söylüyorum. Umarım dikkate alırsın.
Bu konudaki son mesajım olacak bu. Kolay gelsin.
Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

newservis

Alıntı yapılan: ete - 26 Mayıs 2021, 09:29:00Mantığını anlamam zor gerçekten. Sana komple hazır program veriyorum sen bazı satırlarrı çıkartıyorsun. Neye dayanarak acaba?
Pickit2 de Tools menüsü altında OSCCAL seçeneği ile bu işlemci yeniden hayata döndürülebilir. Bunu ikinci defa söylüyorum. Umarım dikkate alırsın.
Bu konudaki son mesajım olacak bu. Kolay gelsin.
Ete

hocam galiba siz mesajları dikkatli okumadan mantık muhasebesi yapıyorsunuz.sizden  daha önce kendim yazdığım kodda satırı ben eklemeyi unutmuşum. sizin yazdığınız kodlarda herhangi bir değişiklik yapmadım

ete

Mesajları Okudum ama yanlış değerlendirme yapmışım sanırım. Yorumu geri alıyorum.
Kusura bakma. Ama senin kod da da bu komut satırı olunca bunu anlattığın şekilde değerlendirmek de zor benim açımdan. Her neyse yorum yapmadım say.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com