Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

Hex kodunda düzeltme yapma

Başlatan merter_, 13 Nisan 2014, 13:57:30

merter_

s.a ustalar bir tane devrem var LCD ekranda  tarh saat derece gösteren bir devre ama LCD ekranda tarih saat bilgisi alamıyorum kesik kesik çizgiler çıkıyor muhittin hocam yazlımla ilgili sorun olduğunu söyledi

programın kitlenmesini engelleyen bir sayıcı, eğer sen bunu açıp, arada bir sıfırlamazsan programın devamlı resetlenir. bence WDT_N yazan yeri Sil yada WDT_OFF yap

acaba buna göre yazılımda tam olarak ne yapmak lazım ben pic programlama bilmiyorum da..
http://s3.dosya.tc/server21/v0Aw3D/hex.rar.html

Kabil ATICI

Öncelikle ekranın çalıştığına emin ol. Bunun için daha önce ekran ile çalışmış bir arkadaşın varsa onun devresinde dene.

Devreyi nasıl kurduğunu bilmiyoruz, devre üzerinde hata veya başka bir durum olabilir. Ama ekrandaki rasgele çizgiler genellikle ekran bozluduğu zaman oluşur. Yoksa ekran bir şekilde sürülemezse sadece ikinci satır komple siyah bloklar çıkar. (Karakter LCD kullandığımızı varsayarsak) Bazı ekranlarda birinci satırda.

İşlemcinin belirtilen tipte olduğuna emin ol.

Konuyu yanlış yere açmışsın galiba. Orjinalde Asm değil picbasic ile yazılmış bir program. O asm dosyası  mutant bir dosya.
ambar7

muhittin_kaplan

#2
Yazilimin xxxx.bas olani verirsen birileri hex yapar

muhittin_kaplan

Yok vat bana gonderdigin dosyada

muhittin_kaplan

uzantısı pbp miş

'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2008 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 18.05.2008                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
@ 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

Include "MODEDEFS.BAS"
ON INTERRUPT GoTo Kesme
OPTION_REG=%0000000     
INTCON=%10010000
CMCON=7
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
'***********Saat İçin Gerekli Port Tanımlamaları***********
RTC_RST     var     PORTA.0
RTC_DTA     var     PORTA.7
RTC_CLK     var     PORTA.6
'***********Özel Karakter Tanımlamaları
LCDOUT $FE,$40, 6, 9, 9, 6, 0, 0, 0, 0 'Derece İşareti
'***********Port Ayarları***********
TrisA=%00011000
TrisB=%00000001

PortA=0
PortB=0
'***********RTC DS1302 DEĞİŞKENLERİ***********
SN      VAR BYTE
DAK     VAR BYTE
SAAT    VAR BYTE
GUN     VAR BYTE
AY      VAR BYTE
YIL     VAR BYTE
MEM     var byte
SAYI    VAR BYTE
DAY     var byte
ONLAR   VAR BYTE
BIRLER  VAR BYTE
'***********Değişken Tanımlamaları***********
Ayar_D var bit
Sayac var byte
B_Say 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
'***********Buton Tanımlamaları***********
Buton1 var PortB.0
Buton2 var PortA.4
Buton3 var PortA.3
'***********LCD yi Kullanıma Hazır Hale Getir***********
LOW PORTB.2

lcdout $FE,1 
PAUSE 200
lcdout $FE,1 
'***********Değişken Değerleri***********
Ayar_D=0
Sayac=0
B_Say=0 
'***********Program Başlangıcı***********        
Basla:
    if Ayar_D=0 then
        gosub Zaman_Oku
        gosub SENSOROKU
        lcdout $FE,1,dec2 Saat,":",dec2 Dak,":",dec2 Sn," ",Sign,DEC ISI,".",DEC1 (Float),0,"C"
        lcdout $FE,$C0,dec2 Gun,"-",dec2 Ay,"-20",dec2 YIL,"  "
        gosub Gun_Yaz
        pause 500
    else
        select case Sayac 'Cursor Ayarı
            case 1
                lcdout $FE,$0E
                lcdout $FE,$80
            case 2
                lcdout $FE,$0E
                lcdout $FE,$83    
            case 3
                lcdout $FE,$0E
                lcdout $FE,$86
            case 4
                lcdout $FE,$0E
                lcdout $FE,$C0
            case 5
                lcdout $FE,$0E
                lcdout $FE,$C3
            case 6
                lcdout $FE,$0E
                lcdout $FE,$C6
            case 7
                lcdout $FE,$0E
                lcdout $FE,$CC
        end select
        
        gosub Buton_Oku
        lcdout $FE,1,dec2 Saat,":",dec2 Dak,":",dec2 Sn
        lcdout $FE,$C0,dec2 Gun,"-",dec2 Ay,"-20",dec2 YIL,"  "
        gosub Gun_Yaz
        
    
    endif

Goto Basla
'***********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:
    FLOAT = (ISI //1000)/100
    ISI=(ISI/1000)-1
'***********Buton Oku***********
Buton_Oku:
    
    select case Sayac
        case 1
            if Buton3=0 then saat=saat+1
            if Buton2=0 then saat=saat-1
            pause 200
            if saat>23 then saat=0
        case 2
            if Buton3=0 then dak=dak+1
            if Buton2=0 then dak=dak-1
            pause 200
            if dak>59 then dak=0
        case 3
            if Buton3=0 then sn=sn+1
            if Buton2=0 then sn=sn-1
            pause 200
            if sn>59 then sn=0
        case 4
            if Buton3=0 then Gun=gun+1
            if Buton2=0 then gun=gun-1
            pause 200
            if gun>31 then gun=1
        case 5
            if Buton3=0 then ay=ay+1
            if Buton2=0 then ay=ay-1
            pause 200
            if ay>12 then ay=1
        case 6
            if Buton3=0 then YIL=YIL+1
            if Buton2=0 then YIL=YIL-1
            pause 200
            if YIL>99 then YIL=1
        case 7
            if Buton3=0 then day=day+1
            if Buton2=0 then day=day-1
            pause 200
            if day>7 then day=1
    end select
    
    gosub Ayar
return
'***********Saat Ayarı***********
Ayar:
    if sayac=8 then
        lcdout $FE,$0C
        lcdout $FE,1
        lcdout,$FE,1,"***SAAT/TARiH***"
        lcdout $FE,$C0,"***AYARLANDI***"
        pause 1000
        lcdout $FE,1
        Sayac=0
        Ayar_D=0
        gosub Zaman_Yaz
    endif    
return
'***********Zaman Oku***********
ZAMAN_OKU:

         high RTC_RST
         shiftout RTC_DTA, RTC_CLK, 0, [$BF]
         SHIFTIN RTC_DTA, RTC_CLK, 1, [SN, DAK, SAAT,GUN , AY, day, YIL, MEM] 
         low RTC_RST
         MEM=SN:GOSUB CEVIR:SN=SAYI  
         MEM=DAK:GOSUB CEVIR:DAK=SAYI
         MEM=SAAT:GOSUB CEVIR:SAAT=SAYI
         MEM=GUN:GOSUB CEVIR:GUN=SAYI
         MEM=AY:GOSUB CEVIR:AY=SAYI
         MEM=YIL:GOSUB CEVIR:YIL=SAYI
         MEM=day:GOSUB CEVIR:day=SAYI
        
         return
'***********Zaman Yaz***********
ZAMAN_YAZ:
    MEM=SN:GOSUB TERSCEVIR:SN=SAYI
    MEM=DAK:GOSUB TERSCEVIR:DAK=SAYI
    MEM=SAAT:GOSUB TERSCEVIR:SAAT=SAYI
    MEM=GUN:GOSUB TERSCEVIR:GUN=SAYI
    MEM=AY:GOSUB TERSCEVIR:AY=SAYI
    MEM=YIL:GOSUB TERSCEVIR:YIL=SAYI

           
    high  RTC_RST 
    SHIFTOUT RTC_DTA, RTC_CLK, 0, [$8E, 0]
    low RTC_RST:PAUSE 1 
    high RTC_RST          
    SHIFTOUT  RTC_DTA, RTC_CLK, 0, [$BE, SN, DAK, SAAT,GUN , AY, day, YIL, 0]  'YAZ
    low RTC_RST 
    PAUSE 10
return
'***********Çevir***********               
CEVIR:
    ONLAR=MEM & %01110000
    ONLAR=ONLAR>>4
    BIRLER=MEM & %00001111
    SAYI=ONLAR*10+BIRLER
RETURN  
'***********Ters Çevir***********
TERSCEVIR:                
    ONLAR=MEM DIG 1
    ONLAR=ONLAR<<4
    BIRLER=MEM DIG 0
    SAYI=ONLAR+BIRLER
RETURN    
'***********Gün Yaz***********
GUN_YAZ:
    SELECT CASE DAY
        CASE 1 
            LCDOUT $FE,$CC,"PZTS" 
        CASE 2 
            LCDOUT $FE,$CC,"SALI"
        CASE 3
            LCDOUT $FE,$CC,"CRSB" 
        CASE 4 
            LCDOUT $FE,$CC,"PERS" 
        CASE 5
            LCDOUT $FE,$CC,"CUMA" 
        CASE 6 
            LCDOUT $FE,$CC,"CMTS"
        CASE 7 
            LCDOUT $FE,$CC,"PAZR"
    END SELECT
return
'***********Kesme***********
return
DISABLE   
Kesme: 	
    if Ayar_D=0 then
        lcdout $FE,1,"SAAT/TARiH AYARI"
        lcdout $FE,$C0,"****************"
        pause 1000
        lcdout $FE,1
    endif
    pause 400
    Ayar_D=1
    Sayac=Sayac+1
    INTCON.1=0
Resume
Enable
end

Kabil ATICI

ilk gönderdiğin sağlantıda şema ve PCB şeması yoktu. İkincisindeki PCB 'yi yaptıysan dikkatli ol. Yakın zamanda bacak bağlantıları standart olmayan LCD'ler çıktı. Genellikle en sona eklenen LED bacakları  LCD besleme bacakları yanına alınmış bir PCB şeması var.

Eğer devreni şemaya göre yapıyorsan biraz sıkıntı olabilir. Buradaki eksikleri görebilecek kadar bu konuyu bildiğini varsayıyoruz.

İşlemcinin ve ds1302 (1. bacak ve gnd) besleme bacakları yakınına 100 nF koy,  ds1302'nin 1.bacağına 5V bağlamayı unutma (sanırım pcb'de bu unutulmuş.), beslemenin 5V tarafına 10µF/16V gibi kondansatör koy.

kullandığın işlemcinin 16F628 olduğuna emin ol. (sonunda A falan olmasın) Yoksa programda değişiklik yapman gerekebilir.

ambar7

muhittin_kaplan

benim verdiğim hex değil. pbp dosyası (pic basic pro) derlenip hex e çevrilmesi gerekir.

Kabil ATICI

@merter_
DS1302'nin beslemesi besleme hattına bağlı değil. (1. bacak.) bu hat aynı zamanda DS1820'nin besleme hattı ama 7805'den gelen +5V hattına bağlı değil gibi görünüyor..
Tabii bu hat çizimde entegrenin silk (eleman yüzü ) çizimi altında kalıpta ben görmemiş de olabilirim. Özer dilerim...

Gelelim LCD konusuna;
senin çiziminde LCD arkaplan beslemesi LCD beslemesinin hemen yanında, bazı LCD'lerde bu arkaplan beslemesi D7 hattının yanında yer alır. İki farklı bağlantı olduğundan dikkatli olunması gerekir.
Umarım çizimin doğrudur.
ambar7

muhittin_kaplan

bu hexi bu devreyle çalıştıran varsa "DEVRENİZİ KONTROL EDİNİZ"

muhittin_kaplan

evet
@ DEVICE pic16F628, WDT_ON              'Watch Dog timer açık

ile WDT açılmış ve hiçbir yerde Temizlenmiyor.

Şimdi Sırasıyla

bu hex dosya ile çalıştıran arkadaşların devresine bu hexi yükle bakalım çalışacak mı
eğer çalışırsa devreni kontrol et.

muhittin_kaplan

Devrenin fotosunu koyabilirmisin buraya soyle duzenleyip ayrintilarini gorecegimiz sekilde

muhittin_kaplan

Tabiki "bu kodlari calistirdilar" guvenerek devreye yogunlasalim.

muhittin_kaplan

Cabuk vazgecen zat tan pek elk olmaz

muhittin_kaplan

Cozene kadar devam edecez. Mucit23 e msj atarsan yardimci olur diye dusunuyorum

muhittin_kaplan