pbp ve termometre yardım?

Başlatan berkay_yalan, 29 Ocak 2009, 06:10:38

berkay_yalan

ete hocanın kodlarından yararlanarak termometre yapmaya calıstım fakat cozemedıgım bır sorunla karsılastım yardımlarınızı beklıyorum

http://www.4shared.com/file/83035824/f8c1fe9c/k_online.html

pbp+dsn


DEFINE LCD_DREG     PORTB      
DEFINE LCD_DBIT     4           
DEFINE LCD_RSREG    PORTB       
DEFINE LCD_RSBIT    0          
DEFINE LCD_EREG     PORTB      
DEFINE LCD_EBIT     1           
DEFINE LCD_BITS     4          
DEFINE LCD_LINES    4           

TRISB=0
TRISD=%00000001
PORTB=0
PORTD=0

Comm_Pin    VAR	Portd.0
Busy        VAR BIT
HAM         VAR	WORD
ISI         VAR WORD
SIGN        VAR BYTE
SIGN_BITI   VAR HAM.Bit11
NEGAT_ISI   CON 1
Deg         con 223
TEMP        VAR BYTE
Float       VAR WORD

basla:
call sensor
call disp
goto basla

sensor

           OWOUT   Comm_Pin, 1, [$CC, $44]
Bekle:
           OWIN    Comm_Pin, 4, [Busy]    
           IF      Busy = 0 THEN Bekle  
           OWOUT   Comm_Pin, 1, [$CC, $BE]
           OWIN    Comm_Pin, 2, [HAM.Lowbyte, HAM.Highbyte]
           GOSUB   Hesapla
           RETURN
    
Hesapla:              
    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          
GEC:
    FLOAT = (ISI //1000)/100
    ISI=ISI/1000

    RETURN
    
    disp
    lcdout $FE,1 : pauseus 50
    LCDOUT "ISI : ",Sign,DEC float,".",DEC1 ISI,Deg,"C" 
    return     		
End

ete

@Berkay,
Sorunu burada açıklamamakla bizim bulmamızı istediğini sanıyorum. Bulalım diyeceğim ama İsis dosyanda meşhur daire görüntüsü ile açılıyor ortada devre falan yok. Tabiiki versiyon uyuşmazlığı. Yoksa sorunun bumudur?.
Ortada ip ucu olmayınca her şeyi sorun olarak görmeye başladım galiba.

,Programda bir kusur göremedim. Bazı noktalar hariç.

1. Basic de CALL komutu Assembly alt programlarını çağırmak için kullanılır.
2. Basic de etiketler kullanılırken etiket isminden sonra ":" işareti koyulur.

Çözüm ne olacak,
Call yerine GOSUB kullanacaksın,
Etiket isimlerinden sonra etiketin sona erdiğini belirleyen : işaretini kullanacaksın.

Sen bunları yapmamışsın. Sanki bir ASM alt programı çağırır gibi Call ile alt program çağırmışsın , etiket isimlerinden sonra ":" koymamışsın.
Yan tarafa bakarsan MCS etiketleri yanda gösterir. Sen bunları yapmadığın için MCS onları etiket ismi olarak algılamamış.
Sorunun bu olsa gerek.
Bir daha ki sefere sorunuda açıklasan iyi olacak. Bize bulmaca çözdürme.

Komut açıklamaları Basic dilinde şöyle verilmiş.
-----------------------------------------------------------------------------------------
CALL Label

Execute the assembly language subroutine named Label. GOSUB is normally used to execute a PicBasic subroutine. The main difference between GOSUB and CALL is that with CALL, the existence of Label is not checked until assembly time. Using CALL, a Label in an assembly language section can be accessed that is otherwise inaccessible to PicBasic.

In order to mark statements that the program might wish to reference with GOTO or GOSUB commands, PICBasic uses line labels. Unlike many older BASICs, PICBasic doesn't allow line numbers and doesn't require that each line be labeled. Rather, any line may start with a line label, which is simply an identifier followed by a colon ( : ).


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

berkay_yalan

kusura bakmayın mesajı gec saatlerde attıgım ıcın aceleyle oldu

oncelıkle devreyı export edeyım ısteyen ulasabılır

her seyı denedım fakat dogru olcum yapamadım acaba ısıs de kı model dosyasından mı kaynaklandıgını dusundum ve cozemedım ve degıstırın dedıgınız kodları daha once gosub le de denedım : ekledım degısmedı sonuc



kodları değistirdim

DEFINE LCD_DREG     PORTB      
DEFINE LCD_DBIT     4            
DEFINE LCD_RSREG    PORTB        
DEFINE LCD_RSBIT    0          
DEFINE LCD_EREG     PORTB      
DEFINE LCD_EBIT     1            
DEFINE LCD_BITS     4          
DEFINE LCD_LINES    4            

TRISB=0 
TRISD=%00000001 
PORTB=0 
PORTD=0 

Comm_Pin    VAR   Portd.0 
Busy        VAR BIT 
HAM         VAR   WORD 
ISI         VAR WORD 
SIGN        VAR BYTE 
SIGN_BITI   VAR HAM.Bit11 
NEGAT_ISI   CON 1 
Deg         con 223 
TEMP        VAR BYTE 
Float       VAR WORD 

basla: 
gosub sensor 
gosub disp 
goto basla 

sensor: 

           OWOUT   Comm_Pin, 1, [$CC, $44] 
Bekle: 
           OWIN    Comm_Pin, 4, [Busy]    
           IF      Busy = 0 THEN Bekle  
           OWOUT   Comm_Pin, 1, [$CC, $BE] 
           OWIN    Comm_Pin, 2, [HAM.Lowbyte, HAM.Highbyte] 
           GOSUB   Hesapla 
           RETURN 
    
Hesapla:              
    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          
GEC: 
    FLOAT = (ISI //1000)/100 
    ISI=ISI/1000 

    RETURN 
    
    disp: 
    lcdout $FE,1 : pauseus 50 
    LCDOUT "ISI : ",Sign,DEC float,".",DEC1 ISI,Deg,"C" 
    return            
End

ete

Kullandığın kodlar DS18B20 sensörüne aittir. Sen DS18S20 kullanmışsın. İkisi aynı şey değil. Sensörü değiştir.
Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

berkay_yalan

Alıntı yapılan: "ete"Kullandığın kodlar DS18B20 sensörüne aittir. Sen DS18S20 kullanmışsın. İkisi aynı şey değil. Sensörü değiştir.
Ete
sagolun hocam olay cozuldu.

ywzslm

tamamlanmış dosyayı gönderebilirmisiniz bu aralar bu tür bir termometre ile uğraşmaktayım birde size zahmet proteusa bu ısı sensorunu nasıl ve nereden ekleyebilirim?şimdiden teşekkür ederim
olgulardaki olgunluk biziz

berkay_yalan

devre tamam zaten sadece sensoru degıstırıp kullanabılırsın