PIC BASIC PRO'ya GİRİŞ ve YAŞADIĞIM SIKINTI..

Başlatan Acoustica, 29 Ocak 2011, 19:51:27

ihun

selamın aleyküm arkadaşlar.

bende yeniyim ve 16f84 için yazıp derlediğim bir programla ilgili bir hatayı sormak istedim. ilk yazdığım program şu;

TRISA=255
TRISB=0

DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 3
DEFINE LCD_RWREG PORTB
DEFINE LCD_RWBIT 2
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 1
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2

SAY VAR BYTE
SYMBOL YUKARI=PORTA.1
SYMBOL ASAGI=PORTA.0

SAY=0

LOW PORTB.2
LCDOUT $FE,1
PAUSE 200

BASLA:

IF YUKARI=0 THEN
    IF say<255 THEN
    say=say+1
    PAUSE 20
    else
    say=255
    endIF
ENDIF
   

IF ASAGI=0 THEN
    IF say>0 THEN
    SAY=SAY-1
    PAUSE 20
    ELSE
    SAY=0
    ENDIF
ENDIF


LCDOUT $FE,2,"SAYI=",#SAY
GOTO BASLA
END


ancak proteus taki denemede, sayılan değer yukarı sayarken problem yok. ancak aşağı doğru saydırırken 100 e kadar problem yok ancak devamında 990,980,970,960........ gibi aşağıya doğru iniyor. anladımki, 099 yazacağına 990 diye aşağıya sayıyor (doğrumu anladım bilemiyorum). daha sonra şu düzeltmeyi yaptım

TRISA=255
TRISB=0

DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 3
DEFINE LCD_RWREG PORTB
DEFINE LCD_RWBIT 2
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 1
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2

SAY VAR BYTE
SYMBOL YUKARI=PORTA.1
SYMBOL ASAGI=PORTA.0

SAY=0

LOW PORTB.2
LCDOUT $FE,1
PAUSE 200

BASLA:

IF YUKARI=0 THEN
    IF say<255 THEN
    say=say+1
    PAUSE 20
    else
    say=255
    endIF
ENDIF
   

IF ASAGI=0 THEN
    IF say>0 THEN
    SAY=SAY-1
    PAUSE 20
    ELSE
    SAY=0
    ENDIF
ENDIF


LCDOUT $FE,2,"SAYI=",DEC3 SAY
GOTO BASLA
END

yani en sondaki LCDOUT kısmında #sayı yerine dec3 sayı yazdım. ve problem düzeldi. ben şimdi bu sorunun oluşma sebebini ve dec3 yazınca neden düzeldiğini merak ediyorum.

ve ayrıca

bir de programın başında DEVICE tanımlamalarını yazınca microcode studio da bir hata mesajı alıyorum;

@ DEVICE pic16F84
@ DEVICE pic16F84, WDT_on
@ DEVICE pic16F84, PWRT_ON
@ DEVICE pic16F84, PROTECT_OFF
@ DEVICE pic16F84, XT_OSC

bunun sebebi MPLAB programının hasarlı olmasından kaynaklı olabilirmi?



omereliusuk

#16
SAY VAR BYTE
IF YUKARI=0 THEN
    IF say<255 THEN '
    say=say+1
    PAUSE 20
   else '
    say=255 '
    endIF

ENDIF

kırmızı kodlar fazla neden dersen zaten say byte tipi değişken dolayısıyla say değeri 255 ten fazla olamaz. bu değeri 1 daha artırırsan 0 değerine ulaşır. yani 256 olmaz.

#say
sayının değerini gösterir. şöyle
sayın 1 ise 1; 2 ise 2; 99 ise 99 ; 100 ise 100
şimdi 100 e kadar geldin ve geriye 99 dedin. sonraki bir hanede işlem yapılmıyor. dolayısıyla senin sayın 990 oluyor. aslında sayında sorun yok ama sayının görüntüsünde sorun var.
dec3 dediğin zaman ise her seferinde sayın 3hane olarak yazılıyor.
yani sayı 1 ise gösterim 001 ; sayı 3 ise 003;
ama eğer sayın 4 hane olursa bu sefer görünen sayı 000 olarak gösterime giriyor. yani 4. hane gösterimde değil. onun için dec4 ifadesi kullanmalısın.

bir de illaki pbp kullanacağım diyorsan bunu yerine Proton kullan benzer kodlar daha çok işlev. yok daha iyi bir şey kullanmak istiyorsan ben C dilini yeni yeni öğreniyorum. baktıgım zaman harika işler çıkacak gibi. protonda yazdığım 1 sayfa kodu ccs ile neredeyse 1 satırda hallediyorum <en azından hallettiğmi sanıyorum>.

dombilik

Röleniz de boş bir kontak,mikrokontrolörünüzde de
rezerve bir giriş bacağınız varsa kontağı bu girişle
irtibatlayıp "TOGGLE" komutunu kullanmadan;

RÖLE ON  and BUTON BASILI ise   RÖLE bıraksın
RÖLE OFF  and BUTON BASILI ise   RÖLE çeksin

mantığı ile de yazılımınızı ve devrenizi gerçekleştirebilirsiniz.
Ayrıca 12 serisi PIC hiç kullanmadım ama kenar seçim (yükselen,düşen) olayı varsa
düşen kenarda buton u kontrol etmek de devreyi kararlı bir hale getirebilir.
Bu arada mesleğe tekrar dönmenizden dolayı sizi tebrik ederim.Aramıza hoşgeldiniz.

Bildiklerini kime miras bıraktın?kimseyemi? O zaman bildiklerinin ne önemi kalır. ******** /////////// ******** PROTON-ASM PROTEUS 7.4 SP3 EAGLE 5.40

ihun

omereliusuk kardesim, acıklaman için teşekkür ederim, faydası oldu. sanırım LCDOUT kısmında $FE,2 ........   yazacağıma, LCDOUT $FE,1 ile yapmaya çalışmış olsaydım bu sorunu görmeyecektim ancak, ekran sürekli olarak silinip yazılacağından dolayı kırpışacaktı (denemedim şimdi düşündüm).

bir de
SAY VAR BYTE
IF YUKARI=0 THEN
    IF say<255 THEN '
    say=say+1
    PAUSE 20
    else '
    say=255 '
    endIF
ENDIF
koddan sonra 0' a gitmesini değil de, 255 de sabit kalması için bu şartı koymuştum. denememde de isatediğimi elde etmiş oldum. ancak başka bir türlü bunu elde edebilirmiyim düşünmedim..

bu amaç için başka bir kod kullanabilirmiydim sizce? yani sayma işlemi sonucunda 255 te (veya 100, 50, 43 vs. de olabilir) durdurabileceğim daha kısa bir kod.....

omereliusuk

#19
IF YUKARI=0 THEN
    IF say<255 THEN say=say+1'
   PAUSE 20
endif


sayı 255 ten küçükse sayıya bir ekleyecek; 254+1 =255 işlem doğru
sayı 255 olduğu zaman sayı 255 ten küçük olmayacağı için sayıyı artıramayacak. dolayısıyla sayı 255'te kalacak. en azından else kalkmış oldu.

Acoustica

Alıntı yapılan: dombilik - 23 Şubat 2011, 22:19:10
Röleniz de boş bir kontak,mikrokontrolörünüzde de
rezerve bir giriş bacağınız varsa kontağı bu girişle
irtibatlayıp "TOGGLE" komutunu kullanmadan;

RÖLE ON  and BUTON BASILI ise   RÖLE bıraksın
RÖLE OFF  and BUTON BASILI ise   RÖLE çeksin

mantığı ile de yazılımınızı ve devrenizi gerçekleştirebilirsiniz.
Ayrıca 12 serisi PIC hiç kullanmadım ama kenar seçim (yükselen,düşen) olayı varsa
düşen kenarda buton u kontrol etmek de devreyi kararlı bir hale getirebilir.
Bu arada mesleğe tekrar dönmenizden dolayı sizi tebrik ederim.Aramıza hoşgeldiniz.
Hocam Yükselen ve alçalan mantığı nedir tam manası ile kavrayamadım,Anlatırsanız sevinirim.
Bu arada aranızda olmak benim için bir onur,bir mutluluk sizin gibi vefalı ve fedakar dostlar sayesinde bir yerlere varabilirsek
ne mutlu bize.
Yardımlarınız için teşekkürler.
Tufan Han DAĞ
Dahilerin yüzde biri hüner, yüzde doksan dokuzu da terdir. "Thomas Edison"  Eski "TufanHan"

Acoustica

S.a ete hocam,maxim,dombilik,gevv ve adini veremedigim diger arkadaşlar, yardimlari miz icin o kadar mutesekkiri  ki...anlamadigim bir konuvar dombilik arkadasimiz bahsetmis, yukselen ve alcalan kenar nedir birisianlatabilir mi?
Dahilerin yüzde biri hüner, yüzde doksan dokuzu da terdir. "Thomas Edison"  Eski "TufanHan"

Mucit23

Yükselen kenar herhangi bir bacağın(ucun,pinin,portun vs vs vs :) ) sıfır konumundayken 1 yani +5v konumuna geçtiği andır. Bu noktaya yükselen kenar derler. Düşen kenar ise tam tersidir.
Resim daha iyi anlatacaktır.
[IMG]http://img822.imageshack.us/img822/6570/karedalga.gif[/img]

Uploaded with ImageShack.us

dombilik

Sorunuzu şimdi gördüm.Ama geç kalmışım cevaplamakta..
Fakat mucit23 ustam gayet güzel açıklamış..
Bildiklerini kime miras bıraktın?kimseyemi? O zaman bildiklerinin ne önemi kalır. ******** /////////// ******** PROTON-ASM PROTEUS 7.4 SP3 EAGLE 5.40

Acoustica

S.a yeniden gunaydin,olayi tam manasi ile kavradim yalniz soyle bir durum var mantiken kafama yatmayan nokta da bu " dusen kenar devreyi daha kararli hale getirebilir " aciklamalara gore dusen kenar 5 volttan yani 1 den 0 volta yani 0 noktasina dusen nokta ise,ve benim devrem ise porta uygulanan data 1 ise diger portu 1 yap seklinde oldugundan yukselen kenar devreyi daha kararli hala getirmez mi?
Yardimlariniz icin tesekkurler,iyi calismalar.
Tufan Han DAĞ
Dahilerin yüzde biri hüner, yüzde doksan dokuzu da terdir. "Thomas Edison"  Eski "TufanHan"

ete

Özellikle buton ve diğer girişlerde düşen kenar kullanılması her zaman avantajlıdır. Çünki pinlere uygulanacak değer GND seviyesindedir.
Bu seçimin bir diğer avantajıda B portunu kullandığınızda dahili pullup dirençlerini kulllanabilme imkanınız olmasıdır. Böylece bu porta yapılacak girişlerde ayrıca bir pullup direnci kullanmamış olursunuz. Bu nedenle kendinizi daima düşen kenar tetiklemesi kullanımı konusunda alıştırımanız menfaatinize olacaktır.

Düşen yada yükselen kenar uygulamaları devrenin kararlı yada kararsız çalışmasını etkilemez. Bu nedenle tercihinizi başka faktörlere göre yapmanız gerekir. En önemli etken yukarıda açıkladıklarım.
Bunlar benim aklıma gelenler. Başkaları daha farklı yaklaşım içinde olabilirler.  Fikri olan söyleyebilir.

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

dombilik

Alıntı yapılan: TufanHan - 22 Şubat 2011, 22:28:42
Sevgili ete hocam,
Program çalışmadı.Sadece butona bastığım an voltaj oluyor.
Elimi butondan çekince o volta çekiyor.İç osilatör frekansını 4.00Mhz ayarladım.
Dediğiniz gibi comparatör ve ADC ile ilgili komutları ANSEL VE CMCON kaldırdım.
Geri kalan kısmı birebir aynı.
Sistem tamamen çizdiğim şema ile aynı.Ama çalışmıyor.
Nerde yanlış yapıyoruım?
Yardımcı olursanız çok sevinirim.
Tufan Han DAĞ


"Butona bastığım an lamba yanıyor çektiğimde sönüyor"
Bu açıklamanıza göre söylemiştim düşen kenarı da kullanabilirsiniz diye..

Bildiklerini kime miras bıraktın?kimseyemi? O zaman bildiklerinin ne önemi kalır. ******** /////////// ******** PROTON-ASM PROTEUS 7.4 SP3 EAGLE 5.40