adc sorunu

Başlatan erkan614, 06 Eylül 2007, 12:14:29

erkan614

12f675 ile lcdli adc okuma işlemi yapma gibi parlak bi fikir geldi aklıma sora başladım kod yazmaya  isis devresini de çizdim bastım playe tabi çalışmadı  :lol:
arkadaşlar acaba 12f675 ile lcd sürülemezmi?
yoksa ben kodda bi hatamı yaptım?

devrenin kod hex ve isis dosyasını:  burdan  indirin

devrenin resmi:



kod:
 GPIO=0
  TRISIO=%00001001
'****************************************************************
@ DEVICE PIC12F675
@ DEVICE PIC12F675, WDT_ON
@ DEVICE PIC12F675, MCLR_OFF
@ DEVICE PIC12F675, BOD_OFF
@ DEVICE PIC12F675, PWRT_OFF
@ DEVICE PIC12F675, PROTECT_OFF
@ DEVICE PIC12F675, INTRC_OSC_NOCLKOUT
'****************************************************************
DEFINE LCD_DREG GPIO
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG GPIO
DEFINE LCD_RSBIT 1
DEFINE LCD_EREG GPIO
DEFINE LCD_EBIT 2
DEFINE LCD_BITS 2
DEFINE LCD_LINES 2

DEFINE	ADC_BITS	10	    'A/D çevirim sonucu kaç bit olacak
DEFINE	ADC_CLOCK	3	    'Clock kaynağı (3=rc)
DEFINE	ADC_SAMPLEUS	100	'Örnekleme zamanı mikro saniye cinsinden.
DEFINE OSCCAL_1K 1
'****************************************************************
ADCON0=%10000001
ANSEL=%00010001
CMCON=%00000111
INTCON=0
OPTION_REG=0
'*********************************************************************
HAM VAR WORD
VOLT VAR WORD
MVOLT VAR BYTE
'********************************************************************
LCDOUT $FE,1
PAUSE 200
'*******************************************************************

BASLA:
    
    ADCIN 0,HAM
BAK:

    IF ADCON0.2=0 THEN BAK
    
    LCDOUT $FE,1, "HAM= ", #HAM
    
    HAM=HAM+1
    Volt=(ham */ 1250)/100 'Ham ile 1250 yi 32 bit olarak çarp ve 100'böl
    Mvolt=volt//10
    Volt=Volt/10

    LCDOUT $FE,$C0," VOLT=",#VOLT,",",# Mvolt
    PAUSE 500
    GOTO BASLA
    
END  

Prof.EleCTroN

Bu tip LCD de en az 4 veri hattının kullanılması gerekiyor. Seri giriş paralel çıkışlı shift register ile PIC in 2 pinini kullanarak (4 yada 8 li veri transferi ile) LCD sürebilirsin.

tyildizak

Başlangıçta 6 pin dijital tanımlanıp lcd sürülse, adc kullanılacağı zaman herhangi bir pin analog giriş tanımlansa, dönüşüm yapılıp değer saklansa,daha sonra pin tekrar dijital çıkış yapılıp lcd'ye yazılsa..
Bu pbp ya da başka bir derleyicide yapılabilir gibi geliyor, denemek lazım.

Ayrıca DEFINE LCD_BITS 2  satırını pbp nasıl derlemiş? Enteresan..

arslan74

Merhaba,

Araya 74hc164 entegresini ekleyerek yapabilirsin.

Selamlar

erkan614

Alıntı YapBaşlangıçta 6 pin dijital tanımlanıp lcd sürülse,...
öye düşündüm ama 4 nolou pin "Ra3/mclr" sade giriş tanımlanabilio
o sebepten rs+en+4 data çıkışı alamıorum

Alıntı YapAyrıca DEFINE LCD_BITS 2 satırını pbp nasıl derlemiş? Enteresan..
aslın da enbaşta direndi derlemem die bende zor kullandım
ekrana silah dayadım "ya derlersin yada sehadet getir" dedim :evil:  yola geldi derledi  :lol: :twisted: 8)


Alıntı YapAraya 74hc164 entegresini ekleyerek yapabilirsin

bu konuda ilk uygulamalarım olduğundan nasıl bağlancağını bilemiorum biraz açıklarmısınız
ve bunu gerçekleştirdiğimde yazılımı değiştirmem gerekirmi?

arslan74

Merhaba,

Alıntı Yap

Alıntı:
Araya 74hc164 entegresini ekleyerek yapabilirsin


bu konuda ilk uygulamalarım olduğundan nasıl bağlancağını bilemiorum biraz açıklarmısınız
ve bunu gerçekleştirdiğimde yazılımı değiştirmem gerekirmi?



74164 entegresini daha cok kayanyazı da kullanıyorlar. seri bilgi yollayıb paralel olarak olarak cıkış alıyorsun. Bu sitede onunla ilgili bircok proje ve örnek kod yayınlandı. LCD için kullandığın bu iki baçağı 74164 entegresinin clock ve data uclarına bağlayacaksın. 8bit cıkışıda lcd nin data giriş uçlarına bağlayacaksın.

Alıntı Yap
Alıntı:
Ayrıca DEFINE LCD_BITS 2 satırını pbp nasıl derlemiş? Enteresan..
aslın da enbaşta direndi derlemem die bende zor kullandım
ekrana silah dayadım "ya derlersin yada sehadet getir" dedim  yola geldi derledi    


Belki bu kod benim bahs ettiğim bağlandı şekli için yazılmıştır. Eğer öyle ise, o zaman program yazmakla uğraşmayacaksın. Sadece devreyi kurduğunda çalışacaktır.

Selamlar

Cetinal

picprojenin dergisinde vardı bir tane 74hc595 ile lcd sürme örneği
4094,74hc164 filan da aynı işi görür

arslan74

Alıntı Yap
RoMeO123 Tarih: Prş Eyl 06, 2007 14:55    Mesaj konusu:  

--------------------------------------------------------------------------------

picprojenin dergisinde vardı bir tane 74hc595 ile lcd sürme örneği
4094,74hc164 filan da aynı işi görür


74HC595 kullanarak LCD 'yi çalıştırmıştım. Ama HC595 entegresi bilgi sürmek için 3 tane uca ihtiyac duyuyor, cünkü bu entegrenin fazladan latch özelliği var, onun için 74Hc164 önermiştim.

Ama bencde bu entegre yerine PIC'ini değiştirsen daha mantıklı olur. Örneğin 16F676 kullan. Fiyatı makul ve bacak sayısı fazla.

Selamlar

erkan614

arkadaşlar pic12f675 adc 500 den büyükse gpıo.5 hıgh olucak değilse low olucak
devrenin kodu ve resmini veriyorum
aynı kodu 16f877 ye göre şartlayıp f877li çalıştırdığımda oluo ama 12f675 ile çalışmadı kodda 12f in sartlamalarında hata var zannediyorum ama ben farkedemedim


GPIO=0
TRISIO=%00000001
'-------------------------------------------------------------------------------
@ DEVICE pic12F675
@ DEVICE pic12F675, WDT_on
@ DEVICE pic12F675, PWRT_ON
@ DEVICE pic12F675, PROTECT_OFF
@ DEVICE pic12F675, INTRC_OSC_NOCLKOUT
@ DEVICE pic12F675, BOD_OFF
'-------------------------------------------------------------------------------
ADCON0=%10000001 '7. bit 1 yapıldı 10 bit sonuç almak için.
ANSEL=%00110001
CMCON=%00000111
INTCON=0
OPTION_REG=0
'-------------------------------------------------------------------------------
DEFINE	ADC_BITS	10	    'A/D çevirim sonucu kaç bit olacak
DEFINE	ADC_CLOCK	3	    'Clock kaynağı (3=rc)
DEFINE	ADC_SAMPLEUS	100	'Örnekleme zamanı mikro saniye cinsinden.
DEFINE OSCCAL_1K 1 
'-------------------------------------------------------------------------------
HAM    var  word  'ADC den okunan ham digital değer. 
VOLT   var  word '16 bit değişken tipi seçtik kullanacağımız değer 10 bit olacak.
Mvolt  var  byte
'------------------------------------------------------------------------------- 

BASLA:
 
      ADCIN 0,HAM  '0 nolu kanaldan Analog değeri oku aktar.
BAK:  IF ADCON0.2=1 THEN BAK


    SELECT CASE HAM 
CASE IS > 500 
HIGH GPIO.5 
CASE ELSE 
LOW GPIO.5 
END SELECT
GOTO BASLA 
                                                                              
END




erkan614

arkadaşlar bisürü farklılık yaptım ama olmadı neden 12f675i çalıştıramıorum

tyildizak

İşlemciyi programlamadan önce okuyarak osccal değerini kaydetmek, sonra bunu programlarken aynen yazmak gerekiyor, bunu yaptın mı? Yoksa sadece simülasyon mu yapıyorsun?

OG

@	device  pic12F675, intrc_osc_noclkout, wdt_on, pwrt_on, mclr_off, protect_off

DEFINE ADC_BITS 10 
DEFINE ADC_SAMPLEUS 100
ANSEL = %00110000   
DEFINE OSC 4
'DEFINE OSCCAL_1K 1

TRISIO = %00000001
IOC=%00000000  
INTCON=%00000000
OPTION_REG=%0000000 
ADCON0 = %10000001

'------------------------------------------------------------------------------- 
HAM    var  word  'ADC den okunan ham digital değer. 
VOLT   var  word '16 bit değişken tipi seçtik kullanacağımız değer 10 bit olacak. 
Mvolt  var  byte 
'------------------------------------------------------------------------------- 
GPIO.5=0 
BASLA:     
ADCIN 0,HAM 
 
IF HAM > 500 THEN 
GPIO.5=1 
ELSE 
GPIO.5=0 
ENDIF 

PAUSE 10
GOTO BASLA 
                                                                              
END
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

erkan614

ansel=%00110001 olması lazım
yardımlarınız için sağolun yaptığım şartlamadaki hatayı gördüm.
şimdilik sadece sim yapıorum sonra 5v trafo ile  şebeke geriliminde deniycem