16F84A if else komutu düzgün çalışmıyor

Başlatan xcyqp09k2, 11 Haziran 2013, 14:06:17

xcyqp09k2

Selamlar arkadaşlar,

16F84A pic ini kullanarak önce yanıp sönen led daha sonra if else ile yanıp sönen led. daha sonra şifreleme kullanarak rf ile çalışan araba yapacağım. Aslında 16F628A pic inin dahili osilatörü var, bunu kullanmak daha iyi bu tür projelerde. Ivır zıvır işlerden kurtarıyor ve breadboard daha temiz oluyor yalnız elimdeki 628A nın bek stabil durumda olup olmadığından emin değilim. o yüzden 16F84A ile harici osilatör kullanarak devam edeceğim.

Bilgisayarım 64 bit-  kod yazmak için Proton kullanıyorum - yazdığım hex dosyasını pic e atmak için ise İnternetten aldığım Pickit2 (clone) cihazım var

1-) yanıp sönen led

Device = 16F84A

TRISA = %11111111
TRISB = %00000000

Symbol led = PORTB.0

BASLA:

HIGH led
DelayMs 500
LOW led
DelayMs 500

GoTo BASLA

End


bu program sorunsuz çalışıyor. fakat if deyimini kullanmaya başlayınca devre sapıtıyor.


Device = 16F84A

TRISA = %11111111
TRISB = %00000000

Symbol tus = PORTA.0
Symbol led = PORTB.0

BASLA:

If tus = 1 Then
HIGH led
Else
LOW led
EndIf


GoTo BASLA

End

burada eksik bıraktığım bir yer mi var acaba, Malum elektronik işi çok hassas. Bir kelime Bir harf bir bağlantı etkiliyor. Yardımcı olursanız sevinirim

ferit06

sapıtmasının if deyimi ile ilgisi yok. PORTA  ve tuş kullanıyorsun.

Biraz PORTA, tuş nasıl kullanılır bunları araştır.

mustafacan

#2
proton tecrübesi olarak konuşalım:
hepi topu 20 satır çok çok basit program yazarsınız. ve sizin yaptığınız basit bir led yakma söndürme devresidir.
Çalışır.
bir adet delayms 100 eklersiniz program allak pullak olur.
zavallı proton plus...
Artık yetmiyor ve hatalarla dolu...
yaşadıkça tecrübe ediyoruz...
kafayı yiyecek seviyeye gelebliyorsunuz.


porta.0 çalışması  için direnç uygulamasına dikkat ediniz...
Keşfedilecek çok teknoloji var. Boş Vaktim Yok!

ahmetbudak

donanımınız tuşa bastığınızda ilgili pine 5v gelecek bıraktığınızda 0v olacak şekildeyse problem olmaması lazım

ete

Asıl sorun işlemcinin çalışma hızını göz ardı etmeniz.
Tusa bastığınızı anında görür işlemci. Bir tedbir almazsanız daha tusu bırkıncaya kadar belki yüzlerce defa program tur atar. Bu tür sistemlerde sağlıklı çalışma istersen tuşun bırakılıp bırakılmadığınıda kontrol etmen gerekir. Diğer bir konuda led yakma ve söndürme işleminde mutlaka yanma ve sönme süreside vermeniz gerekir aksi taktirde birinden birini göremezsin.
Bir başka konuda işlemcinin farkı algılamasını sağlamaktır. Tuş un 1 olduğunu algılayabilmesi için tuşun low konumunda (pull-down) beklemesi gerekir. Aksi halde buton pini float denilen konumda bir high bir low arasında kendi kendine gezinir durur.
Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

Maxim

@xcyqp09k2

şimdi senin programında benim gördüğüm şu
1-
config satırı eksik, bunu device satırından sonra ekleyin
xtal 4
Config FOSC_XT, WDTE_OFF, PWRTE_ON, CP_OFF

2-
tuşa basarım led yanar, tuşu bırakırım led söner.
ama girişte pull down-up direnci varmı? yokmu ?

ben olsam şöyle yaparım
portA.0 girişine 10k lık bir pull-up direnci koyarım (bir ucu porta.0 da diğer ucu +5 voltta)
butonun bir ucunu portA.0 a diğer ucunuda şaseye bağlardım.
If tus = 1 Then satırınıda If tus = 0 Then diye değiştirirdim.

xcyqp09k2

#6
cevaplarınız için teşekkür .dediklerinizi dikkate alarak devreyi tekrar kurdum

1- pull up direnci kullandım
2- yanma sönme süresi
3- if yerine if ve elseifli komut
4 - config ayarları

Device = 16F84A
Xtal 4
Config FOSC_XT, WDTE_OFF, PWRTE_ON, CP_OFF

TRISA = %00000000
TRISB = %00010000

Symbol led = PORTB.3
Symbol tus = PORTB.4

BASLA:

If tus =1 Then
High led 
DelayMS 1000
ElseIf tus = 0 Then
Low led
DelayMS 50
EndIf

GoTo BASLA

End





devre artık düzgün çalışıyor. Cevaplarınız için teşekkür

(+ ve - arasına bir kondansatör koydum
pull up da yaklaşık 10 k lık bir direnç var)

mclr hakında bilgim yok bu pic de mclr 10 k ile + ya bağlanmalı mı bağlanmamalı mı ?  bağlasam da bağlamasam da bir şey değişmiyor :/

xcyqp09k2

Device = 16F84A
Xtal 4
Config FOSC_XT, WDTE_OFF, PWRTE_ON, CP_OFF

TRISA = %0000
TRISB = %00001000

Symbol led = PORTB.4
Symbol tus = PORTB.3

Low PORTA.0
Low PORTA.1
Low PORTA.2
Low PORTA.3
Low PORTB.0
Low PORTB.1
Low PORTB.2
Low PORTB.5
Low PORTB.6
High led
DelayMS 50
Low led
DelayMS 50
High led
DelayMS 50
Low led
DelayMS 50

BASLA:

If tus = 1 Then
High led 
DelayMS 50
ElseIf tus = 0 Then
Low led
DelayMS 50


EndIf

GoTo BASLA

End


arkadaşlar , bu kodu yazınca tuşa basıyorum led yanıyor ve sönmüyor :S herşey tamam sadece şu pic e 1 ile 0 arasında ayırım yaptırma mantığını anlayamadım. Bi el atsanız  :/ tekrar yoruyorum...

Maxim

#8
yukarda yazmıştım pull-up direnci takarsan butonun bir ucu gnd olsun
ve if tus=0 then diye devam et.
yani tuşa basınca giriş 0 olacak, basmaz isen 1 kalacak.

kodunu şöyle değiş bence, elseif falan gereksiz

If tus = 0 Then
High led
DelayMS 50
Else
Low led
DelayMS 50
endif

mclr ucu mutlaka 5 voltta olmalı


mesaj birleştirme:: 14 Haziran 2013, 23:39:03

hatta şöyle yap

Device = 16F84A
Xtal 4
Config FOSC_XT, WDTE_OFF, PWRTE_ON, CP_OFF

TRISA = %0000
TRISB = %00001000
PORTA=0
PORTB=0

Symbol led = PORTB.4
Symbol tus = PORTB.3

High led
DelayMS 50
Low led
DelayMS 50
High led
DelayMS 50
Low led
DelayMS 50

BASLA:
If tus = 0 Then High led :Else:Low led
GoTo BASLA

xcyqp09k2

hepinize çok teşekkürler sağolun arkadaşlar. yalnız çok ufak bir sorun var  :)

16f84a if else komutu düzgün çalışmıyor

butona parmağımı yaklaştırınca yanıyor uzaklaştırınca yanmıyor. sanırım vücut voltajından. nasıl düzeltebiliriz ?

mehmet

Pull-up/pull-down direnç
değerini düşük seçebilirsiniz...
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr
https://creativecommons.org/licenses/by/4.0/deed.tr "CC BY"

Maxim


xcyqp09k2

#12
http://i.imgur.com/CvovU2T.png

kondansatörlere takılmayın. unutmuşum 33 pf kullandım, ayrıca videodaki anahtara da takılmayın, harici osilatör kullanma seçeneği bırakmak için öyle birşey yaptım.

Maxim

#13
mclr ucundaki direnç nerede +5 volta giden ?  ::)
bakın daha önce yazmışım:
mclr ucu mutlaka 5 voltta olmalı  :D

portb.3 te pull-up direnci yok ?  :o
neden buton gene direnç üzerinden +5 volta bağlı ?  :P

ya yazdıklarımızı okumuyorsunuz  ;)
yada pull-up direnci ne demek bilmiyorsunuz  ;D
hangisi?

MrDarK

Maxim hocam bir sakin olalım :) Bir eğitimci adayı olarak bu davranışınızı hoş bulmuyorum biraz daha sabırlı olmalıyız :)

Arkadaş yeni bir şey keşfetmiş yaklaşım sensörlü buton :D Güzel ama enazından amator ruhu taşıyor. Ve hazır bir kod netten bulup yapıştırmıyıp sıfırdan uğraşma yoluna gidiyor.

Benim konuya ekleyebileceğim tek şey gerekirse o devre başında sabahla ama olabilecek tüm senaryoları seni yönlendiren herkesin tüm cevaplarını dene denemeden olmuyor diye bırakma çünkü ilerde hep tek kalacaksın bu konuda (:
Picproje Eğitim Gönüllüleri ~ MrDarK