Bir yerde yanlış yaptım ama..

Başlatan dijital74, 08 Eylül 2007, 17:26:27

dijital74

Arkadaşlar PBP kullanarak 16f84 ile 6 giriş 6 çıkış yapmaya çalışıyorum. Onun için yazdığım programda bir hata var sanırım. Kaynak kodunu ve hata mesajını veriyorum. Bir el atın üstadlar nerede yanlış yaptım.

****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2007 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 08.09.2007                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
include "16F84A.BAS"

led1 var byte
led2 var byte
led3 var byte
led4 var byte
led5 var byte
led6 var byte
buton1 var byte
buton2 var byte
buton3 var byte
buton4 var byte
buton5 var byte
buton6 var byte


LED1    =   PORTA.0
LED2    =   PORTA.1
LED3    =   PORTA.2
LED4    =   PORTA.3
LED5    =   PORTB.0
LED6    =   PORTB.1
BUTON1  =   PORTB.2
BUTON2  =   PORTB.3
BUTON3  =   PORTB.4
BUTON4  =   PORTB.5
BUTON5  =   PORTB.6
BUTON6  =   PORTB.7

:inital
TRISA = 0
TRISB = %00111111

PORTA = 0
PORTB = %00111111

:dongu

if BUTON1=0 THEN LED1=1 AND BUTON1=1
IF BUTON2=0 THEN LED2=1 AND BUTON2=1
IF BUTON3=0 THEN LED3=1 AND BUTON3=1
IF BUTON4=0 THEN LED4=1 AND BUTON4=1
IF BUTON5=0 THEN LED5=1 AND BUTON5=1
IF BUTON6=0 THEN LED6=1 AND BUTON6=1

goto dongu
END
'*****************************************

Hata ise;

D:\PBP\PIC14EXT.BAS   ERROR Line 12: Redefinition of VAR.
D:\PBP\PIC14EXT.BAS   ERROR Line 13: Redefinition of VAR.
D:\PBP\PIC14EXT.BAS   ERROR Line 14: Redefinition of VAR.
D:\PBP\PIC14EXT.BAS   ERROR Line 15: Redefinition of VAR.
D:\PBP\PIC14EXT.BAS   ERROR Line 16: Redefinition of VAR.
D:\PBP\PIC14EXT.BAS   ERROR Line 17: Redefinition of VAR.
D:\PBP\PIC14EXT.BAS   ERROR Line 18: Redefinition of VAR.
D:\PBP\PIC14EXT.BAS   ERROR Line 19: Redefinition of VAR.
D:\PBP\PIC14EXT.BAS   ERROR Line 20: Redefinition of VAR.
D:\PBP\PIC14EXT.BAS   ERROR Line 21: Redefinition of VAR.
D:\PBP\PIC14EXT.BAS   ERROR Line 22: Redefinition of VAR.
D:\PBP\PIC14EXT.BAS   ERROR Line 23: Redefinition of VAR.
D:\PBP\PIC14EXT.BAS   ERROR Line 24: Redefinition of VAR.
D:\PBP\PIC14EXT.BAS   ERROR Line 25: Redefinition of VAR.
D:\PBP\PIC14EXT.BAS   ERROR Line 26: Redefinition of VAR.
D:\PBP\PIC14EXT.BAS   ERROR Line 27: Redefinition of VAR.
D:\PBP\PIC14EXT.BAS   ERROR Line 28: Redefinition of VAR.
D:\PBP\PIC14EXT.BAS   ERROR Line 29: Redefinition of VAR.
D:\PBP\PIC14EXT.BAS   ERROR Line 30: Redefinition of VAR.
D:\PBP\PIC14EXT.BAS   ERROR Line 31: Redefinition of VAR.
D:\PBP\PIC14EXT.BAS   ERROR Line 32: Redefinition of VAR.


Anlamadığım nedir biliyor musunuz? Benim yazdığım program satırlarından hata bulacağına kendi içindeki dosyalarda buluyor ya işte beni çıldırtan bu. İlkin MCS de denemiştim ve ondan kaynaklandığını düşündüm. Sonra MPLABda denedim olmayınca bir yerde yanlış yaptığım sonucuna vardım.

OG

include "16F84A.BAS" satırını kaldır.

ve

:dongu değil
dongu:

:inital değil
inital:

Bir de IF koşullarında hata var.

if BUTON1=0 THEN LED1=1 AND BUTON1=1 olmamalı

if BUTON1=0 THEN
LED1=1 : BUTON1=1
ENDIF

gibi olmalı.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

Fixxer

(SYMBOL LED1 = PORTA.0)     hepsini bu şekilde düzenle
(buton6 var byte )                  bunlarıda sil değişken değiller çünki
...............................

dijital74

Söylediklerinizi uyguladım ama simülasyonda sıkıntı çıkıyor. Mesela butonların bağlı olduğu  PORTBnin başlangıç değerleri 0 olması lazım oysaki butonlar açık olduğu halde(butonlar +ya bağlı) lojik 1 gösteriyor. Sorun benim programda mı diye butonları + uçtan ayırdığımda PORTB terminalleri GRİ renkte simgeleniyor. Bunun sebebini önce port sayısı az olduğu için B portunu hem giriş hem çıkış olarak kullandığım PIC16F84de görmüştüm. Sonra dedim ki 16f628 kullanayım A çıkış olsun B giriş olsun devreyi ona göre kurdum yine aynı.

Diğer yandan pic16f628de RA5,RA6 ve RA7 yi kullanmak için (ben sadece RA5i kullandım) başlangıçta özel tanımlama yapmam gerekiyor mu? Ne zaman tanımlama yapsam başlangıçta mutlaka bir engele takılıyor bir türlü anlamış değilim.

Devrenin şemasını ve kaynak kodlarını upload ediyorum.
Şema;


Kaynak kodlar;
'include "16f628a.bas"
'Include "modedefs.bas"

SYMBOL LED1 = PORTA.0
SYMBOL LED2 = PORTA.1
SYMBOL LED3 = PORTA.2
SYMBOL LED4 = PORTA.3
SYMBOL LED5 = PORTA.4
SYMBOL LED6 = PORTA.5

SYMBOL BUTON1 = PORTB.0
SYMBOL BUTON2 = PORTB.1
SYMBOL BUTON3 = PORTB.2
SYMBOL BUTON4 = PORTB.3
SYMBOL BUTON5 = PORTB.4
SYMBOL BUTON6 = PORTB.5

inital:
TRISA = 1
TRISB = 0

PORTA = 0
PORTB = 0

dongu:

if BUTON1=1 and led1=0 THEN
LED1=1:BUTON1=0
endif

if buton1=1 and led1=1 then
led1=0:buton1=0
endif

IF BUTON2=1 and led2=0 THEN
LED2=1 : BUTON2=0
endif

if buton2=1 and led2=1 then
led2=0 : buton2=0
endif

IF BUTON3=1 and led3=0 THEN
LED3=1 : BUTON3=0
endif

if buton3=1 and led3=1 then
led3=0:buton3=0
endif

IF BUTON4=1 and led4=0 THEN
LED4=1 : BUTON4=0
endif

if buton4=1 and led4=1 then
led4=0:buton4=0
endif

IF BUTON5=1 and led5=0 THEN
LED5=1 : BUTON5=0
endif

if buton5=1 and led5=1 then
led5=0 :buton5=0
endif
 
IF BUTON6=1 and led6=0 THEN
LED6=1 : BUTON6=0
endif

if buton6=1 and led6=1 then
led6=0:buton6=0
endif  

goto inital
END
'****************************************************

mustafa_cmbz




1. devre şemanı burdaki gibi düzenle sebebi ise senın devrende dikkat ettiysen pull down dirençlerini sen butonlara seri bağlamışsın bu yüzden ilk çalıştığında sorunlar yaşayabilirsin bunun daha iyi anlayabilmek için ete hocanın verdiği derslerin ilk sayfalarını oku hatta hepsini oku..

2. isis'te ,devrede ledlerin önüne 1k değilde 100r gibi bir direnç koy yoksa tam verim alamazsın 1k koyunca ledler az yanıyor ama 100r koyunca sağlıklı bir çalışma elde edersin tabi real de 1k koycaksın :D


3.pic in 3. bacağı open kollectör mü ne onun tam bilmiyorum ynaı buraya led bağlarsan sabaha kadar beklersin yansın diye onun için bu pini transistörler sürmek gerekiyor galiba ama pk bilmiyorum...bunun yerine devrenı ve programında kı port değişikliklerini düzelt ve yenıden dene....

bu arada ra5 i de değiştir o da yanlış :D o devamlı 1 olabilir ama realde onu 10k ile +5v ta bağlıcan...

kolay gelsinn....

dijital74

Devredeki pici PIC16F84A olarak değiştirip buton bağlantılarını şemadaki gibi yaptım.Fakat devreyi istediğim gibi çalışır hale getiremedim. Şu an ilgili çıkışın butonuna bastığımda önce ilgili led yanıp sönüyor sonra bastığında tekrar yanıyor. Herhangi bir çıkışı bu şekilde aktif hale getirdikten sonra çıkışı kapatamıyorum ya da diğer bir çıkıştaki ledi yakıp söndüremiyorum. Programın son hali aşağıdaki gibidir.

Include "modedefs.bas"

SYMBOL LED1 = PORTA.0
SYMBOL LED2 = PORTA.1
SYMBOL LED3 = PORTA.2
SYMBOL LED4 = PORTA.3
SYMBOL LED5 = PORTB.0
SYMBOL LED6 = PORTB.1

SYMBOL BUTON1 = PORTB.2
SYMBOL BUTON2 = PORTB.3
SYMBOL BUTON3 = PORTB.4
SYMBOL BUTON4 = PORTB.5
SYMBOL BUTON5 = PORTB.6
SYMBOL BUTON6 = PORTB.7

inital:
TRISA = %00000000
TRISB = %11111100

PORTA = 0
PORTB = 0

dongu:

if BUTON1=1 then
toggle led1
GOTO ark_sondur
endif
 
IF BUTON2=1 then
Toggle led2
goto ark_sondur
endif

IF BUTON3=1 then
toggle led3
goto ark_sondur
endif

IF BUTON4=1 then
toggle led4
goto ark_sondur
endif

IF BUTON5=1 then
toggle led5
goto ark_sondur
endif
 
IF BUTON6=1 then
toggle led6
goto ark_sondur
endif

goto dongu

ark_sondur:
pause 100
return

END
'*******************************************************

Ha gayret başarıcam;)

dijital74

Bu arada PIC16F628in ek port uçlarını kullanmak için bir düzenleme gerekiyor mu _? PIC16F84 ün RA4ünün open drain olması girişte mi çıkış ta mı fark ediyor_?

mustafa_cmbz

'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2007 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 09.09.2007                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************


SYMBOL LED1 = PORTA.0
SYMBOL LED2 = PORTA.1
SYMBOL LED3 = PORTA.2
SYMBOL LED4 = PORTA.3
SYMBOL LED5 = PORTB.0
SYMBOL LED6 = PORTB.1

SYMBOL BUTON1 = PORTB.2
SYMBOL BUTON2 = PORTB.3
SYMBOL BUTON3 = PORTB.4
SYMBOL BUTON4 = PORTB.5
SYMBOL BUTON5 = PORTB.6
SYMBOL BUTON6 = PORTB.7

inital:
TRISA = %00000000
TRISB = %11111100

PORTA = 0
PORTB = 0

dongu:

if BUTON1=1 then
toggle led1
GOTO ark_sondur
endif

IF BUTON2=1 then
Toggle led2
goto ark_sondur
endif

IF BUTON3=1 then
toggle led3
goto ark_sondur
endif

IF BUTON4=1 then
toggle led4
goto ark_sondur
endif

IF BUTON5=1 then
toggle led5
goto ark_sondur
endif

IF BUTON6=1 then
toggle led6
goto ark_sondur
endif

goto dongu

ark_sondur:
pause 100
goto dongu

END



arkadasım devreyi ben kurdum ve verdiğin son programın sonuna retrun yerine goto basla yaptım devre gayet güzel çalıştı eğer ne yapmak istedeğini açıklarsan örnek kod yayınlarım fakat herşeyi bizden bekleme programda butonlardan bırını yanlış tanıtmıssın onu düzelt...birde ra4 e gelince onu pek bilmiyorum ben genelde pic o kadar full çalıştırcak uygulamalar yapmadım ama ete hocanın yayınladığı derslerin 1. sinin 2ve3. sayfasında yer alıyor....incele araştır pek vaktım yok olsa daha ayrıntılı anlatacağım ama sende o dediğim dersleri oku ve o örneklerin kodlarını yenıden yazmaya bak emınım senın işine yarıcak kodlar orda var :D

kolay gelsin...

dijital74

Ark söndürme rutininin içindeki Return komutu yerine goto döngu komutunu yerleştirdim düzeldi. Buton tanımlamalarında herhangi bir yanlışlık yok en az on kere kontrol ettim. RA4 çıkışı open drain olduğu icin onu es geçip kullanmamıştım.

Şu an devre benim istediğim gibi çalışıyor. İlginiz için çok teşekkürler. Olmasaydınız yapamazdım.