16f887 pic ile sayma ve karsilastirma islemi

Başlatan ahmet5454, 01 Ekim 2017, 19:52:12

ahmet5454

Selam arkadaslar aranizda cok yeniyim picbasic pro da kendimi gelistirmek istiyorum.PIC16F887 ile ilgili pin e 5 v uyguladik 1 saymasi ayni pine bir daha 5 v uyguladik 2 ayni sekilde ayni pine 5 v uyguladik 3 ve bu sekilde saymasini ve diyelim 10 sayisina geldiginde 1 cikis 15 e geldiginde 2 cikisi aktif etmek istiyorum.Boyle bir uygulama yapmam mumkun mu acaba?Eger mumkunse ornek demo programa ihtoyacim var .Yardimci olacak arkadaslara simdiden tesekkurler

ete

Basic konusunda bir şey öğrenmeden direk kendine örnek demo seçmişsin.
Sitede Basic dersleri var önce onları bir çalış ve bu söylediğin işleri yapacak programa bir başla takıldığın yerde yardım iste yardımcı olalım. Şunu unutma bu sitede örnek , demo adı her ne olursa olsun hazır program isteyenlere ya cevap vermiyoruz yada sana verdiğimiz gibi akıl verip yönlendiriyoruz.
Sana istersen biraz daha yardımcı olayım. Demo programın senaryosunu vereyim sende basic çalışıp senaryoyu programa dönüştür.
1. Öncelikle işlemci seçimini yap ve ona ait sigorta ayarlarını ver
2. İlgili pin dediğin pine buton bağlanacak dolayısıyla o pin giriş olarak ayarlanmalu
3. Diğer pinler çıkış olarak ayarlanmalı
4. Sayı isimli bir değişken byte olarak tanımlanmalı.
5. Açılış gecikmesi olarak 200 ms verilip program basla etiketi ile baslamalı
6. Buton na basılmış ise high olacağı ve basılmadığı zaman low da beklemesi donanım olarak sağlanmalı
7. Buton pini high olmuş ise sayı=sayi+1 yapılmalı ve hemen ardından
Sayı=10 olmuş ise birinci çıkış pini high yapılmalı
8. Sayı=15 olmuş ise ikinci çıkış da high olsun.
9. Program tekrar basla etiketine yönlendirilip aynı işlemler tekrarlansın.
Hepsi bu kadar. Artık halledersin her halde.
Öğrenmen gereken komutlar,
- Tris
-If ... then
- portA veya PortB.x=1 şeklinde portpininin high yapılması (x burada) 0-7 arasındaki pin bit numarasıdır.

Ete

ahmet5454

İlginiz icin cok tesekkurler ete hocam cok sagolun.Onerdiginiz yontemleri arastiracagim cok sagolun

ahmet5454

Selamlar hocam dediginiz gibi programi yaptim.Fakat butona 1 kere bastigimda PORTB.O =1 PORTB.1=1oluyor.Baska bir islem yapmiyor ne yaptiysam olmadi hocam hatam acaba nerde olabilir?
PIC 16F887

TRISA=%00000001
TRISB=0
ANSEL=0
ANSELH=0

PORTA=0
PORTB=0
SAYI VAR BYTE
SAYI=0
PAUSE 200
IF PORTA.O=1 THEN SAYI=SAYI+1
IF SAYI=10 THEN PORTB.0=1
IF SAYI=15 THEN PORTB.1=1
GOTO BASLA
END



ahmet5454

Hocam BASLA Etiketini yazmayi unutmusum kusura bakmayin

ete

Unuttuğun başka şeylerde var. Yukarıda verdiğim işlem sırasına iyice bak istersen.
- Sigorta ayarlarını unutmuşsun.
- Program hangi OSC hızında çalışıyor yazılmamış DEFINE OSC 4 gibi
- Açılış gecikmesini vermemişsin.

Şayet  IF PORTA.O=1 THEN SAYI=SAYI+1 şeklinde bir komut satırı yazarsan tuşa dokunduğun anda sayı=255 olur.
Bu işlemcinin çalışma hızından kaynaklanır.
Bir tercih yapmalısın şöyle;
- Tuşa basınca 1 saysın ama bırakmadığım sürece başka sayma yapmasın. Ancak tuşu bırakıp tekrar basarsam bir daha saysın.
Bu işi yaptırmanın yolu şöyle;
IF PORTA.0=1 THEN             'tusa bastın
  SAYI=SAYI+1                    'sayac saydı
  WHILE PORTA.0=1:WEND   'tusu bırakıncaya kadar burada bekledi
  PAUSE 80                          'tus kontak titremesi olmasın diye bir gecikme verdik
ENDIF                                 'işlem bitti

- Yada tuşa basıp basılı tuttuğum sürece belirli hızda sayma yapsın.
IF PORTA.0=1 THEN             'tusa bastın
  SAYI=SAYI+1                    'sayac saydı   
  PAUSE 200                        'tus kontak titremesi olmasın ve hızlı saymasın diye bir gecikme verdik
ENDIF                                 'işlem bitti
Eksikleri tamamla tuşbasma kısmını yukarıdakilerden birini tercih ederek değiştir işlem tamamdır.

Ete

ahmet5454

Selamlar hocam cok ama cok tesekkurler ne kadar teşekkür etsem az cok sagolun
Programı yardımlarınız sayenizde çalıştırdım.
Arkadaşlara yararı olması dileği ile program kodları

@ __config _CONFIG1, _XT_OSC & _WDT_ON & _MCLRE_ON & _LVP_OFF & _CP_OFF (pıc16f887 fuse ayarları)
   

               
    TRISB  = %00000000      ' PORTB'nin tüm pinleri çıkış
    TRISA  = %00000011      ' PORTA'nın RA4 ve RA5 hariç tamamı çıkış
    TRISC  = %00000000      ' PORTC tamamı çıkış
    ANSEL = 0               ' PORTA ve PORTE tümü dijital giriş
    ANSELH = 0
     
    PORTB = 0                             
    PORTA = 0
    SAYI VAR BYTE
    SAYI=0
    PAUSE 200             Program açılış gecikmesi
   
    BASLA:
    IF PORTA.0=1 THEN     
    SAYI=SAYI+1
    WHILE PORTA.0=1: WEND
    PAUSE 80
    ENDIF
    IF SAYI=10 THEN PORTB.0=1
    IF SAYI=15 THEN PORTB.1=1
    GOTO BASLA
    END

Powered by EzPortal