16F88'e yazma ve okuma sorunu

Başlatan POWER, 06 Aralık 2015, 11:41:09

POWER

herkeze iyi çalışmalar,
küçük bir ısı okuma ile ilgili proğramda 16f88 yazma ve okuma yapamıyorum.daha doğrusu yazmadamı,okumadamı problem var anlayamadım.menüden ısı değerini değiştiriyorum ana ekranda bu değer görünüyor fakat simülasyonu durdurup tekrar başlattığımda ısı değeri sıfır oluyor.16f628 de hiç bir problem olmuyor srun f88 meydana geliyor.neyi gözden kaçırıyorum anlayamadım.isis ve pbp dosyalarını linkden alabilirsiniz.
DEFINE OSC 4
Include "MODEDEFS.BAS"
OSCCON=%01100000

@ DEVICE pic16F88
@ DEVICE pic16F88, LVP_OFF
@ DEVICE pic16F88, WDT_OFF
@ DEVICE pic16F88, PWRT_ON
@ DEVICE pic16F88, PROTECT_OFF
@ DEVICE pic16F88, MCLR_off            
@ DEVICE pic16F88, INTRC_OSC_NOCLKOUT  

TRISA=%00000000
TRISB=%01110000
PORTA=0
PORTB=0

DEFINE LCD_DREG  PORTB	
DEFINE LCD_DBIT	 0		
DEFINE LCD_RSREG PORTA	
DEFINE LCD_RSBIT 3	
DEFINE LCD_EREG	 PORTA	
DEFINE LCD_EBIT	 2		
DEFINE LCD_BITS	 4	
DEFINE LCD_LINES 2

CMCON=7          'Comparatör pinleri iptal hepsi giriş çıkış
ANSEL=0          'analog girişler iptal hepsi dijital
OPTION_REG.7=0   'pull-up dirençleri aktif

Deg        CON 223         ' ° işareti
I          VAR BIT
B          VAR BYTE
ISI        var byte 

SYMBOL YUKARI=PORTB.5
SYMBOL ASAGI= PORTB.6
SYMBOL MENU=  PORTB.4  

LCDOUT $FE,1
LCDOUT $FE,$68,$04,$00,$0E,$04,$04,$04,$0e,$00 'İ -5- dataları              

READ 0,ISI
B=0
 
BASLA:
   GOSUB EKRAN
IF MENU=0  THEN
   GOTO ANA_MENU
ENDIF
   GOTO BASLA    

EKRAN:
      LCDOUT $FE,$81,"SET ISI=",DEC3 ISI," ",Deg,"C"
      RETURN
TEMIZLE:                        
      LCDOUT $FE,1  
      RETURN
KAYDET:
      B=0
      lcdout $FE,1,"AYARLAR"
      LCDOUT $FE,$C0,"KAYDED",5,"LD",5,"..."
      WRITE 0,ISI
      PAUSE 10
      PAUSE 800
     GOSUB TEMIZLE
 GOTO BASLA

ANA_MENU:
LCDOUT $FE,$80,"  ISI AYARLAMA  "          
lcdout $FE,$C5,DEC3 ISI,DEG,"C"       
  
  IF YUKARI=0 THEN 
    ISI=ISI+1
  IF ISI>255 THEN ISI=0
     PAUSE 250
  ENDIF      
 
 IF ASAGI=0 THEN 
   ISI=ISI-1
 IF ISI<0 THEN ISI=255
     PAUSE 250
 ENDIF      
 
IF MENU=0  THEN
      B=B+1
   WHILE MENU=0
   WEND
IF B=2 THEN GOTO KAYDET
ENDIF
   GOTO ANA_MENU 

ARK_SONDUR: 
    For I = 1 to 50 
    Pause 5
    Next i 
    RETURN

END


http://s6.dosya.tc/server4/uapofz/ISI_DENEME.rar.html
TB6BKG

kaganayanoglu

Merhaba Power,

Bende 4 gündür 16f88'un EEPROM una yazdırmak istiyorum. Hatta başka bir forumda bu iş tüm piclerde bu komutlarla oluyor. Sen yapamıyorsun diye bir araba fırça yedim.

Bende oldukça basit kodu aşağıya ekliyorum. Ben, 16F88'e "write adres, değer" komutu ile EEPROM verisi yazdıramadım.

#CONFIG
  __config  _CONFIG1, _INTRC_IO & _WDT_OFF & _PWRTE_OFF & _MCLR_OFF & _BODEN_OFF & _LVP_OFF & _CPD_OFF & _WRT_PROTECT_OFF & _DEBUG_OFF & _CCP1_RB0 & _CP_OFF
  __config  _CONFIG2, _FCMEN_OFF & _IESO_OFF
#ENDCONFIG

DEFINE ADC_BITS 10      ' ADCIN resolution  (Bits)   
DEFINE ADC_CLOCK 3      ' ADC clock source  (Fosc/8)   
DEFINE ADC_SAMPLEUS 20  ' ADC sampling time (uSec)

ANSEL  = %00000010  ' AN1 ANALOG, DİĞERLERİ DİJİTAL 
ADCON1 = %10000000  ' 1024 (10 BİT) hesaplanacak, VREF+AVDD VREF-AVSS
'ADCON0 = %11101101  ' internal A/D module RC oscillator,  11000000
OSCCON = %01101110  ' İNTERNAL OSİLATÖRÜ 4mhz' E AYARLA
   
CMCON  = 7           ' KOMPARATÖRLER KAPALI   
TRISA  = %00000010   ' RA1 GİRİŞ DİĞERLERİ ÇIKIŞ   
TRISB  = %00000000   ' HEPSİ ÇIKIŞ
PORTA  = 0           ' PORTA SIFIRA ÇEK                                                             D
PORTB  = 0           ' PORTB SIFIRA ÇEK
T2CON = %00000101     'Bölücü 1/1 olarak verildi ve TMR2 aktif hale  getirildi.
PR2=124                'PWM-Peryot= (124+1) x 4 x ¼ x 1 =500 us  ve F=1000/50 = 2 KHz PWM  frekansı dır.
PORTA  = 0           ' PORTA SIFIRA ÇEK    


Pause 100 ' 100 ms AÇILIŞ GECİKMESİ

           
LED_SOL_ON    VAR PORTB.6   ' 1         UYARI LEDLERİNİN ÇIKIŞ UÇLARI
OLCUM_A       VAR WORD         ' HESAPLAMA İŞLEMLERİNDE VERİ ALACAK
I             VAR WORD    ' DIŞARDAN ALINACAK VERİLERİN ADLANDIRMALARI
ORTALAMA      VAR WORD       
        
I               = 0
OLCUM_A         = 0
       
           
'*******************************************************************************   
        GOTO SELF_CHECK 

MAIN:   
           
            ORTALAMA =0 
            FOR I = 0 TO 24         
                ADCIN 1 , OLCUM_A    
                ORTALAMA = ORTALAMA + OLCUM_A
                NEXT I
                OLCUM_A = ORTALAMA/25
            PAUSE 10
            
            WRITE $00, OLCUM_A.BYTE0, OLCUM_A.BYTE1 : PAUSE 10    'OLCUM_A' yı 0. adrese yaz. 10 ms. bekle.
       
        
 SELF_CHECK:
        HIGH            LED_SOL_ON      
        PAUSE 150
        LOW             LED_SOL_ON 
        PAUSE 150     
        HIGH            LED_SOL_ON      
        PAUSE 150
        LOW             LED_SOL_ON 
        return           


Tecrübesi olan varsa bende yardımlarını rica ediyorum. :(

F.T

#2
isistemi olmuyor.Yoksa gerçek devredemi?İsisin bu tür sıkıntıları oluyor.Hatta isisteki entegren bozukta olabilir.Entegreyi silip tekrar bağlayıp bir dene.Ayrıca hocalarımız fırça atmasa biz nasıl öğrenecez.Karşılıksız zaman ayırıp yardım ediyorlar.Müsade edinde az fırça atsınlar.Ben severim o tür hocaları.Hepsinden Allah razı olsun.
Hakk şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

kaganayanoglu

#3
Isısta değil. Kullandığım ve çalıştığından emin olduğum bir kartta takılı olan 16F88 in programında güncelleme yapmak istiyorum.

Şu varki, program normal derleniyor, pic3 progmmer programına hex dosyasını eklediğimde eeprom kısmındaki "ff"  lerde hiçbir değişiklik olmuyor. Pici okuttuğumda yine EEPROM kısmında hepside "FF" gözüküyor.

Verdiğim pbp dosyası normal bir şekilde hex'e dönüşüyor ve problemsiz bir şekilde picin içine yükleniyor. Yada bilgisayar bana bir hata vermiyor diyelim. Gel gelelim pici okuttuğumda EEPROM boş gözüküyor. Bunu söylemeye çalışıyorum. Fakat ısrar ile olmaz öyle şey sen yapamıyorsun yada sen hazırcısın diyor sayın hocalar.

Alıntı YapMüsade edinde az fırça atsınlar.Ben severim o tür hocaları.Hepsinden Allah razı olsun.
kesinlikle katılıyorum. Ama bende başıma geleni anlatıyorum. Benim esas işim canlı ile ve böyle bir şey olmaz denilen birçok şeyin başıma geldiğini gördüm. Elektronikte herşey 1 yada 0 diye biliyorum ama 1 yada sıfırlarda karışabiliyor demek ki.

Biraz önce notebookumu formatladım ve yeniden kurmaya başladım. Acaba bilgisayar kısmında bir sorunmu var diye.
POWER arkadaşında benzer sorunla karşılaştığını görünce kendimden şüphe etmeyi bıraktım ama yinede bilgisayarımı formatlamış bulundum. Yine olmazsa ekran görüntüsünün videosunu çekip ekliyeceğim.

Bu olay sadece 16F88 de başıma geldi. 16F628 de denedim EEPROM daki FF ler değişiyor ve bende EEPROM'a birşeyler kaydedildiğini görebiliyorum.

:(

pwm.c

Alıntı yapılan: kaganayanoglu - 15 Aralık 2015, 19:55:56
Tecrübesi olan varsa bende yardımlarını rica ediyorum. :(
Hocam, yukarıdaki verdiğiniz kodlarda mantık hatası var. MAIN etiketinden önce GOTO SELF_CHECK eklediğiniz için MAIN döngüsüne gitmiyor ve oradaki komutları işlemiyor.
eğer çalıştıramadığınız başka yerler varsa kodları bana gönderin denemesini yapabilirim. elimde pickit3  ve 16f88 mevcut.

kolay gelsin.
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

dnacikaya

@kaganayanoglu  "Pause 100 ' 100 ms AÇILIŞ GECİKMESİ" satırını GOTO SELF_CHECK satırından önce yerleştirin. Pause satırından önce epromun 0. adresine 1 değerini yazdırın. Pic'e enerji verdiğiniz anda 0. adrese 1 yazılacaktır. Daha sonra pic'i programlayıcıya takın ve okutun. 0. adreste hala ff görüyorsanız pic arızalı/çakma olabilir. Başka pic16f88 ile denedinizmi?

WRITE 0, 1 '0 adresine 1 yazın
Pause 100  '100 ms AÇILIŞ GECİKMESİ
GOTO SELF_CHECK

Önce byte olarak bir şeyler kaydedip sonra word kayıdına geçmenizi de tavsiye ederim.

F.T

Programa göre  eeproma sürekli kayıt yapmışsınız.
Hakk şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

POWER

@kaganayanoglu
sizin sorun benim sorunla bire bir aynı değil. diyelimki eproma 10 değerini yazdım burda sorun yok.devrenin enerjisi kesilip tekrar çalıştırıldığı zaman daha önceden yazdırdım o 10 değerini okuyamıyordum o değer sıfır çıkıyordu.sorun isisdeki 16f88 den çıktı.f88 yenisi ile değiştirdim normale döndü.sağolsun f.t hocam çözdü sorunu.
TB6BKG

F.T

Bu program ise eeprom gitmiş olabilir bence.sürekli yazmış eeproma..
Hakk şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

Maxim

yok kaan bey bize inanmıyor pek :)
mutlaka bir hata olmalı diyor ama o hatayı kendinde aramıyor

yukarıdaki kod için konuş-muyorum
eeproma kayıt olayı biraz risklidir, herkes eepromun bir yazma ömrü olduğunu bilir

kodu yanlış yazdığınızı düşünelim,yani sürekli üst üste eeproma kayıt yapan bir program olsun
her 10ms de bir kayıt
1 saniyede 100 kere
1 dakikada 6.000 kere
o anda telefon geldi konuştunuz, 5 dakika geçti 30.000 kere yazıldı bile!

ete

Programa bir bakın; Goto SELF_CHECK ile  o etikete gidiyor program. Oradan birdaha geri dönemiyor. Nereye dönsün ki, RETURN var orada.
Gelirken bir adres almadıki geldiği yere dönsün!!!!
Bence eproma hiç bir şey yazılmıyor o programda çünki main etiketine gitmesi mümkün değil.

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