USTALAR çooooooooookk acil yardımlarınızı bekliyorum...

Başlatan mikro29, 10 Aralık 2005, 09:55:23

mikro29

öncelikle hepinizden Allah razı olsun...
sayın ustalar sizden çok acil pic ile yapılmış 3 led displaylı 40 tuşlu (artırılabilir) numaratör sistemi lazım. biraz açarsak 40 tane tuşu olan ve hangi tuşa basılırsa o tuşu led displayda gösteren bi devre lazım.
3 hane olmasının nedenide başlangıç numarasının 300 den başlaması
300-301-302......340 diye devam etmesi. 300 ile başlayan numaraları istediğim zaman değiştirme imkanım olamalı bana yardımcı olursanız çoook teşekkür ederim :oops:

ete

Yapmayı istediğin sistem son derece basit bir şey. Öyle feryat etmene gerek yok.
Bir adet 16F877 al. PortB yi tuşların dikey taraması için kullan.
PortC yi ise tuşların yatay taraması için kullan. Böylece 8 x 8 = 64 adet tuş elde edebilirsin.

A veya D portuna da 7 segment display leri bağla. tuşların her birini kontrol ederek istediğini displayda göster.

Biraz elektronik biliyor isen bu işi kıvırman lazım. Programlamayı tam olarak bilmiyor olabilirsin. Sen başla ben bitiririm programı.
Yok hiç bir şey bilmiyor isen zaten bu işi hiç yapma derim.

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

mikro29

Allah razı olsun
bildiğim kadarıyla programı yazmaya başladım bu konuyla ilgili yine yardımlarınızı bekliyorum

peko

Günümüzde tasarlanan cihazlara o kadar az düğme konuyor ki neredeyse 3 düğmeyle bir çok fonksiyon kontrol edilebilir duruma getirilebiliyor..

Bu 40 tuş niyekine :)
" Bazıları zeka'sını iş'i zorlaştırmak için, bazıları ise kolaylaştırmak için kullanır.. "

Petek

Numaratör dedi ya? Her odaya bir tuş. Müdür, md.yrd., şef, uzman, azman, ....
kim düğmeye bastıysa müstahdem o odaya koşacak, tabi numaratörden numaraya bakıp :)
“Önyargıları yıkmak atomu parçalamaktan zordur” A.Einstein

picusta

Eger bu kadar büyük mesafeler olacaksa bence bus sistemine geçmeli. Kablodan tasaruf eder. Her butonun yanina bus ile iletisimde olan ufak bir entegre koymasi yeterli. Hangi bus daha uygun olur o da ayri bir konu.

peko

Bence butonların dibine küçük bir direnç koyarsa entegre kullanmak zorunda kalmaz.
" Bazıları zeka'sını iş'i zorlaştırmak için, bazıları ise kolaylaştırmak için kullanır.. "


stlg

Sevgili mikro29
Arkadasım eskiden odalardan odacıları cagırmak icin mekanik numaratorler vardı o tur birseymi istiyorsun yoksa sıramatik turu birseymi yapacaksın eger devre ile cagırıcılar arası mesafe uzunsa girislerinde opto kullan derim piclerin uclarını uzun mesafelere tasıman bircok sorunu beraberinde getirir  sistemini bencede sevgili ete nin soyledigi gibi yap istersen cıkıslarından birinede her tus ile uyarılabilen bir sesli devre bagla ,eger 64 adet cogulama ve program zor gelirse 74c922 entegreleri bir incele birkac adet kulanarak ve bu entegrenin aktif cıkıslarıyla pıcın kesme uclarını kullanarak daha sıhatli devreler yapabi
lirsin kolay gelsin

         ALLAHA EMANET OLUNUZ
ALLAHA EMANET OLUNUZ Hoştur bana senden gelen,  Ya gonca gül yahut diken,  Ya kaftandır yahut kefen,  Kereminde hoş lütfunda hoş.

mikro29

"stlg" yapmak istediğim sistemi çok iyi anladınız. bu sistemi otel için düşünüyorum. yanlız pic programlamayı çok iyi bilmiyorum...
onun için sizden yardım bekliyorum. başta ete nin söylediği sistem aklıma yattı ama program konusu, en önemli  sorun... söyle birşeyler yazdım ama daha bitirmedim.ne derece doğru yanlış bilmiyorum sizden yardımlarınızı bekliyorum

TRISA=0
TRISB=1
TRISC=0
TRISD=0
'-------------------------------------------------------------------------------
@ DEVICE pic16F877
@ DEVICE pic16F877, WDT_on
@ DEVICE pic16F877, PWRT_ON
@ DEVICE pic16F877, PROTECT_OFF
@ DEVICE pic16F877, XT_OSC
'-------------------------------------------------------------------------------
DEFINE LCD_DREG      PORTA   'LCD data bacakları hangi porta bağlı?
DEFINE LCD_DBIT      4      'LCD data bacakları hangi bitten başlıyor?
DEFINE LCD_EREG      PORTA   'LCD Enable Bacağı Hangi Porta bağlı?
DEFINE LCD_EBIT      3      'LCD Enable Bacağı Hangi bite bağlı ?
define LCD RWREG    PORTA   'LCD R/W Bacağı Hangi Porta bağlı?
define LCD_RWBIT    2       'LCD R/W Bacağı Hangi bite bağlı ?
DEFINE LCD_RSREG   PORTA   'LCD RS Bacağı Hangi Porta bağlı ?
DEFINE LCD_RSBIT   1      'LCD RS bacağı Hangi Bite bağlı  ?
DEFINE LCD_BITS      4      'LCD 4 bit mi yoksa 8 bit olarak bağlı?
DEFINE LCD_LINES   2      'LCD Kaç sıra yazabiliyor

OPTION_REG.7=0 'pull-up dirençleri aktif

tus var word

Symbol YATAY_A= PORTB.0
Symbol YATAY_B= PORTB.1
Symbol YATAY_C= PORTB.2
Symbol YATAY_D= PORTB.3
SYMBOL YATAY_E= PORTB.4
SYMBOL YATAY_F= PORTB.5
SYMBOL YATAY_G= PORTB.6
SYMBOL YATAY_H= PORTB.7
Symbol DIKEY_0= PORTC.0
Symbol DIKEY_1= PORTC.1
Symbol DIKEY_2= PORTC.2
SYMBOL DIKEY_3= PORTC.3
SYMBOL DIKEY-4= PORTC.4
SYMBOL DIKEY_5= PORTC.5
SYMBOL DIKEY_6= PORTC.6
SYMBOL DIKEY_7= PORTC.7

Tus=0
Pause 200
Lcdout $fe, 1

BASLA:
PORTB =255  
YATAY_A=0
   If DIKEY_0=0THEN
     Tus=300:GOSUB EKRAN
     While DIKEY_0=0
     Wend
   Endif
  If DIKEY_1=0 Then
   Tus=301:GOSUB EKRAN
   While DIKEY_1=0
   Wend
   Endif
   If DIKEY_2=0 Then
   Tus=302:GOSUB EKRAN
   While DIKEY_2=0
   Wend
   Endif
    If DIKEY_3=0 Then
   Tus=303:GOSUB EKRAN
   While DIKEY_3=0
   Wend
   Endif
    If DIKEY_4=0 Then
   Tus=304:GOSUB EKRAN
   While DIKEY_4=0
   Wend
   Endif
    If DIKEY_5=0 Then
   Tus=305:GOSUB EKRAN
   While DIKEY_5=0
   Wend
   Endif
    If DIKEY_6=0 Then
   Tus=306:GOSUB EKRAN
   While DIKEY_6=0
   Wend
   Endif
    If DIKEY_7=0 Then
   Tus=307:GOSUB EKRAN
   While DIKEY_7=0
   Wend
   Endif
   HIGH YATAY_A
YATAY_B=0
    If DIKEY_0=0 Then
   Tus=308:GOSUB EKRAN
   While DIKEY_0=0
   Wend
   Endif
   If DIKEY_1=0 Then
   Tus=309:GOSUB EKRAN
   While DIKEY_1=0
   Wend
   Endif
    If DIKEY_2=0 Then
   Tus=310:GOSUB EKRAN
   While DIKEY_2=0
   Wend
   Endif
    If DIKEY_3=0 Then
   Tus=311:GOSUB EKRAN
   While DIKEY_3=0
   Wend
   Endif
    If DIKEY_4=0 Then
   Tus=312:GOSUB EKRAN
   While DIKEY_4=0
   Wend
   Endif
    If DIKEY_5=0 Then
   Tus=313:GOSUB EKRAN
   While DIKEY_5=0
   Wend
   Endif
    If DIKEY_6=0 Then
   Tus=314:GOSUB EKRAN
   While DIKEY_6=0
   Wend
   Endif
    If DIKEY_7=0 Then
   Tus=315:GOSUB EKRAN
   While DIKEY_7=0
   Wend
   Endif
   High YATAY_B
YATAY_C=0
   If DIKEY_0=0 Then
   Tus=316:GOSUB EKRAN
   While DIKEY_0=0
   Wend
   Endif
   If DIKEY_1=0 Then
   Tus=317:GOSUB EKRAN
   While DIKEY_1=0
   Wend
   Endif
   If DIKEY_2=0 Then
   Tus=318:GOSUB EKRAN
   While DIKEY_2=0
   Wend
   Endif
   High YATAY_C

OG

Ben konuya biraz daha farklı yaklaşırdım. Şöyleki;

Merkez: Numaraları göreceğimiz (odacı diyelim) 16F628, 2 optokuplor, 2 buton, 3 adet de display. 5V power supply.

Odalar: Tüm odalara merkezden uzanan yalnızca 3 tel gider. +5V, 0V, DATA. Merkezdeki sistem ile elektriksel bağlantısı yoktur. Enerjisini herhangi birkaç noktadan alabilir. Yoldaki gerilim düşümleri sebebi ile birkaç nokta. 5-5,5V luk adaptörler 1 adet 1N4001 ile hattı besler.

Odalarda en ucuzundan 12C508 gibi bir pic, bir buton, bir NPN transistör, gerekirse de 1 adet LED (çağrı yapanın çağrıyı yaptığını görüp tekrar tekrar basmasına gerek kalmasın diye.) Bütün oda üniteleri paralel aynı koldan beslenir. DATA hattı transistör kollektörlerine ortak bağlıdır. DATA hattında unuttuğum bir yer var, kollektörden 12C508'e de bir giriş yapılacak.

16F628 2 displayi multiplex tarıyor (7+2 port). 2 adet de buton . 2 optokuplore 1 giriş birde çıkış 13 port yapar.

12C508 lerden birine butonu ile giriş yapıldı ise bunu dikkate alır ve sırasını bekler.

Sıra 628 tarafından yollanan ilk 5-10msn senkron palsinden sonra (bunu gören 12C508 ler başa dönüldüğünü anlar) 1msn gibi bir pals ile bildirilir. İlk 1msn  ODA 1 demektir. Kendini ODA1 olarak bilecek olan hangi 12c508 ise bu palsi görünce (daha önceden butona basılmış ise) transistöre 1msn çıkış verir ve önceki buton basılmış bilgisini hafızasından siler. Bunu izleyen 628 1 numaradan cağrı var olarak kabul eder ve display eder. birkaç msn lik emniyet boşluğundan sonra tekrar 1msn pals gönderir. Senkrondan sonra 2. 1msn olan bu palsi 2. ünite anlar ve gereken işlemi yapar. Toplam 40 adet sorgulama ile döngü biter ve tekrar senkron sinyali gönderilir. Senkron sinyali ile bütün 12C508 ler saydıkları 1msn leri resetler.

16F628 tarafına dönersek odalardan alınan bu bilgiler 1 adetten fazla ise birkaç saniye aralıklarla değiştirilerek displaye verilir. Veya manuel ileri butonu ile tüm çağrılar görülür. Dikkate alınmış herhangi bir çağrı sil girişi ile temizlenir.

Mantık bu. Acelece çizilmiş şekil aşağıda.

http://rapidshare.de/files/9815857/oda_cagri.rar

Hatta arıza yapacak herhangi bir ünite paralel olduğu için söküp alınabilir. Diğerlerini etkilemez.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

picusta

Elinize saglik OG hocam, ayaküstü bir master slave iletisim protokolü yazmissiniz.
:D
Bide su data hattina pulldown, pull up direnç koysaydik daha verimli olabilir belki.

OG

Valla picustam hiç sorma, önceden üşenmeyip lojik entegrelerle bunları yapıyordum, herhalde bu işi görebilecek kodlar 16F628'i zorlamadan sığar sanıyorum.

Pullup direnç 1 adet var, 628 tarafında, optokuplor led e bağlı. 40 ünite müşterek kullanıyor. Bütün oda üniteleri Open Collector.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

armys2000

Dostum Senin işin Multiplexser mantığı çözer


hatta PBP da yazılmış hazır birde code var al sana code


' Define program variables
col     VAR     BYTE            ' Keypad column
row     VAR     BYTE            ' Keypad row
key     VAR     BYTE            ' Key value
disp_key        VAR     BYTE                    ' Key ASCII value


OPTION_REG 0.7 = 0      ' Enable PORTB pullups (16F877)
'INTCON2.7 = 0                  ' Enable PORTB pullups (18F452)

ADCON1 = 7              ' Make PORTA and PORTE digital

Pause 150               ' Wait for LCD to start

LCDOut $fe, 1, "Press any key"  ' Display sign on message

Loop:   GoSub getkey            ' Get a key from the keypad
               IF key != $FF Then              ' Check to see if a key was pressed
               LCDOut $fe, 1, disp_key     ' Display ASCII key label
       End If
       GoTo loop               ' Do it forever


' Subroutine to get a key from keypad
getkey:
       ' Check for keypress
       For row = 0 To 3        ' Loop for 4 rows in keypad
       PORTB = 0       ' All output pins low
       TRISB = ~(DCD row)  ' Set one row pin to output
       '@ NOP                          ' Fudge for 18F452
       col = PORTB >> 4        ' Read column pins

       IF col != $0F Then      ' Check if key is pressed
               HPwm 1, 127, 7500 ' Begin speaker tick
               GoTo gotkey     ' If any keydown, exit
       End If
       Next row                                ' Repeat for the next row
       
       key = $FF                               ' No keys down, set key to $FF
       Return                          ' Return to main loop
       
gotkey:                                                 ' Change row and column to key number 0 - 15
       Pause 15                ' Debounce
       HPwm 1, 0, 0                            ' End speaker tick
       
       ' Wait for all keys up
       PORTB = 0               ' All output pins low
       TRISB = $F0             ' Least significant 4 pins out, top 4 pins in
       IF ((PORTB >> 4) != $0F) Then gotkey    ' If any keys down, loop
       key = (row * 4) + (NCD (col^$0F)) - 1   ' Combine row and column into numeric value
       
       
       ' Translate key to display label:
       ' 1  2  3  A
       ' 4  5  6  B
       ' 7  8  9  C
       ' *  0  #  D
       LookUp Key, ["123A456B789C*0#D"], disp_key
       
       
Return                  ' Return to main loop


       End


yapacağın tek iş  8x8 lik bir matrix yukarıuda ki code işini fazlasıyla görür 64 den fazla olacaksa  tekrar dönersin sadece pici kullanmakla olmaz bu işler dijital elektronik bilgisi ister o zaman gelirsin yardımcı olurum birazcık pic ve birazcıkta ingilizcen varsa yukarıda verdiğim kodun nasıl çalıştığını anlarsın diğer sizin yazdığınız code hantallıktan başka bişey değil END OF CODE

picusta

Peki OG hocanin niye buna basvurdugundan haberin var mi? Niye tus takimi yerine böyle bir bus sistemi kullanimis?
EE Dijital elektronigi bilmekle yetmiyomus demek bu isi çözmek için.
Mikrokontrolör ile tus'un arasindaki mesafe ne kadar olacak? Normal bir tus takimi gibi bikaç cm değil.
Diger taraftan o kadar mesafe kablo düsemek zor olmaz mi?