12F675 buton ile led yakma sorunu.

Başlatan Orxan1234, 14 Ağustos 2013, 18:50:59

Orxan1234

İyi Günler.
2-3 gündür Pic Basic öğreniyorum. Ete Hocanın site adı olmaz diye söylemiyorum Pic basic dersleri var. Birince derste Basit led yakma projesi var. Makalede anlatılan 16f84A pici ile aşağıdakı devreyi yapıyorum oluyor ama bir türlü 12f675 ile yapamadım bu işi.

Lütfen yardımcı olurmusunuz?

Devre ve kod.



TRISA=0 'A portu çıkış olarak ayarlandı
TRISB=%00000001 'B.0 pini giriş diğerleri çıkış olarak ayarlandı.

SYMBOL TUS= PORTB.0 ' PortB.0 pinine sembol ismi olarak TUS adı verildi.
SYMBOL LED= PORTA.0 ' PortA.0 pinine sembol ismi olarak LED adı verildi.

BASLA:
IF TUS=1 THEN ' Anahtar kapalı ise
HIGH LED ' LED'i yak
ELSE ' Değilse
LOW LED ' LED'i söndür
ENDIF ' IF sorgulaması sonu
GOTO BASLA ' BASLA isimli etikete git.
END


Bu sekilde calisiyor. Ama kodu 12f675 ikin duzenliyerek Proteusda deniyorum bir turlu olmuyor.

Bu şekilde

TRISA.0=0 'A portu çıkış olarak ayarlandı
TRİSA.1=1

SYMBOL TUS= PORTA.1
SYMBOL LED= PORTA.0

BASLA:
IF TUS=1 THEN ' Anahtar kapalı ise
HIGH LED ' LED'i yak
ELSE ' Değilse
LOW LED ' LED'i söndür
ENDIF ' IF sorgulaması sonu
GOTO BASLA ' BASLA isimli etikete git.
END

Mumkunse deneyerek yeni kodu yazarmisiniz buraya lütfen

Maxim

config satırları yok, onlar nerede ?

mikro29

#2
@ DEVICE pic12F675, INTRC_OSC_NOCLKOUT ' DAHİLİ OSİLATOR
@ DEVICE pic12F675, WDT_ON
@ DEVICE pic12F675, PWRT_ON
@ DEVICE pic12F675, MCLR_OFF
@ DEVICE pic12F675, BOD_OFF
@ DEVICE pic12F675, CPD_OFF
@ DEVICE pic12F675, PROTECT_OFF


ANSEL = 0                       'portlar çıkış
TRISIO=%00001             '0. BIT GIRIS DİĞERLERİ ÇIKIŞ
CMCON=7                       'Komparator kapalı
SYMBOL TUS= GPIO.0     ' GPIO.0 pinine sembol ismi olarak TUS adı verildi.
SYMBOL LED= GPIO.1     ' GPIO.1 pinine sembol ismi olarak LED adı verildi.

BASLA:
IF TUS=1 THEN               ' Anahtar kapalı ise
HIGH LED                        ' LED'i yak
ELSE                               ' Değilse
LOW LED                        ' LED'i söndür
ENDIF                             ' IF sorgulaması sonu
GOTO BASLA                   ' BASLA isimli etikete git.
END


Orxan1234

Cok tesekkur ederim. Calisti ama usteci konfic ayarlari(@ device ile baslayan)  hata veriyor.

Peki butona bir kez tikladigimda yansin yeniden tiklandiginda ise sonsun. Nasil yapabilirim?

ipek


@ Device PIC12F675,WDT_OFF,PWRT_ON,PROTECT_OFF, CPD_OFF,MCLR_OFF,BOD_OFF,INTRC_OSC_NOCLKOUT
DEFINE OSC 4
DEFINE OSCCAL_1K 1    ' To Save Oscillator Calibration

burdan başla sorun var ise devam ederiz ,bildiğimden değil bildiğim kadarını aktarıyorum

oscal satırını yazmayı sakın unutma

sezgin05

Alıntı yapılan: Orxan1234 - 14 Ağustos 2013, 22:00:19
Cok tesekkur ederim. Calisti ama usteci konfic ayarlari(@ device ile baslayan)  hata veriyor.

Peki butona bir kez tikladigimda yansin yeniden tiklandiginda ise sonsun. Nasil yapabilirim?
TOGGLE komutuna bakmalısın

Orxan1234


ete

Define satırlerı hata veriyor ise derlemeyi MPASM de yapıyorsun demektir.
Mcs içinde üstte yer alan view seçeneğine tıkla ve açılan pencerede program&compiler seçeneğine tıklarsan yine bir pencere gelecektir. Bu aşamada senin pc 64 bitlik bir makine ise mecburen mpasm ile derleme yapman gerek. Bunu hata vermeden yapmak için aşağıdaki linki oku.

http://etepic.com/index.php/topic,300.0.html

Makine 32 bitlik ise derleme işini pbpxxx derleyicisine yaptırmalısın. Bu durumda ortada yer alan assembler seçeneğini seçip mpasm kutusunu boşaltman gerekiyor. Seçişi olmayacaktır.
Tabiiki sisteme bpbxxx klasörünün yerinide göstermiş olman gerekiyor.
Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

Orxan1234

Ete Hocam ilgilendiginiz icin cok teşekkür ederim  :)

Sorunu çözdüm.

Sizden tavsiye almak istiyorum.  320volt.comdaki pic basic derslerinizi öğreniyorum.
Bazı konuların mantığını kavrayamıyorum. Ne yapmalıyım? Zamanla kavrarmıyım acaba?

Şimdiden çok teşekkür ederim.

ete

Kavrayamadığını sor belki kavrayacağın şekilde açıklarım.
Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

Orxan1234

ALLAH razı olsun çok teşekkür ederim. Sizin gibi insanlar az bulunur bu zamanda.

Hocam Aşağıdakı kodun bir türlü işleyiş biçimini anlayamıyorum.  Tuş bir kere tıklandığında led yanır 2 kez tıklandığında ise sönüyor.

TRISA=%00000010 ;A portu çýkýþ olarak ayarlandý
PortA.0=0
PortA.1=0

Basla:

pause 50
if portA.1=1 then                  'Tus pini
if portA.0=0 then                    'Led pini
high portA.0                      'Led yansin
else                               'Degilse
low portA.0                         'led sonsun
endif                                'Sart sonu
endif                         
Goto basla                                    'Basla etiketine git


Kendim yazdım ama bir türlü mantığını anlayamıyorum.
İfler kısmında takıldım.

İf Tus 1 Then
İf Led 0 Then
endif
endif

Simdi burada sartin icinde yeni bir sartmi kosuyoruz?
Bir türlü çıkamadım işin içinden.

Lütfen anlatırmısınız?



ete

Her zaman şart içinde şart koşulu olabilir.
Kodları inceleyelim yada her satırın açıklamasını yanına yazayım;
pause 50
if portA.1=1 then                  'TUŞA basılmışmı basılmış ise PORTA.1=1 (HIGH) olacaktır.
   if portA.0=0 then               'Şayet LED sönük ise 
   high portA.0                      'Led yansin
else                               'değilse
  low portA.0                         'led sonsun
  endif                                'Sart sonu
endif                         
Goto basla   

ANlaşılmayacak bir şey yok aslında, Tuşa basıldığı zaman led sönük ise ledi yak , led yanıyor durumda ise ledi söndür diyoruz
Ağzımızla söylediğimiz şeyleri program haline getirmişiz. Ne diyoruz;
Tuşa basılırsa  (IF PORTA.1=1 THEN)
Basıldıktan sonra  Led Sönük ise (IF PORTA.0=0 THEN)
Led yansın   (HIGH PORTA.0)
Şayet Led Sönük değil ise  (Else)   (sönük değil ise led yanıyor demektir)
Led Sönsün  (LOW PORTA.0)
ENDIF  (Bu led durumunu test eden if şartının sonu )
ENDIF (Buda Tuş durumunu test eden if şartının sonu oluyor.
Hepsi bu
Ete
 
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

Orxan1234

Çok teşekkür ederim. Galiba anladım.

Hocam Ornegin


If Tus Then
High led
endif
End

Hocam şimdi Pic bu komutları sürekli tarıyormu?
Yani Yukarıdan aşağıya doğru saat frekansına bağlı olarak taranıyormu bu komutlar? Yoksa İf Tus then komutunda bekletiliyormu?

ete

Program yazarken bir basla etiketi verilir. Bu işin başlangıcıdır.
Altına satırlar halinde komutlar yazılır. Program satır takip eder. Her satırda yer alan komutları teker teker icra eder program. If bir şart komutudur. Şart doğru ise komut icra edilir değilse direk endif satırndan bir sonraki satıra atlanır. Elbette program bir döngüsel çalışmadır. Yapılacak işlemler bittikten sonra aynı işlemleri yeniden yaptırmak için program. GOTO BASLA şeklindeki bir komutla yeniden en başa yönlendirilir.
Her programın bir ön hazırlık ve tanımlama bölümü vardır. Bu bölümde değişkenler , lcd portu ve pinleri , özel registerlere gerekli değerlerin verilmesi , giriş çıkış pinlerinin ayarlanması gibi işler yapılır ve her programın çalışmasında bu satırlar yalnızca bir kere icra edilirler.
Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

Orxan1234

Evet Çok teşekkür ederim bu konu anlaşıldı.

Fakat ben yine bu İf Then komutunu tam anlamadım.

Peki neden boyle yazdigimizda

İf Tus=1 Then
High Led
Else
Low led
Endif

Tusa basarken yanir elimize cektigimizde sonuyor?
Yani neden ikinci kez tikliyarak sonduremiyoruz.

Mantigini anlayamiyorum bir turlu.

Kusura bakmayin sizide yordum.