D

Arkadaslar Proje proteusta çalışıyor fakat kurdum çalışmıyor

Başlatan desperado17, 29 Şubat 2012, 00:20:17

desperado17

@ DEVICE pic16F628                      'işlemci 16F628
@ DEVICE pic16F628, WDT_ON              'Watch Dog timer açık
@ DEVICE pic16F628, PWRT_ON             'Power on timer açık
@ DEVICE pic16F628, PROTECT_OFF         'Kod Protek kapalı
@ DEVICE pic16F628, MCLR_OFF            'MCLR pini kullanılıyor.
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak
OPTION_REG.7=1
'--------------------LCD Tanımlamaları------------------------------------------
DEFINE LCD_DREG      PORTB   
DEFINE LCD_DBIT         4      
DEFINE LCD_EREG      PORTB   
DEFINE LCD_EBIT        1         
DEFINE LCD_RWREG    PORTB   
DEFINE LCD_RWBIT        2      
DEFINE LCD_RSREG   PORTB   
DEFINE LCD_RSBIT      3            
DEFINE LCD_BITS         4      
DEFINE LCD_LINES      2
'--------------------Özel Karakter Tanımlamaları--------------------------------
LCDOUT $FE,$40, 6, 9, 9, 6, 0, 0, 0, 0
LCDOUT $FE,$48, 0, 1, 2, 18, 10, 4, 0, 0
'--------------------Port Ayarları----------------------------------------------
TrisA=%00011100
TrisB=%00000001

PortA=0
PortB=0
'--------------------Değişken Tanımlamaları-------------------------------------
TUS         VAR BYTE
ISI1        VAR WORD
ISI2        VAR BYTE   
SET         VAR WORD
SET1        VAR BYTE
SET2        VAR BYTE
HAS         VAR WORD
HAS1        VAR BYTE
HAS2        VAR BYTE
C           var byte
SAYAC       VAR BYTE
'--------------------Sensör Tanımlamaları---------------------------------------
Comm_Pin    VAR   PortA.1
Busy        VAR BIT
HAM         VAR   WORD
ISI         VAR WORD
SIGN        VAR BYTE
SIGN_BITI   VAR HAM.Bit11
NEGAT_ISI   CON 1
TEMP        VAR BYTE
Float       VAR WORD
HSAP        VAR WORD
'--------------------Buton Tanımlamaları----------------------------------------
ENTER       var PortB.0
YUKARI      var PortA.4
ASAGI       var PortA.3
ESC         VAR PortA.2
SYMBOL      KOMBI=PortA.0
'--------------------LCD yi Kullanıma Hazır Hale Getir--------------------------
LOW PORTB.2
lcdout $FE,1
PAUSE 200
lcdout $FE,1
'--------------------Değişken Değerleri-----------------------------------------
sayac=23
has=05
'--------------------İntro------------------------------------------------------
        LCDOUT $fe,1,"ISMAIL TUNGA"
        LCDOUT $FE,$C0,"TERMOSTAT"
        Pause  1000               
        LCDOUT $fe,1,"ORTAM SICAKLIGI"
        LCDOUT $FE,$C0,"OKUNUYOR"
        PAUSE 1000

c = 0
while c =< 22
Lcdout $fe, $80 + c , "."
Lcdout $fe, $7f + c , "."
Lcdout $fe, $7e + c , "."
Lcdout $fe, $7d + c , "."
Lcdout $fe, $7c + c , "."
Lcdout $fe, $7b + c , "."
Lcdout $fe, $7a + c , "."
Lcdout $fe, $79 + c , "."
Pause 50

Lcdout $fe,1
c = c + 1
wend
'--------------------Kayıt Edilen Eski Değerleri Geri Çekme---------------------
read 1,set1
READ 2,SET2
READ 3,HAS

set=set1*10+set2
'--------------------Program Başlangıcı-----------------------------------------
Basla:
    if ENTER=0 then
        while ENTER=0
        wend
        GOSUB AYAR
    ELSE
        IF sayac=25 then
        GOSUB SENSOROKU
        ENDIF
        LCDOUT $FE,128,"SICAKLIK:",SIGN,DEC2 ISI1,".",DEC1 ISI2,0,"C"
        LCDOUT $FE,192,"SET:",DEC2 SET1,".",DEC1 SET2," KOMBI:"
        PAUSE 100
        SAYAC=SAYAC+1
        IF SAYAC=26 THEN SAYAC=0     
    endIF
GOTO BASLA

AYAR:
tus=1
LCDOUT $FE,1
PAUSE 10
LCDOUT $FE,192,"ESC",$FE,203,"ENTER"

TARA:
select case TUS
    CASE 1
        LCDOUT $FE,128,"HASSASLIK AYARLA"
    case 2
        LCDOUT $FE,128,"SICAKLIK AYARLA "
    End select


IF YUKARI=0 THEN
UPP: IF YUKARI=0 THEN UPP
     TUS=TUS+1
     ENDIF
     
IF ASAGI=0 THEN
DNN: IF ASAGI=0 THEN DNN
        TUS=TUS-1
     ENDIF
IF TUS>2 THEN TUS=1
IF TUS<1 THEN TUS=2


IF ESC=0 THEN
ESCD: IF ESC=0 THEN ESCD
    LCDOUT $FE,1:pause 10
    GOTO BASLA
         
ENDIF


IF ENTER=0 THEN
ENS: IF ENTER=0 THEN ENS
        SELECT CASE TUS
            CASE 1
            GOsub H_AYAR 
            CASE 2
             LCDOUT $FE,1
            GOsub S_AYAR           
        END SELECT
       ENDIF
   
GOTO TARA

H_AYAR:       
        LCDOUT $FE,1
        LCDOUT $FE,128,"HASSASLIK:",DEC1 HAS1,".",DEC1 HAS2
        LCDOUT $FE,192,"ESC",$FE,203,"ENTER"
             
        IF YUKARI=0 then HAS=HAS+1
        PAUSE 100
         IF HAS=01 then HAS=51
            IF ASAGI=0 then HAS=HAS-1
            PAUSE 100
               IF HAS=51 then HAS=01         
                 IF ENTER=0 THEN
                    WHILE ENTER=0
                    WEND
                    WRITE 3,has:PAUSE 10
                    LCDOUT $FE,1
                    LCDOUT $FE,128,"AYARLANDI..."
                    PAUSE 400
                    GOTO AYAR
                 ENDIF
                        IF ESC=0 THEN
                            WHILE ESC=0
                            WEND
                            GOTO ESCD
                        ENDIF                   
               PAUSE 100
H_HESAP:       
        HAS1=HAS/10
        HAS2=HAS//10

         
             GOTO H_AYAR     
RETURN


S_AYAR:
        LCDOUT $FE,1
        LCDOUT $FE,128,"SICAKLIK:",DEC2 SET1,".",DEC1 SET2
        LCDOUT $FE,192,"ESC",$FE,203,"ENTER"
             
        IF YUKARI=0 then SET=SET+1
        PAUSE 100
         IF SET=001 then SET=400
            IF ASAGI=0 then SET=SET-1
            PAUSE 100
               IF SET=401 then SET=001
                     
                 IF ENTER=0 THEN
                    WHILE ENTER=0
                    WEND
                    WRITE 1,SET1:PAUSE 10
                    WRITE 2,SET2:PAUSE 10
                    LCDOUT $FE,1
                    LCDOUT $FE,128,"AYARLANDI..."
                    PAUSE 400
                    GOTO AYAR
                 ENDIF
                        IF ESC=0 THEN
                            WHILE ESC=0
                            WEND
                            GOTO ESCD
                        ENDIF                   
               PAUSE 100
S_HESAP:       
        SET1=SET/10
        SET2=SET//10

             GOTO S_AYAR     
RETURN


'--------------------Sensör Oku-------------------------------------------------
SENSOROKU:
           
           OWOUT   Comm_Pin, 1, [$CC, $44]' ISI değerini oku
Bekle:
           OWIN    Comm_Pin, 4, [Busy]    ' Busy değerini oku
           IF      Busy = 0 THEN Bekle  ' hala meşgulmü? , evet ise goto Bekle..!
           OWOUT   Comm_Pin, 1, [$CC, $BE]' scratchpad memory oku
           OWIN    Comm_Pin, 2, [HAM.Lowbyte, HAM.Highbyte]' İki byte oku ve okumayı bitir.
           GOSUB   Hesapla
           RETURN
   
Hesapla:                 ' Ham değerden Santigrat derece hesabı
    Sign  = "+"
    IF SIGN_BITI = NEGAT_ISI THEN
       Sign   = "-" 
       temp=($ffff-ham+1)*625
       ISI  = DIV32 10
       GOTO GEC   
    endif
    TEMP = 625 * (HAM+1)        '
    ISI = DIV32 10          ' Div32 hassas derece hesabı için 32 bit bölme yapıyoruz.
GEC:
   ISI2 = (ISI //1000)/100
   ISI1 = (ISI/1000)-1
   
   HSAP = (ISI1*10)+ISI2
   
KARSILASTIRMA:   
   
   IF HSAP<SET THEN       
     HIGH KOMBI
     LCDOUT $FE,207,1
   ENDIF
         
   IF HSAP>SET+HAS THEN     
     LOW KOMBI
     LCDOUT $FE,207," "
   ENDIF
RETURN

introyu geçiyor donup kalıyor :S Proje ekte mevcut bi yardımcı olursanız sevinirim.

ete

Sigorta ayarlarından sonra aşağıdaki satırları ilave et.

DEFINE OSC 4
CMCON=7

SOnra derle ve yeniden dene bakalım.

Ete

desperado17

hocam herşey çalışıyor fakat sıcaklık ölçmüyor 64,5 yazıyor. Hesaplama kısmında hata yaptım sanırım :(

ete

Öncelikle Sensör bağlantılarını kontrol et. Simulasyonda da önce 64,5 derece yazıyor ama biraz bekleyince doğru dereceyi yazıyor ekrana.
Aslında hesap kısmında kullanılan hesap mantığı çok eski. Onu değiştirmek gerekiyor.
Hesap kısmını aşağıdaki şekilde değiştir.
Hesapla:                 ' Ham değerden Santigrat derece hesabı
    Sign  = "+"
    IF SIGN_BITI = NEGAT_ISI THEN
       Sign   = "-" 
       HAM=~HAM+2
    endif
    ISI=HAM*10/16       '
GEC:
   ISI2 = ISI //10
   ISI1 = ISI/10

   HSAP = ISI

Ayrıca programda BASLA satırından evvel aşağıdaki satırları ilave ediver.
GOSUB SENSOROKU
GOSUB SENSOROKU
PAUSE 700

Sonra yeniden dene bakalım. Dediğim gibi sensörün doğru bağlı olduğundan pullup direncinin olduğundan emin ol.

BU arada sonradan fark ettimki programda anlamsız bir şekilde her 25 döngüde bir sıcaklık okuması yapıyorsunki buda sıcaklığın çok geç değişmesine sebep oluyor. Bence o şartı oradan çıkarmalısın.

Ete

desperado17

hocam sıcaklık ölçümü sıkıntısız çalışıyor. Fakat çıkışı istediğim değerde kesmiyor nedendir acaba :S

Proteus' ta kesiyor

Hocam birde IC prog kullanıyorum 10 kere felan pic' i programladım şimdi "doğrulama hatasının oluştuğu adres: 0001h !
Yazıyor elimde 3 tane pic var hepsinde aynı

ete

İŞlemcileri programlayamadığın belli oluyor. Bu nedenlede sistem çalışmıyor elbette.
ELindeki picler arızalı olabilir. Yada programlayıcında bir sorun olabilir.
Geçmiş yllarda IC-Prog kullandığım günler aklıma geldi. Kullandığın programlayıcı seri portdan çalışan (JDM) bir alet ise sorun muhtemelen elindeki programlayıcıda dır. 16F628 de LVP özelliği vardır ve bu özelliği taşıyan bacağın 1K direnç ile GND ye bağlı olması gerekir. Bu bacak da pic in 10 nolu bacağıdır. Şayet bu direnç yok ise bağlamanı öneririm.
Kullandığın programlayıcıyı söylersen belki başka alternatif çözümler üretebiliriz. Ama şayet USB den çalışan bir programlayıcı kullanmıyorsan en kısa zamanda bir tane edinmeni şiddetle öneririm.

Ete

desperado17

Hocam ilgilendiğiniz için teşekkur ederim öncelikle ICprog kullanıyorum program olarak. Kullandıgım devreyi ekte verdim dandik bi devre iş görür diye kurdum hemen. "multi programmer 5v2" yapıcam zif soket alamadım hersey hazır çarşıya inersem alıcam, siz ne kullanıyorsunuz yada ne tavsiye edersiniz hocam?

Mucit23

Bu tür Basit programlayıcılarla vaktini boşa harcıyorsun. Artık USB programlayıcılar çok ucuzladı. Uygun Bir Pickit2 klonu senin birçok işini görür. Kendin yapabileceğin gibi hazırda alabilirsin.
Ben bunu kullanıyorum. İyi sayılabilecek bir klondur.
http://www.expkits.com/?s=pickit2.htm
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

KAZIMUGUR

Alıntı yapılan: Mucit23 - 01 Mart 2012, 18:20:43
...Ben bunu kullanıyorum. İyi sayılabilecek bir klondur.
http://www.expkits.com/?s=pickit2.htm...

Atmelde programlıyor galiba , üzerindeki yazılara bakılırsa .

desperado17

arkadaşlar ilgilendiğiniz için teşekkürler. 65 tl gibi bi rakam yazmışlar bunun yanında yazılımı geliyor heralde değil mi ?

ete

Yazılım Microchip sitesinde ücretsiz veriliyor ama sanırım EXPKITS yazılımıda veriyor. 

Ete

desperado17

hocam ekteki devreyi kurdum sorunsuz programlıyor. Devreyi de ekliyorum yapmak isteyenler yapabilir. Yardımcı olurum.


desperado17

hocam programladım fakat bir sorun var hassaslık ve set ayarını yapmama rağmen sıcaklık set değerini geçse de çıkış pasif olmuyor. Acaba nerede hata yaptım.

ete

Programında şu satırı;
IF HSAP>SET+HAS THEN     
aşağıdaki şekilde düzenle;
IF HSAP>(SET+HAS) THEN     

BU programı ben denemiştim. İsis de sorunsuz çalışıyor idi. Pasif olma durumu , okunan sıcaklığın (SETdeğer + Has) değeri ni aşması halinde pasif oluyor. Bu kısımda sorunsuz çalışıyor idi.
Sende gerçek devrede olan sorunu anlamak için ekrana;
Set=xxx  , Has=xx
HSAP=xxx
şeklinde değerleri yazdır ve bu şekilde sensörü gerekirse elinle ısıtarak hemde ekrandan kontrol ederek. Kontrol et.
Böylece aktif ve pasif olma durumunu ekrandaki verileri izleyerek kontrol edebilirsin. Daha sonra bu verilere bakarak sorunu anlayabilirsin.

Örneğin Okunan sıcaklık (HSAP) set değerini aştığı zaman ki değerler nelerdir burayada yaz yorum yapalım.

Ete

desperado17

hocam set:800 has:05 HSAP:255

Sıcaklık: 25,5 Set:24,0 Hassaslık:0,5

Set niye 800 çıktı anlamadım :S

Bu arada hocam set degerini 0,5 yükseltince 805 oluyo değer.

Powered by EzPortal