LCD ekranda 4 ayrı sıcaklık okuma için yardım ltf .

Başlatan Maxim, 05 Aralık 2005, 15:34:17

Veli B.


Maxim

evet şimdi anladım ,
fakat ben buna benzer başka birşey denemiştim zaten ama başarılı olamamıştım .
Ben şöyle yaptım ,
10 bit olan çözünürlükte girişe 5 volt verdiğiniz zaman 1024 olan full skaladan 204 gibi bir değeri çıkarıp daha sonra gerekli eklemeleri yapmayı denedim ama dediğim gibi olmadı .

Veli B.

Önerdiğim şekilde çalışır.Emin olun.Dil olarak pbp yerine proton sorunu doğrudan çözer yada c.

Maxim


Veli B.

Tek kanal adc DSN dosyası ve proton da yazdığım program parçası var.1-5 volt giriş, 0-10 birimsel çıkış(LCD). ;)

http://rapidshare.de/files/15844684/4-20_TO_0-10.rar.html

Maxim

Alıntı yapılan: "katana"Tek kanal adc DSN dosyası ve proton da yazdığım program parçası var.1-5 volt giriş, 0-10 birimsel çıkış(LCD). ;)

http://rapidshare.de/files/15844684/4-20_TO_0-10.rar.html

üstad ,

verdiğin tüyolar sonuç verdi  :D
teşekkürler ..

not:yaptığım hatada şu :
ben girişi düşürebiliyordum zaten ,yani 5 volt giriş verdiğimizde 1024 olan değeri 204 eksiltiyordum .Geriye 820 kalıyor ,işte hata burada ben bu değeri program içerisinde ortalaması alınırken /1023 olan yeri değiştirmediğim için (820 ile) çıkan sonuçta yanlış oluyordu ..

Maxim

Tekrardan Selamlar ,

Devreye set değeri alarm çıkışı eklemem gerekiyor ,
bunu tek buton ile daha önce yapmıştık picbasicpro ile ,
fakat bu olayı proton basic ile yapamıyorum ,
bana yardımcı olursanız sevinirim .

Yeni program böyle :

'pic 16F877 kullanılmıştır.
   '6 adet 10 bit analog giriş kullanılmıştır .
   '4x20 satır lcd kullanılmıştır .
   'proton plus compiler kullanılmıştır.
    
    DEVICE 16F877	

    Declare XTAL 4
   'OSILATOR FRKANSI 4MHz OLARAK BELIRLENIR

    'LCD icin ayarlar tanimlanir
    '4 bit baglanti
    Declare LCD_DTPIN	PortD.4
    Declare	LCD_RSPIN	PortD.1
    Declare	LCD_ENPIN	PortD.0
    Declare	LCD_INTERFACE	4
    Declare	LCD_LINES	4   

    'ADC icin tanimlamalar
 	Declare ADIN_RES	10 
    Declare ADIN_TAD	1
    Declare ADIN_STIME	50
		   
    'EKRANA YAZDIRILACAK ADC DEGISKENLERI TANIMLANIR
    DIM ADC_KANAL1 AS FLOAT
    DIM ADC_KANAL2 AS FLOAT
    DIM ADC_KANAL3 AS FLOAT
    DIM ADC_KANAL4 AS FLOAT
    DIM ADC_KANAL5 AS FLOAT
    Dim ADC_KANAL6 As Float
    
    'ISLEMLER ICIN GEREKLI GECICI DEGISKENLER TANIMLANIR
    
    DIM TEMP1 AS BYTE    
    DIM W1 AS WORD
   
    DIM W2 AS FLOAT
    Dim W3 As Float
    Dim W4 As Float
    Dim W5 As Float
    Dim W6 As Float
    Dim W7 As Float
       
    DIM DWD0 AS WORD
    Dim DWD1 As Word
    DIM FLD0 AS FLOAT
    DIM FLD1 AS FLOAT
    Dim FLD2 As Float
    Dim FLD3 As Float
   
        
   'OLCUM VOLTAJI
   DIM OLCUM_VOLTAJI AS 1200 'analog giriş1 0-12 volt (0-1200C ,EGT,eksoz sıcaklık,AD595 Type-K)
   DIM OLCUM_VOLTAJI1 AS 12  'analog giriş2 0-5 volt  (8-20 ,AFR,hava-yakıt karışım,wide band lambda)
   Dim OLCUM_VOLTAJI2 As 100 'analog giriş3 0.17-4.67 volt (10-100% ,TPS,gaz kelebek potansiyometresi)
   Dim OLCUM_VOLTAJI3 aS 16  'analog giriş4 0-13 volt (0-16V ,BAT,akü gerilim)
   DIM OLCUM_VOLTAJI5 AS 10  'analog giriş5 1-5 volt (0-10B ,PRS,Yakıt basınç,4-20mA sensör)
   Dim OLCUM_VOLTAJI6 AS 100 'analog giriş6 0-1 volt (0-100C ,TMP,iç sıcaklık,LM35)
   
   DIM ADC_ORNEKSAYISI AS 100

GOTO RESET_VECTOR

;********************************************************************
PRJ_LOOP:
    ASM
        NOP
        NOP
        CLRWDT
        NOP
        NOP
    ENDASM
    call    adc_oku
    DELAYMS 1
GOTO PRJ_LOOP

;********************************************************************
'BU BOLUMDE ISLEMCININ BASLANGIC AYARLARI YAPILIR
RESET_VECTOR:
    ASM
        BCF	INTCON,GIE
        BTFSC   INTCON,GIE
        GOTO    RESET_VECTOR
    ENDASM

    ;ENERJI HATLARINDAKI PARAZITIK ETKI ICIN ACILIS GECIKMESI
    DELAYMS 1000
 
    
    'OPTION_REG = %00000001        ' Enable PORTB pullups  ???
    TRISA=%11111111
    TRISB=%00001111        '????
    ADCON1=%10000000	   ' Set PORTA analog and right 
    INTCON=%00100000
 
        
    print $FE,$80  
    PRINT "INTRO 1"   'açılış logosu satır 1
    print $FE,$C0       
    PRINT "INTRO 2"   'açılış logosu satır 2
    print $FE,$94
    PRINT "INTRO 3"   'açılış logosu satır 3
    print $FE,$D4
    PRINT "INTRO 4"   'açılış logosu satır 4
    DELAYMS 3000        'açılış logosu için gecikme süresi
    PRINT $FE, 1 ;lcd temizlenir

    TEMP1=ADC_ORNEKSAYISI
    ADC_KANAL1=0
    ADC_KANAL2=0
    ADC_KANAL3=0
    ADC_KANAL4=0
    ADC_KANAL5=0
    ADC_KANAL6=0

GOTO PRJ_LOOP

;********************************************************************
ADC_OKU:
	'ORNEKLER ALINIR VE ORTALAMA DEGER HESAPLANIR
	'BU EN DOGRU DEGERI YAKALAK VE
	'ADC GORUNTULEME HIZINI YAVASLATMAK ICINDIR

ADC_OKU_1:    
    ADCIN 0,W1
    ADC_KANAL1=ADC_KANAL1+W1
    
    ADCIN 1,W1
    ADC_KANAL2=ADC_KANAL2+W1

    ADCIN 2,W1
    ADC_KANAL3=ADC_KANAL3+W1

    ADCIN 3,W1
    ADC_KANAL4=ADC_KANAL4+W1
    
    ADCIN 4,W1
    ADC_KANAL5=ADC_KANAL5-198+W1
    
    ADCIN 5,W1
    ADC_KANAL6=ADC_KANAL6+W1
    
    TEMP1=TEMP1-1
    IF TEMP1>0 THEN RETURN 
	
    ADC_KANAL1=ADC_KANAL1/ADC_ORNEKSAYISI
    ADC_KANAL2=ADC_KANAL2/ADC_ORNEKSAYISI
    ADC_KANAL3=ADC_KANAL3/ADC_ORNEKSAYISI
    ADC_KANAL4=ADC_KANAL4/ADC_ORNEKSAYISI
	ADC_KANAL5=ADC_KANAL5/ADC_ORNEKSAYISI
	ADC_KANAL6=ADC_KANAL6/ADC_ORNEKSAYISI
	
    W2=OLCUM_VOLTAJI
    W3=OLCUM_VOLTAJI1
    W4=OLCUM_VOLTAJI2
    W5=OLCUM_VOLTAJI3
    W6=OLCUM_VOLTAJI5
    W7=OLCUM_VOLTAJI6
    
    W2=W2/1023
    W3=W3/1023
    w4=w4/1023
    W5=W5/1023
    W6=W6/826
    W7=W7/1023
        
    ADC_KANAL1=ADC_KANAL1*W2
    ADC_KANAL2=ADC_KANAL2*W3
    ADC_KANAL3=ADC_KANAL3*W4+7
    ADC_KANAL4=ADC_KANAL4*W5
    ADC_KANAL5=ADC_KANAL5*W6
    ADC_KANAL6=ADC_KANAL6*W7
    
    cALL EKRANI_YAZ

    TEMP1=ADC_ORNEKSAYISI
    ADC_KANAL1=0
    ADC_KANAL2=0
    ADC_KANAL3=0
    ADC_KANAL4=0
	ADC_KANAL5=0
	ADC_KANAL6=0
           
RETURN
;*******************************************
EKRANI_YAZ:

    DWD0=adc_kanal1
    PRINT $FE, $85
    PRINT "EGT >"
    GOSUB DEC_DWD0
   	
   	FLD0=ADC_KANAL2 +8
    PRINT $FE, $C5
    PRINT "AFR >"
   	GOSUB DEC_FLD0
   	
    DWD1=ADC_KANAL3
    PRINT $FE, $94
    PRINT "TPS<"
    GOSUB DEC_DWD1
    
    FLD1=ADC_KANAL4	
    PRINT $FE, $9D
    PRINT " BAT<"
    GOSUB DEC_FLD1
   	
   	FLD2=ADC_KANAL5
   	PRINT $FE, $D4
   	PRINT "PRS<"
   	GOSUB DEC_FLD2

    FLD3=ADC_KANAL6
   	PRINT $FE, $DD
   	PRINT " TMP<"
   	GOSUB DEC_FLD3

    RETURN

DEC_DWD0:
select dwd0 
        case < 10   : PRINT DEC1 dwd0, $DF,"   " 
        case < 100  : PRINT DEC2 dwd0, $DF,"  " 
        case < 1000 : PRINT DEC3 dwd0, $DF," " 
        case else   : PRINT DEC4 dwd0, $DF,"" 
    endselect 
    
return

DEC_DWD1:
select dwd1 
        case < 10   : PRINT DEC1 dwd1, "%>","   " 
        case < 100  : PRINT DEC2 dwd1, "%>","  " 
        case < 1000 : PRINT DEC3 dwd1, "%>"," " 
        case else   : PRINT DEC4 dwd1, "%>","" 
    endselect 
 
 RETURN

 DEC_FLD0: 
    select fld0 
        case < 10.0   : PRINT DEC1 fld0, "","   " 
        case < 100.0  : PRINT DEC1 fld0, "","  " 
        case < 1000.0 : PRINT DEC1 fld0, ""," " 
        case else     : PRINT DEC1 fld0, "","" 
    endselect
     
return 

DEC_FLD1: 
    select fld1 
        case < 10.0   : PRINT DEC1 fld1, "V>","   " 
        case < 100.0  : PRINT DEC1 fld1, "V>","  " 
        case < 1000.0 : PRINT DEC1 fld1, "V>"," " 
        case else     : PRINT DEC1 fld1, "V>",""  
    endselect
     
return 

DEC_FLD2: 
    select FLD2 
        case < 10.0   : PRINT DEC1 fld2, "B>","   " 
        case < 100.0  : PRINT DEC1 fld2, "B>","  " 
        case < 1000.0 : PRINT DEC1 fld2, "B>"," " 
        case else     : PRINT DEC1 fld2, "B>","" 
    endselect

    return 

DEC_FLD3: 
    select FLD3 
        case < 10.0   : PRINT DEC1 fld3, $DF,">","   " 
        case < 100.0  : PRINT DEC1 fld3, $DF,">","  " 
        case < 1000.0 : PRINT DEC1 fld3, $DF,">"," " 
        case else     : PRINT DEC1 fld3, $DF,">","" 
    endselect
    RETURN
END








Eski program da bu şekildeydi :

'16F877 pic işlemcinin 4 adet analog portu 10 bit çözünürlükte kullanılmıştır.
'set değer girişi için 1 adet buton kullanılmıştır ,
'butona her basışta set değeri ekranda belirir ve 10 birim artar.
'set değeri eepromda tutulduğundan enerji kesilse bile silinmez.
'input 1 girişi set değerinin üzerine çıktığında lamba yanar.
'2x16 satır lcd kullanılmıştır .
'microcode studio plus ile derlenmiştir

  

' Define LCD registers and bits 
DEFINE  LCD_DREG        PORTD 
DEFINE  LCD_DBIT        4 
DEFINE  LCD_RSREG       PORTD 
DEFINE  LCD_RSBIT       2 
DEFINE  LCD_EREG        PORTD
DEFINE  LCD_EBIT        3 

' Define ADCIN parameters 
DEFINE  ADC_BITS        10       ' Set number of bits in result 
DEFINE  ADC_CLOCK       3        ' Set clock source (3=rc) 
DEFINE  ADC_SAMPLEUS    20       ' Set sampling time in uS 

INPUT1  VAR WORD                 
INPUT2  VAR WORD
INPUT3  VAR WORD
INPUT4  VAR WORD

SET     var word
        TRISA = %11111111       
        TRISD = %00000001       
        ADCON1 = %10000010      
        Low PORTE.2             
        READ 101,SET.highbyte
        READ 100,SET.LOWbyte
        'Pause 50                   

loop:   
       
       IF PortD.0=1 then
       Lcdout $FE, 1
       LCDOUT $FE,$C0,"SET DEGERI=",DEC SET
       Pause 100 
       READ 101,SET.highbyte
       READ 100,SET.LOWbyte
       set=SET+10
       WRITE 101,SET.HIGHbyte 
       WRITE 100,seT.LOWbyte                            
       endif
       IF (INPUT1>=SET ) THEN
       PORTD.1=1
       ELSE
       PORTD.1=0
       ENDIF
       goto zero
      
zero:   
        
       IF PORTD.0 =0 THEN
       GOTO ADCLOOP
       ELSE
       GOTO ZERO                                              
       ENDIF 
ADCLOOP:        
       ADCIN 0, INPUT1               ' Read channel 0 to adval (0-1023) 
       INPUT1 = (INPUT1 */ 1200)>>2      ' equates to: (INPUT1 * 500)/1024  
       PAUSE 50
       ADCIN 1, INPUT2               ' Read channel 0 to adval (0-1023) 
       INPUT2 = (INPUT2 */ 1200)>>2      ' equates to: (INPUT1 * 500)/1024  
       PAUSE 50
       ADCIN 2, INPUT3               ' Read channel 0 to adval (0-1023) 
       INPUT3 = (INPUT3 */ 1200)>>2      ' equates to: (INPUT1 * 500)/1024  
       PAUSE 50
       ADCIN 3, INPUT4               ' Read channel 0 to adval (0-1023) 
       INPUT4 = (INPUT4 */ 1200)>>2      ' equates to: (INPUT1 * 500)/1024  
       PAUSE 50
       
       LCDOut $fe, 1               ' Clear LCD 
       LCDOut "1>",DEC INPUT1 '(INPUT1/100),DEC2 adval ' Display the decimal value  
       LCDOUT $DF
       Lcdout $FE,$89, "2>" ,DEC INPUT2        
       LCDOUT $DF             
       Lcdout $FE,$C0, "3>" ,DEC INPUT3        
       LCDOUT $DF             
       Lcdout $FE,$C9, "4>" ,DEC INPUT4        
       LCDOUT $DF 
       PAUSE 50          
           
       IF set>=1200 then 
       WRITE 100,0
       WRITE 101,0 
       endIF
       
       GoTo loop                   ' Do it forever 
       End




Eski :
http://www.hemenpaylas.com/download/353601/eski_set_degeri.zip.html

Yeni:
http://www.hemenpaylas.com/download/353608/6xanalog.zip.html

Maxim

pcb yi çıkardım devreyi yaptım bitirdim ,
kutulaması kaldı ,onunla uğraşıyorum ,
paylaşayım dedim .






Veli B.

Geçmiş olsun ;)
Ellerine sağlık gayet güzel görünüyor.
Sıradaki çalışmanı bekleriz...

sothysz

merhaba bu projenin son hali yahoo groups'ta yok ya da kaldırılmış sanırım. maxiboost paylaşırsan çok sevinirim. eline saglık.