arkadaslar set reset yapamadım. bana yardımcı olursanız sevinirim.
set reset yapamadım diynda
acıklayıcı birşeylerden bahsetsen yardımcı olurum
iki girişim var ikide çıkış girişlerden biri set butonu diğeri reset butonu. set yapıyorum ama reset yapamıyorum.
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...
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
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
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ı.
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
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.
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
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
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ı.
Yazdığın programı buraya koy da bir bakalım nedir sorun.
Ete
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.
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
Alıntı yapılan: "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.
dostum bu kod yanlış ,
üstelik ete ustanın dediği gibi kodu eksik vermişsin ,
sonunda ete ustayı kızdıracaksın çünkü onun verdiği en son örnek gayet doğru ve basitti , sen boşuna dallanıp budaklandırıyorsun programı .
En başta bende böyle komik hatalar yapıyordum o yüzden seni çok iyi anlıyorum :)
sayın ete usta verdiğin. bütün sigorta komutları var programda. yaa bosver istersen cevap yazma ama krize girdim. neden olmuyo. sigortalar senin dediğin gibi.
ete abi bak senin alttaki olan programı yazınca led kitlemesi olmuyo.led hemen sönüyo. burda sete bastıktan sonra nasıl kitliycemi söylersen sevinirim. SAygılar. belkide 12f675 ile hic isim olmuycak ama bnu yapmam lazım yardımlarınız için tesekkürler.
BASLA:
IF G1=1 THEN C1=1
IF G2=1 THEN C1=0
Pause 150 'tuş tekrarı (debouncing) için
GOTO BASLA
Diyecek lafım yok maalesef.
Buraya programını koy diyorum sen bir parçasını koyuyorsun . Üstelik koyduğun program yine abuk subuk komutlarla dolu. Eğlenmeyi seviyorsun ve vaktinde bol anlaşılan.
Sonradan o var bu var programda diyorsun. Hepsi varsa o zaman 675 i değiştir. Belki çalışır.
ETE
selo kusura bakma problem gerçekten sende ,
bunu bir eleştiri olara kabul et ,edebiliyorsan .
mesele set veya reset falan değil ,
senin hiç yapıcı bir çözüm üretemiyor olmandan kaynaklanıyor ,
insanlara birşeyler sunman lazımki onlarda sana cevap verebilsin ,
ne devrenin şemasını veriyorsun? ne programın tamamını veriyorsun ?
ne tam olarak ne yapmak istediğini söylüyorsun ?
insanlar müneccim değilki ? veya masa başında senin yanındaki sandalyede oturmuyorki ne yaptığını görebilsin !
sen 120 yıl ,set -reset olmuyor demeye devam et sonuç çıkmaz ,
devreyi proteusta simule ettim ,
basit bir program yazdım, çalışıyor simule de olsa ..
zaten çalışmamasının hiç bir nedeni yok .
çünkü sen çıkışı high yaptığın vakit onu low yapana kadar çıkış high da kalır ,yani set olur .
işte şema .
(http://img215.imageshack.us/img215/1959/setmu4.jpg)
işte program ,
program proton+ derleyiciye ait ama picbasicle çok benzerdir .
Device 12F675
XTAL 4
Config CPD_OFF,CP_OFF,BODEN_OFF,MCLRE_OFF,PWRTE_OFF,WDT_OFF ,INTRC_OSC_NOCLKOUT
ALL_DIGITAL = TRUE
CMCON=7
DelayMS 500
TRISIO=%000111
Low GPIO.4
Low GPIO.5
Symbol BUTONA = GPIO.0
Symbol BUTONB = GPIO.1
Symbol LED1 = GPIO.4
Symbol LED2 = GPIO.5
LOOP:
If BUTONA = 0 Then High LED1
If BUTONB = 0 Then Low LED1
DelayMS 150
GoTo LOOP
üstteki set butonuna basıyorum ,LED1 yanıyor ve sönmüyor ! taki ben alttaki reset butonuna basana kadar .
ete abicim saygılar. en nihayetinde çalıştı. benim salaklığıma ver. kusura bakma programa koyduğum yanlıs bi komut yüzünden tırmaladım durdum. kusura bakma seni kırdıysam özürdilerim gercekten kötü bir niyetim yoktu. yardımlarn için teşekkür edrim. bilmiyorum sana abi dedim ama 82 liyım. computer kısmında sorunun olursa yardıma hazırım. pic zayıf ama donanımda süperim zaten bir fabrikanın bilgi işlem sorumlusuyum. mail adresim selahattin_23@yahoo.com saygılar.
İki sayfalık mesajlar bloğundan sonra; mutlu son.
Hoş :D