Picproje Elektronik Sitesi

DERLEYİCİLER => PICBasic => Konuyu başlatan: Selo_1 - 04 Şubat 2008, 16:53:08

Başlık: 12f675 set reset
Gönderen: Selo_1 - 04 Şubat 2008, 16:53:08
arkadaslar set reset yapamadım. bana yardımcı olursanız sevinirim.
Başlık: 12f675 set reset
Gönderen: mucitotomasyon - 04 Şubat 2008, 18:37:36
set reset yapamadım diynda
acıklayıcı birşeylerden bahsetsen yardımcı olurum
Başlık: 12f675 set reset
Gönderen: Selo_1 - 04 Şubat 2008, 18:42:06
iki girişim var ikide çıkış girişlerden biri set butonu diğeri reset butonu. set yapıyorum ama reset yapamıyorum.
Başlık: 12f675 set reset
Gönderen: Veli B. - 04 Şubat 2008, 18:52:07
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...
Başlık: 12f675 set reset
Gönderen: Selo_1 - 04 Şubat 2008, 19:23:32
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
Başlık: 12f675 set reset
Gönderen: ete - 05 Şubat 2008, 09:48:23
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
Başlık: 12f675 set reset
Gönderen: Selo_1 - 05 Şubat 2008, 14:02:40
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ı.
Başlık: 12f675 set reset
Gönderen: ete - 05 Şubat 2008, 14:08:44
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
Başlık: 12f675 set reset
Gönderen: Selo_1 - 06 Şubat 2008, 10:26:23
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.
Başlık: 12f675 set reset
Gönderen: OG - 06 Şubat 2008, 10:36:19

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
Başlık: 12f675 set reset
Gönderen: ete - 06 Şubat 2008, 11:13:23
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
Başlık: 12f675 set reset
Gönderen: Selo_1 - 06 Şubat 2008, 17:55:17
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ı.
Başlık: 12f675 set reset
Gönderen: ete - 06 Şubat 2008, 18:07:02
Yazdığın programı buraya koy da bir bakalım nedir sorun.

Ete
Başlık: 12f675 set reset
Gönderen: Selo_1 - 07 Şubat 2008, 08:29:45
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.
Başlık: 12f675 set reset
Gönderen: ete - 07 Şubat 2008, 09:28:28
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
Başlık: 12f675 set reset
Gönderen: Maxim - 07 Şubat 2008, 10:37:33
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 :)
Başlık: 12f675 set reset
Gönderen: Selo_1 - 07 Şubat 2008, 11:56:19
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.
Başlık: 12f675 set reset
Gönderen: Selo_1 - 07 Şubat 2008, 12:16:03
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.
Başlık: 12f675 set reset
Gönderen: Selo_1 - 07 Şubat 2008, 12:18:43
BASLA:
IF G1=1 THEN  C1=1

IF G2=1 THEN C1=0

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

GOTO BASLA
Başlık: 12f675 set reset
Gönderen: ete - 07 Şubat 2008, 12:43:16
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
Başlık: 12f675 set reset
Gönderen: Maxim - 07 Şubat 2008, 13:30:29
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 ,
Başlık: 12f675 set reset
Gönderen: Maxim - 07 Şubat 2008, 13:37:05
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 .
Başlık: 12f675 set reset
Gönderen: Selo_1 - 07 Şubat 2008, 14:03:38
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.
Başlık: 12f675 set reset
Gönderen: crypto - 08 Şubat 2008, 17:29:11
İki sayfalık mesajlar bloğundan sonra; mutlu son.
Hoş  :D