3 input tek output

Başlatan yambaxx, 25 Nisan 2012, 23:42:52

yambaxx

Merhaba,

3 girişli (3 ayrı switch buton ile) 1 çıkışlı (10f202 nin bir bacağından alınacak) bir devre kurmam lazım,

1. butona basıldığında buton basılı kaldığı sürece çıkış set kalacak buton bırakılınca çıkış resetlenecek
2. butona basılıp bırakıldığında çıkışı bir sn içerisinde 2 kere set olup sonra reset olacak
3. butona basıp bıraktığımda çıkış 3 kere set olup reset olacak...
Ve son olarak butonlara basılmadığı zamanlar pic uyku moduna girsin...

Bu devrede çalışma ve uyku güç harcaması düşük olan bir pic kullanmam gerekli,
kristali ve pull-up dirençleri dahili olan 10f202 yi düşünmekteyim(ya da bu boyutlarda daha az güç tüketen bir öneriniz varsa ona da açığım)...Kodlarla aram peki iyi olmadığından sizden yardım istemeye karar verdim...

Saygılarımla,
İyi çalışmalar...


ete

Kodlarla aran iyi olmayabilir.  Ama devre şeması çizmekle de aran iyi değil galiba.
Oturup bir şema çizse idin ve en azından kodları da yazmaya başlayıp takıldığın yerde yardım istese idin sana yardım edebilirdim.

Bu şekilde yardım alabilirmisin bilemiyorum. Vakti olan varsa edebilir tabiiki.
Ama düşünmek gerek, Önce bir devre şeması ve muhtemelen bir simulasyon devre şeması hazırlamak gerekecek. Nerden baksan 1 saatlik bir iş. Bunu yaparken bazı eksikler ortaya çıkacak. Çünki projenin tüm detayları verilmemiş.
"Tuşlara basılmadığı zaman işlemci uykuya girecek" ama kim uyandıracak işlemciyi sonra. Uyuyup kalacakmı.?
Bu sorunun cevabı devre şemasını etkiler. Bu nedenle ilgili kişi sana soru soracak sen cevaplayacaksın sonra çalışma devam edecek ve bir gün geçecek. Sonra şemaya göre kodlar yazılacak bir iki eksik daha çıkacak ve sonunda 1-2 veya 3 gün içinde proje tamamlanacak.
Bu kadar zamanı kim harcar acaba. Halbuki işin birazını sen üstlensen iş daha kolaylaşır ve yardımda çabuk gelebilirdi.

Ete

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

skara1214

hocam pic basici bilmediğim için kodda yardımcı olamıyorum.Basit bir kod eğer ccs ile yaparım diyorsan yardımım dokunur.Ete hocanın dediği gibi nasıl sleepten uyandıracaksın timer kullanarakmı?628a kullanırsanız onda tam sizin istediğinizi yapabilirsiniz şöyleki;int rb kesmesi b portunun 4-5-6-7 ci pinlerindeki herhangi bir değişmede interrupta girer sizde sistemi sleep moduna alırsınız interrupt olunca sistem sleepten çıkar istediğinizi yapar sonra gene sleepe sokarsınız
Herkes ölür ama herkes gerçekten yaşamaz

yambaxx

Alıntı yapılan: ete - 26 Nisan 2012, 10:02:43
Kodlarla aran iyi olmayabilir.  Ama devre şeması çizmekle de aran iyi değil galiba.
Oturup bir şema çizse idin ve en azından kodları da yazmaya başlayıp takıldığın yerde yardım istese idin sana yardım edebilirdim.

Bu şekilde yardım alabilirmisin bilemiyorum. Vakti olan varsa edebilir tabiiki.
Ama düşünmek gerek, Önce bir devre şeması ve muhtemelen bir simulasyon devre şeması hazırlamak gerekecek. Nerden baksan 1 saatlik bir iş. Bunu yaparken bazı eksikler ortaya çıkacak. Çünki projenin tüm detayları verilmemiş.
"Tuşlara basılmadığı zaman işlemci uykuya girecek" ama kim uyandıracak işlemciyi sonra. Uyuyup kalacakmı.?
Bu sorunun cevabı devre şemasını etkiler. Bu nedenle ilgili kişi sana soru soracak sen cevaplayacaksın sonra çalışma devam edecek ve bir gün geçecek. Sonra şemaya göre kodlar yazılacak bir iki eksik daha çıkacak ve sonunda 1-2 veya 3 gün içinde proje tamamlanacak.
Bu kadar zamanı kim harcar acaba. Halbuki işin birazını sen üstlensen iş daha kolaylaşır ve yardımda çabuk gelebilirdi.

Ete

Öncelikle haklısınız...
Ne zamandır aklımda olan bir şeydi ama pek zamanım olmadığından ancak dün  akşam alelacele kendi bünyemde aldığım kararla foruma danışmak istemiştim,kullanacağım pic henüz belli olmadığından,bir şema hazırlamadan direk bodoslama daldım kusuruma bakmayın,evimde en az 4 adet pic üzerine kitap bulunmakta ancak kendi başıma onlardan bir şeyler öğrenemedim o yüzden kodlarla aram iyi değil,16f628 olsaydı gene bir şeyler yapabilirdim en azından giriş çıkışları tanımlayabilirdim sayenizde öğrendiğim şekilde ama 10 f 202 de input adlandırmaları değişik şekilde olduğundan nasıl yapabileceğimi bulamadım netten google dan örnek kodlar araştırdım ama ya doğru kelimeleri seçemedim ya da 10 f le ilgili örnek kodlar gerçekten mevcut değildi.Olsalardı en azında 10-15 satır bir şeyleri yazar çizer kendime uydurabilir sonra gelir forumda derdimi paylaşırdım.


Pic seçimime itiraz etmediğiniz için  aşağıdaki şemayı (isis ile) çizdim butonlara basıldığı anda çıkışta görülecek sinyale dair grafikler ekledim linkten şemayı (dsn uzantılı) ve resimleri edinebilirsiniz.

http://min.us/mnzT2ZV1o

Ayrıca tüm bu şema ve çizimleri aşağıda resim olarak da paylaşıyorum,







Alıntı yapılan: skara1214 - 26 Nisan 2012, 14:46:24
hocam pic basici bilmediğim için kodda yardımcı olamıyorum.Basit bir kod eğer ccs ile yaparım diyorsan yardımım dokunur.Ete hocanın dediği gibi nasıl sleepten uyandıracaksın timer kullanarakmı?628a kullanırsanız onda tam sizin istediğinizi yapabilirsiniz şöyleki;int rb kesmesi b portunun 4-5-6-7 ci pinlerindeki herhangi bir değişmede interrupta girer sizde sistemi sleep moduna alırsınız interrupt olunca sistem sleepten çıkar istediğinizi yapar sonra gene sleepe sokarsınız
Konuyu açarken de belirttiğim gibi düşük enerji harcayan bir pic kullanmam gerekli ve belirtmeyi unuttuğum gibi az yer kaplaması da önemli o yüzden 6 yada 8 bacaklı olan 10f202 daha uygun gibi geldi bana...
Uyku olayı şöyle,
tuşlara basılmadığı sürece uyku modu aktif olacak,
her hangi bir tuşa basıldığı anda uyku bitecek,
hangi tuşa basıldıysa  pic ona göre işlem yapacak,
sonra tekrar uyku moduna girecek.

İlginize teşekkür ederim,

Saygılarımla,
İyi çalışmalar...

ete

10F202 işlemci bu iş için pek uygun değil. Yalnızca 24 Byte hafızası var. Muhtemelen program bu hafızaya sığmayacak.
Bu nedenle en azından 12F675 kullanmanı önereceğim.

Ete

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

ete

12f675 ile yaptığım sistemi aşağıdaki linkten indirebilirsin.
12F675 normal çalışma modunda düşük akım çeken ama uyku modunda 1na akım çeken bir işlemcidir. Rahatlıkla 2V ile çalışabilir.

Ete

http://dl.dropbox.com/u/25364674/UCBUTON.rar

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

fahri-

Alıntı yapılan: ete - 26 Nisan 2012, 22:49:02
10F202 işlemci bu iş için pek uygun değil. Yalnızca 24 Byte hafızası var. Muhtemelen program bu hafızaya sığmayacak.
Bu nedenle en azından 12F675 kullanmanı önereceğim.

Ete

Hocam 24 Byte ram hafıza. program hafıza  0,75K. Bence yeterli hafıza.

yambaxx

Alıntı yapılan: ete - 27 Nisan 2012, 10:24:30
12f675 ile yaptığım sistemi aşağıdaki linkten indirebilirsin.
12F675 normal çalışma modunda düşük akım çeken ama uyku modunda 1na akım çeken bir işlemcidir. Rahatlıkla 2V ile çalışabilir.

Ete

http://dl.dropbox.com/u/25364674/UCBUTON.rar

öncelikle Sayın Ete ve diğer cevap veren herkese teşekkür ederim.
12f675 te dahili pull up dirençleri var mı datasheetinde ilgili kısmı göremedim,Sayın Ete paylastığınız şemada da göremeyince bir sorayım dedim.

saygılarimla,
iyi çalışmalar.

ete

#8
Elbette var olmasa direnç bağlamamız gerekecekidi.
Option_REG.7=0 komutu genel olarak bu dirençleri akti eder. Ancak her birini ayrıca;
WPU registerine değer vererek açmanız ve o pinlerinde giriş pini olması gerekir.

Programı 10F202 içinde yazdım ama tahmin ettiğim gibi değişkenler kafi gelmedi.
Aslında programda fazla değişken kullanmadım ama derleyici kendisi de ayrıca hafıza kullanıyor ve sonuçta not fit şeklinde hata veriyor.
Programı derleyemediğim için çalıştıramadım . Çalışacağından da pek emin değildim zaten.
Zira pek çok register 202 de eksik. Örneğin bir INTCON registeri yok. Kesme yok ama data sheet uykudan uyanır diyor.
Kesme olmadan nasıl uyanacaktı bende merak ediyordum aslında.

Ete

Edit: Çok isterseniz Pic10F202 ile de devreyi çalıştırdım. Ancak pinlerde değişiklik yaptım ve değişkenleri kaldırarak bir uygulama yaptım. 
- GP3/MCLR bacağı yalnızca input olabiliyor. Bu nedenle bu bacağı 3 nolu buton bacağı yaptım.
- GP2 bacağı sanırım open collector olduğu için orada dahili pullup direnci yok. Ayrıca başka işlerede yaradığı için giriş pini olması sakıncalı ve bu nedenle GP2 bacağını led pini olarak ayarladım.
- GP0 ve GP1 pinlerini giriş yapıp 1 ve 2 nolu buton pini olarak kullandım. Böylece sistem çalışıyor gözküyor.
İsterseniz deneyebilirsiniz.
İşte kodlar.
'****************ETE-************************************
@ DEVICE Pic10F202                      'işlemci 16F628                                
@ DEVICE Pic10F202, PROTECT_OFF         'Kod Protek kapalı
@ DEVICE Pic10F202, MCLR_OFF           'MCLR pini kullanılMIYOR.
@ DEVICE Pic10F202, INTRC_OSC

DEFINE OSC 4
OSCCAL.0=0

OPTION_REG=0

GPIO=0
TRISIO=%00001011

I     VAR BYTE
DURUM VAR BYTE
PAUSE 250

BASLA:
       IF GPIO.0=0 THEN
         GPIO.2=1
         WHILE GPIO.0=0:WEND
         GPIO.2=0
       ENDIF
       
       IF GPIO.1=0 THEN
          FOR I=0 TO 1
            GPIO.2=1:PAUSE 250
            GPIO.2=0:PAUSE 250   
          NEXT
       ENDIF
       
       IF GPIO.3=0 THEN
          FOR I=0 TO 2
            GPIO.2=1:PAUSE 166
            GPIO.2=0:PAUSE 166   
          NEXT
       ENDIF          
       @ sleep
       GOTO BASLA
       END
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

yambaxx

Çok teşekkür ederim Sayın Ete,
10f202 vediği 25 mesaja rağmen çalışıyor gözükmekte,
hafta içinde bir 10f202 edinip devreyi kurar test eder sonucu bildiririm...
Teşekkür ederim,çok sağolun...

ete

Simulasyonda ikaz vermesinin sebebi aşağıdaki satır.

CMCON0 =%00000000

bu satırı programdan sil. Önce Komparatör var zannetmiştim. Derlerken bu komuta hata da vermiyor. O yüzden orada bıraktım. Normalde hata vermesi gerekirdi. Ama data sheet i iyice okuyunca bu işlemcide komparatör olmadığına karar verdim.
Silersen sistem normale dönüyor Silip yeniden derlemen gerekecek.

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

yambaxx

Merhaba,
Evet şimdi uyarılar gözükmemekte ama şu dikkatimi çekti sanki,
ilk yolladığınız 12f675 li sistemde butona bir kere basıp çekmem yeterliyken 10f202 li sistemde bir süre(aşağı yukarı yarım saniye kadar) basılı tutmam gerekmekte,bu isisten mi kaynaklı acaba henüz 10f202 temin etmediğim için plaket üzerinde devreyi kuramadığımdan bir sorayım dedim...

Saygılarımla,
İyi çalışmalar...

ete

Sistem uykuya girince uyanması biraz zaman alabilir. Bana kalırsa 16F675 de de aynı idi. Ufak bir fark olabilir.
Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

yambaxx

#13
10f202 yi İzmir' de bulamadığım için 12f675 ile devreyi plaket üzerinde kurup deneyebildim sorunsuz çalışmakta,
çok teşekkür ederim...

Saygılarımla,
İyi çalışmalar...