12f675 led yakma

Başlatan kado17, 17 Ağustos 2016, 02:46:54

kado17

merhabalar

bir devre çizdim 12f675 ile led yakma pbp kodları ile ilgili yardımcı olurmusunuz yeni başlıyorum  kod bilgim yok

GPIO.1 buton bağladım butonun diğer ucu şasede butona 3 saniye basılı tutunca

GPIO.2  led

GPIO.3  led

GPIO.4  led

GPIO.5  led

ledleri yanık kalacak tekrar 3 saniye basılı tutunca tüm ledler sönecek yardımlarınızı bekliyorum :))


mehmet

Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
http://www.mehmetbilgi.net.tr
CC BY

kado17

anladığım kadarıyla böyle birsey yaptım ama calısmıyor dediğim gibi hiç bilgim yok daha

'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2015 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 11.01.2015                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
'—————————————————————–
'@ DEVICE pic12F675 'işlemci 12F675
'@ DEVICE pic12F675, WDT_ON   'Watch Dog timer açık
'@ DEVICE pic12F675, PWRT_ON  'ower 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
'______________________
'@ __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF

DEFINE OSC 4
DEFINE OSCCAL_1K 1  'bu komut mutlaka olacak OSCCAL değerini yeniden pice yazdırıyor
DEFINE ADC_BITS 10    ' ADCIN resolution  (Bits)
DEFINE ADC_CLOCK 1    ' ADC clock source  (Fosc/8)
DEFINE ADC_SAMPLEUS 20 ' ADC sampling time (uSec)

CMCON = 7
VRCON = 0
ANSEL =%00000001
ADCON0=%10000000
GPIO=0
TRISIO=%000010
WPU=0



SYMBOL BUTON=GPIO.1

SYMBOL LED1=GPIO.2
SYMBOL LED2=GPIO.3
SYMBOL LED3=GPIO.4
SYMBOL LED4=GPIO.5
SAYI VAR BYTE
pause 200

Led1=0
Led2=0
Led2=0
Led2=0

BASLA:

IF BUTON=0 THEN
  LED1=1
  LED2=1
  LED2=1
  LED2=1
  WHILE BUTON1=0:WEND
  PAUSE 50
ENDIF

    LED1=0
    LED2=0
    LED3=0
    LED4=0

GOTO BASLA

END

ete

Okuyarak öğrenme konusunda isteksizsiz anlaşılan. Bilmeden istediğini nasıl yapacaksın?
Sürekli birileri mi yardım edecek sanıyorsun?. Bir kere bilemedin ikinci kere yardım alırsın.
Ama devamı gelmez. Bu nedenle işin prensiplerini öğrenmen gerekiyor.
Mesela;
Programda GPIO.0 pini analog giriş olarak ayrılmış gözüküyor ama programda buna ait bir kod yok. O halde lüzumsuz demektir. O halde ANSEL=%00001 yerine ANSEL=0 demek daha doğru olur.

Programda SYMBOL BUTON=GPIO.1 şeklinde bir buton pini tanımlamışsın. İsime dikkat BUTON demişsin. Ama while-wend komutunda; WHILE BUTON1=0:WEND şeklinde bir satır var. Burada da aynı buton için BUTON1 adını kullanmışsın ki program burada hata verecektir çünki tanımlamalarda böyle bir tanımlama yok. Bu BUTON olarak değiştirilmelidir.

Bu düzeltmei yaparsan butona bastığın anda belirttiğin ledler yanacaktır. Butonu bırakınca da sönecektir.
Ama senin isteğin butona 3 sn basınca ledler yansın şeklinde idi nerede buna ait komutlar.?
Butona basacaksın bir sayac butona basıldığı sürece zamanı sayacak 3sn dolunca ledleri yakacak ve butonun bırakılmasına bakacak. 3 sn dolmadan bırakılmış ise ledleri yakmadan tekrar butona basılıp basılmadığını kontrol edecek.
Bilmiyor olabilirsin. Butona süreli basma işlemi aşağıdaki şekilde kontrol edilir.
IF BUTON=0 THEN 'önce butona basılmışmı ona bakıyoruz basılmış ise; 
  ZAMAN=0  'zaman önce sıfırlıyoruz
  WHILE BUTON=0
     ZAMAN=ZAMAN+1
     PAUSE 1
     IF ZAMAN=3000  THEN   '3 sn dolmuş ise
        LED1=1
        LED2=1
        LED3=1
        LED4=1
     ENDIF
  WEND
ENDIF

Buraya kadar butona 3 sn basarsan ledler yanacak ama yanmış ledlerin sönmesi içinde 3sn şartı varsaki öyle diyorsun o halde butona 3sn basıldığı durumda önce ledlerin yanıp yanmadığına bakmak yanıyor ise söndürmek yanmıyor ise yakmak gerekir. Bunun içinde en iyisi Toggle komutunu kullanmak olur. Yani
IF BUTON=0 THEN 'önce butona basılmışmı ona bakıyoruz basılmış ise; 
  ZAMAN=0  'zaman önce sıfırlıyoruz
  WHILE BUTON=0
     ZAMAN=ZAMAN+1
     PAUSE 1
     IF ZAMAN=3000  THEN   '3 sn dolmuş ise
        TOGGLE LED1
        TOGGLE LED2
        TOGGLE LED3
        TOGGLE LED4
     ENDIF
  WEND
ENDIF
GOTO BASLA
şeklinde bir kod kullanmak daha akkılıca olur. Böylece 3 sn süre sonunda ledler sönük ise yakılır yanık ise söndürülmüş olur.
Bu işi sürekli yapacak isen önce program nedir komutlar nelerdir deyip örnekleri incelemen ve dersleri okuman gerekir.
İhtiyacına göre kendine bir yol çizersin arrtık.
Ete

efehurkan

Hocam bu vermis oldugunuz ornegi Proteusta test ettigim zaman GPIO.3 Ledi yanmamaktadir, MCLR pin olmasiyla ilgili midir acaba, yoksa benim proteusta mi problem var anlayamadim, bu pine baglanan  buton ve led ler hic bir sekilde aktif olmuyor.



'****************************************************************
'*  Name    : led.BAS                                           *
'*  Author  : ETE                                               *
'*  Notice  : Deneme                                            *
'*          :                                                   *
'*  Date    : 01/02/2008                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
@ DEVICE pic12F675                      'işlemci                               
@ 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 

GPIO=0
TRISIO=%000001
ANSEL=0
cmcon=7

SYMBOL TUS=GPIO.0
SYMBOL LEDA=GPIO.1
SYMBOL LEDB=GPIO.2
SYMBOL LEDC=GPIO.3
   
BASLA:
      if tus=0 then
         leda=1
         ledb=1
         ledc=1
      else
        GPIO=0
      endif
      pause 200
goto basla

mehmet

#5
Gpio.3 ya Mclr ya da sadece giriş olarak
kullanılabilmektedir. Çıkış olarak tanımlanamadığı
için bağlı ledi yanmayacaktır.

12F675 'i bir giriş ve beş çıkış olarak kullanmak
mümkündür.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
http://www.mehmetbilgi.net.tr
CC BY

efehurkan

Tesekkurler Mehmet bey, mclr pini giris olarak ayarladigimda sigorta ayarlarini  mclr_off olarak mi yoksa mclr_on olarak mi degistirmeliyim?

ete

MCLR pininin giriş olarak ayarlanması zorunluluğu yok aslında o pin default olarak giriştir zaten. Siz çıkış yapsanızda işlemci onu giriş olarak bilir. Ama doğrusu Tris registerinden o pini giriş yapmaktır.
MCLR_ON yapmanız halinde o pin MCLR pini olarak (Reset) kullanılır ve programınızın çalışabilmesi için o pine bir Pull-up direnci bağlamanız gerekir aksi halde programınız sürekli reset halinde kalır.

MCLR_OFF yapmanız halinde ise o pini giriş olarak kullanabilirsiniz.

Ete

efehurkan

Tesekkur hocam gunes gibisiniz.

Powered by EzPortal