12f675 set reset

Başlatan Selo_1, 04 Şubat 2008, 16:53:08

Selo_1

arkadaslar set reset yapamadım. bana yardımcı olursanız sevinirim.

mucitotomasyon

set reset yapamadım diynda
acıklayıcı birşeylerden bahsetsen yardımcı olurum

Selo_1

iki girişim var ikide çıkış girişlerden biri set butonu diğeri reset butonu. set yapıyorum ama reset yapamıyorum.

Veli B.

Tatli bir klasik oldu ama bu tarz sorulara verilebilecek en guzel cevaplardan bir tanesi, bu sebeple ayni cevabi yazmak yakisir :!:

-4. ve 5. satiri yer degistirin.

Imza: Nostradamus...

Selo_1

bakın program söyle ne yaptıysam olmadı.

GPIO=0
TRISIO=%111000
ANSEL=0
cmcon=7     'COMPARATOR OFF

C1 VAR GPIO.0
C2 VAR GPIO.1
C3 VAR GPIO.2

G1 VAR GPIO.5
G2 VAR GPIO.4
G3 VAR GPIO.3
LOW G1
LOW G2
LOW C1
BASLA :
IF G1=0 THEN
LOW C1
YAN :
ELSE
HIGH C1
GOTO YAN
ENDIF
IF G2=1 THEN
LOW C1
GOTO BASLA
ENDIF

ete

Programın yanlışlarla dolu. Önce yaptığın şeyin doğruluğundan emin olman gerek.

LOW G1
LOW G2

nedir bu komutlar hiç düşündünmü?. Sanmıyorum.
G1 - G2 senin giriş bacakların. Yani buralara muhtemelen buton anahtar vs. bir şey bağlıyorsun. Peki giriş bacağını sen programdan LOW yapabilirmisin.
Bu kilitlediğin kapıya bağırarak açıl demek gibi bir şey.
Giriş yapılmış bir pin LOW'a çekilemez.!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Ancak dışarıdan bir fiziksel bağlantı ile LOW yada HIGH yapılabilir.
Zaten pic'in farkı anlayabilmesi için bu giriş bacaklarının ya PULL-UP yada PULL-DOWN denilen Artıya çekili yada şaseye çekili olarak beklemesi tuşa basılıncada konum değiştirmesi gerekir.

Gelelim esas yanlışına;

BASLA :
IF G1=0 THEN
LOW C1
YAN :
ELSE
HIGH C1
GOTO YAN
ENDIF

Program Basla isimli etikete geliyor. Ardından;
G1 girişi LOW yapılmışmı (Tuşa basılınca LOW basılmayınca HIGH) da durması gerek bu pinin yada tersi) ona bakılıyor.
Diyelimki tuşa basıldı, yani G1=0 oldu. Bu durumda program C1 çıkışını LOW yapacak ve endif ten sonraki satıra atlayacak.

Peki tuşa basılmaz ise ne oluyor işte sorun burada?
Bu durumda C1=HIGH oluyor. Hemen altındaki satır onu YAN isimli etikete yolluyor ve burada program sonsuz döngüye girip kalıyor. Programın buradan kurtulması mümkün değil. Çünki kurtulması için bir şart verilmemiş. C1=High yapıyor , YAN etiketine gidiyor. Oradan tekrra C1=High (zaten high da) yapıyor ve tekrar YAN etiketine gidiyor. Nasıl çıkacak buradan.
Bu Goto YAN etiketini GOTO BASLA olarak değiştir. Sorunun düzelir.

Altta bulunan if G2=1 then low C1 bence gereksiz. Zaten şemada olmayınca anlamadım senin mantığını. Tuşun biri low olunca diğeri high oluncamı çalışıyor nedir.

Her neyse hatalar bunlar.

Pek çok arkadaş boyundan yada başka deyişle bilgisinden büyük işlere kalkışıyorlar ve sonra bu nasıl olacak şu nasıl olacak diye bütün mantığı soruyorlar. Burası program üretme fabrikası değil bunu bir kere anlayın. Sonra dediğim gibi bilginizi aşan konuları bırakın ve bilgi basamaklarını yavaş yavaş çıkın bir kere. Merdivenin altından en üst basamağa atlamaya çalışmayın hiç bir zaman. Temeli zayıf bırakır hiç bir şey öğrenemezsiniz.
Önce kafanızda olması gereken sabit bilgiyi bir pekiştirin bakalım. Sonra basamakları çıkmak zaten çok kolaylaşacaktır. Biraz sabredin ve öğrenmekten bıkmayın lütfen. Soru sormayın demiyorum. Ama ortaya bir fikir atıp tamamı için bu nasıl olacak demeyin. Artık sıkıntı vermeye başladı bu tip sorular. Kesinlikle bir şeyler yapın takıldığınız yerleri sorun.
BAzılarıda uyanıklık yapıyor. Program parçacıklarını bir yerlerden toparlıyor alakasız parçaları bir araya getiriyor ve soruyor bunu yazdım ama beceremedim. Geçin bunları, ve yapmayın lütfen. Emek harcayın.
Forumdaki diğer arkadaşlardan da görüyorum. Artık hepsi sıkılmış. Kimsenin cevap veresi gelmiyor. Bu nedenle yeni öğrenen arkadaşlara tekrardan sesleniyorum. Öğrenin , eşeleyin , çabalayın ortaya bir şeyler koyun ve takıldığınız noktayı sorun, takıldığınız konuyu sormayın.

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

Selo_1

tesekkür edrim ama benim amacım sadece öğrnmek. 12f675 ile mesela led oyunları yapabiliyorum ama iş kitlemeye gelince onu yapamadım. yani dediğim gibi iki giriş var birinci giriş set ikinci giriş reset. çıkısta bir adet led var. set=g1 reset=g2 cıkıs=c1

BASLA :
IF G1=1 THEN C1=1
ELSE C1=0
ENDIF
IF G2=1 THEN C1=0
ENDIF
GOTO BASLA
 bunu kendim yazdım. Fakat yine olmadı.

ete

Bu yazdığın kodu derleyici kabul etmemesi gerekir zaten çünki oda yanlış. Yanlış derken şekil hatası var.
Şöyle yazman gerek;

BASLA :
IF G1=1 THEN
 C1=1
ELSE
 C1=0
ENDIF
IF G2=1 THEN C1=0

GOTO BASLA

Düzelt bakalım ne olacak.
Birde sorayım bunu gerçek devredemi deniyorsun yoksa isis de deneyerekmi karar veriyorsun.
Ayrıca butonların nasıl bağlı (pull-up-pull-down hangisi?)
Yada butonların pice bağlı olmayan diğer uçları nereye bağlı (+5V veya GND).
AYrıca butonların pice bağlı uçlarında ayrıca direnç bağlımı?. Bağlı ise dirençlerin diğer uçları nereye bağlı.

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

Selo_1

evet verdiğin örneği denedim sete basınca yandı.ama elimi çektiğimde söndü. yani basılı olduğunda yanıyo. ben sete(G1) bastığımda led(C1) elimi ceksem bile yansın istiyorum. resete(G2)  basınca sönsün.

butonları sormussun kardeşim. butonların ikiside 5v bağlı diren il saseye gidiyo.Yani 5v anahtarlaması yapıyorum. kodu devre üzerinde deniyorum. sete basınca pic'in bacağına 5v gidiyo. yardımların için çok esekkür ederim. qbasıc bilgisine sahibim. bilgisayar donanım mezunuyum. belkide cok basit bişey kardes ama 3 günden beri uğrasıyorum. birde asm dosyasına baktığımda komutlarda soru işaretleri var sence bu normalmi. msn verirsen sevinirim. sonsuz teşekkürler.

OG

if g1=1 then
 if c1=1 then
  c1=0
 else
  c1=1
 endif
gosub butonabak1
endif

if g2=1 then
 if c2=1 then
  c2=0
 else
  c2=1
 endif
gosub butonabak1
endif

goto basla

butonabak1:
if g1=1 then
pause 100
goto butonabak1
endif
return

butonabak2:
if g2=1 then
pause 100
goto butonabak2
endif
return
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

ete

Anladığım kadarı ile Butonlar Pull-Down yapılmış. Butona basılınca pic pinine High uygulanıyor.
Alıntı Yap
BASLA :
IF G1=1 THEN
C1=1
ELSE
C1=0
ENDIF
IF G2=1 THEN C1=0
Bu kod için demişsinki;
evet verdiğin örneği denedim sete basınca yandı.ama elimi çektiğimde söndü. yani basılı olduğunda yanıyo. ben sete(G1) bastığımda led(C1) elimi ceksem bile yansın istiyorum. resete(G2) basınca sönsün.
Qbasic bilgisine sahip biri için enteresan bir durum. Zira bu bilgiye sahip olsa idin sorunu şıp diye görmen gerekir idi. Her neyse belkide bilgin var ama yetersiz.
Şimdi kodlara bakalım;
IF G1=1 THEN  'bunun anlamı  SET tuşuna basılmış ise
C1=1              'C1 led'ini yak 
ELSE               'SET tuşuna basılmamış ise
C1=0              ' C1 LED'ini söndür. işte sorun burada Elini tuştan çekince
ENDIF             'bu komut led'i söndürüyor. Bunu göremiyormusun???
IF G2=1 THEN C1=0


Gelelim doğru koda

BASLA:
IF G1=1 THEN  C1=1

IF G2=1 THEN C1=0 

Pause 150   'tuş tekrarı (debouncing) için

GOTO BASLA


Bu kadar basit bu iş. Mantık şu;
SET tuşuna basmış isem C1 ledini yak
RESET tuşuna basmış isem C1 led'ini söndür.
Tekrar başa git ve tuşların kontrolünü yeniden yap

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

Selo_1

valla ete kardesim cok doğru söyledin yerden göğe kadarda haklısın. sonverdiğin örnekte mantık doğru. set reset te yapıyo. ama yine led yarım saniye sonra sonuyo. yani set yaptıktan sonra hemen led sönüyo. seninde basını ağrıtıyom. ama deli oldum inan belki lise yıllarında olsa idi hemen apmıstım . ama dedim ya donanımcıyım diye uzak kaldım. muhakkak eksik biseyler var watcdog timer kapalı.

ete

Yazdığın programı buraya koy da bir bakalım nedir sorun.

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

Selo_1

C1 Con   0
G1 VAR GPIO.5
G2 VAR GPIO.4



BUTONKONTROL :
 IF G1 = 1 THEN
  GOTO YAK
  SON :
  LOW C1
  IF G2 = 1 THEN
  GOTO SON  
  YAK :
  HIGH C1
       
  GOTO BUTONKONTROL
   ENDIF
   ENDIF
senin verdiğin örnekleride yaptım. bu programda sadece g1 e basınca led yandı. ama set devamlı olarak yanmıyo.

ete

675 de hem comparatör hemde analog pinler vardır. Sen dijital çalıştığına göre programın başına bunları iptal eden bir komut koyman gerek. Bu yüzden programın tamamını istemiştim.
Ayrıca sigortaları program içinden ayarlayan komutlarıda koymanda yarar var.

@ DEVICE pic12F675                                                    
@ DEVICE pic12F675, WDT_ON              'Watch Dog timer açık
@ DEVICE pic12F675, PWRT_ON             'Power on timer açık
@ DEVICE pic12F675, PROTECT_OFF         'Kod koruma kapalı
@ DEVICE pic12F675, MCLR_off            'MCLR pini kullanılMIYOR.
@ DEVICE pic12F675, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak  

CMCON=7
ANSEL=0

komutlarını başa koy ve yeniden dene.

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