Donanım Haber Forum
Ana Sayfa | Kayıt ol | Profilim | Gelen Kutusu | DH Hız Aşırtma VT | Adres Defteri | Email'le üyeliklerim | Benim forumlarım | Fotoğraf Albümleri
Favorileriniz | Üyeler | Arama | SSS | Şikayet listesi | Uyarı listesi | Nick işlemleri
Pic'le ilgili karşılaştığım en ilginç sorun:16F877 ile EEPROM'a yazarken 5. bitte problem oluşuyor

İlgili konuları bak: (bu forumda | tüm forumlarda)

Bu isimle girdiniz: Guest
Bu konudaki kullanıcılar: hiç
  Basılabilir versiyon
Tüm forumlar >> [Donanım / Hardware] >> Elektronik >> Pic'le ilgili karşılaştığım en ilginç sorun:16F877 ile EEPROM'a yazarken 5. bitte problem oluşuyor Sayfa: [1]
Giriş
Mesaj << Daha eski konu   Daha yeni konu >>
eternal sunshine

 

Mesaj: 34


 9 Temmuz 2008; 11:39:51 
Bu mesajla ilgili şikayetinizi bu icon a tıklayarak yapabilirsiniz.

Selam Arkadaşlar,

Şimdiye kadar pic'de karşılaştığım en ilginç sorun ile karşı karşıyayım.

PicBasic Pro ile programladigim 877'nin eepromuna WRITE komutu ile veri yaziyorum.
Doğrulama için veriyi okuduğumda yazdığım bazen yazdığım değerden farklı bir değer görebiliyorum.
Nedenini anlamak için gönderdiğim ve gelen verileri binary'ye çevirdim ve 5. bitteki 0'ların 1 olduğunu gördüm.
Yani 236 yazdığımda 252 okuyorum.
128 yazdığım 144 okuyorum.
1 yazdığımda 17 okuyorum.

Program ana döngüye gelmeden önce eepromun kullandığım bölümüne "0" değerini yazan küçük bir döngü çalıştırıyorum. Pic'i çıkarıp programlama kartıyla okuttuğumda 0 yazdığım adreslerdeki 0 değerini görüyorum. Yani bir setli kalma durumu yok.

Şuanda yazıya ara verip denediğimde 128 yazıp 128 okumaya başladım ilginç şekilde
ama hala 236'yı 252 olarak okuyorum.

Konuyla ilgili yardım edebilirseniz çok sevinirim.





_____________________________

eternal sunshine

 

Mesaj: 34


 9 Temmuz 2008; 11:48:09 
Bu mesajla ilgili şikayetinizi bu icon a tıklayarak yapabilirsiniz.

Bu arada programın ilgili bölümlerini de eklesem iyi olur:

....
Duty=500
....
KayitAdresi = 0
.....
gosub CleanEEPROM
PreMain:
Hserout ["Program Calisiyor "]
LCDOUT cmd, row1, "Calisiyor..."
Main:
toggle led
pause 50
IF portd.0 = 1 THEN GOSUB Button1
IF portd.1 = 1 THEN GOSUB Button2
IF portd.2 = 1 THEN GOSUB kaydet
If portd.3 = 1 THEN GOSUB Git
goto main
......

Kaydet:
disable
bekle:if portd.2 = 1 then goto bekle

WRITE KayitAdresi, duty.byte0
pause 1000
read KayitAdresi, validation.byte0
lcdout cmd, cls, "d:",#duty.byte0," v:",#validation.byte0
lcdout cmd, row2, "Adres: ",#kayitadresi
pause 1500

KayitAdresi = KayitAdresi + 1

WRITE KayitAdresi, 128 'duty.byte1
pause 1000
read KayitAdresi, validation.byte1
lcdout cmd, cls, "d:",#duty.byte1," v:",#validation.byte1
lcdout cmd, row2, "Adres: ",#kayitadresi
pause 1500

KayitAdresi = KayitAdresi + 1

enable
RETURN

.........

CleanEEPROM:
for adres = 1 to adres= 30
lcdout cmd,right, "."
write adres, 0
pause 50
next adres
return


etkin duty değeri(d) ve eeprom'dan okunan değer(v) yan yana lcd'de görüntüleniyor.
Eepromu bilgisayara okutup gördüğüm değer de READ ile okuduğum değer ile aynı.



_____________________________

r2d2droids

 

Mesaj: 3100


 9 Temmuz 2008; 14:36:24 
Bu mesajla ilgili şikayetinizi bu icon a tıklayarak yapabilirsiniz.

compiler write komutunu icra ederken neler yapıyor user manualinde bir yerlerde yazıyor olmalı. eğer bu rutin 877 nin datasında verilen rutunden farklı ise bu soruna neden olabilir.
datasında eeproma yazmak için gereken rutini aşağıya kopyalıyorum

The steps to write to EEPROM data memory are:
1. If step 10 is not implemented, check the WR bit
to see if a write is in progress.
2. Write the address to EEADR. Make sure that the
address is not larger than the memory size of
the PIC16F87X device.
3. Write the 8-bit data value to be programmed in
the EEDATA register.
4. Clear the EEPGD bit to point to EEPROM data
memory.
5. Set the WREN bit to enable program operations.
6. Disable interrupts (if enabled).
7. Execute the special five instruction sequence:
• Write 55h to EECON2 in two steps (first to W,
then to EECON2)
• Write AAh to EECON2 in two steps (first to
W, then to EECON2)
• Set the WR bit
8. Enable interrupts (if using interrupts).
9. Clear the WREN bit to disable program operations.
10. At the completion of the write cycle, the WR bit
is cleared and the EEIF interrupt flag bit is set.
(EEIF must be cleared by firmware.) If step 1 is
not implemented, then firmware should check
for EEIF to be set, or WR to clear, to indicate the
end of the program cycle.

isterseniz bir de write fonksiyonunu çağırmadan yukarıda yer alan adımları deneyin. sonuç farklı olmuyorsa üzerinde düşünelim...

_____________________________

Nous faisons confiance dans Dieu
electronical engineer
eternal sunshine

 

Mesaj: 34


 9 Temmuz 2008; 15:47:59 
Bu mesajla ilgili şikayetinizi bu icon a tıklayarak yapabilirsiniz.

Bir de dikkatimi çeken bişey var.
Pic'i bilgisayardan okuttuğumda EEPROM'un kullanılmayan tüm değerlerinde EF yazılı olduğunu gördüm. Bu da 11101111 ediyor. 5.bit diğerlerinden farklı ve"0". Nedenini merak ettim oldukça doğrusu. Emin olmamakla birlikte FF yazması gerektiğini hatırlıyorum.

_____________________________

r2d2droids

 

Mesaj: 3100


 9 Temmuz 2008; 15:54:22 
Bu mesajla ilgili şikayetinizi bu icon a tıklayarak yapabilirsiniz.

FF olarak görünmesi gerekiyor. write komutu tüm eeprom a bişeyler yazmış olmasın...

_____________________________

Nous faisons confiance dans Dieu
electronical engineer
eternal sunshine

 

Mesaj: 34


 9 Temmuz 2008; 16:08:10 
Bu mesajla ilgili şikayetinizi bu icon a tıklayarak yapabilirsiniz.

Daha önce de bu write fonksiyonunu aynı mikroişlemci üzerinde aynı dille (PBP) kullanmıştım ama hiç sorun çıkmamıştı.
Anlayamıyorum şuandaki problemi. Bir de şuan Bootloader kullanıyorum. Aceba bi etkisi olur mu. TinyBlootloader ile programlıyorum.

_____________________________

eternal sunshine

 

Mesaj: 34


 9 Temmuz 2008; 23:43:08 
Bu mesajla ilgili şikayetinizi bu icon a tıklayarak yapabilirsiniz.

bootloader programını değiştirdim.
tamamen farkı bir program kurdum ve hata hala devam ediyor.

_____________________________

samed2005

Mesaj: 366


 9 Temmuz 2008; 23:53:31 
Bu mesajla ilgili şikayetinizi bu icon a tıklayarak yapabilirsiniz.

Bu 16f877 ler ya sorunlu bir pic yada körün taşı bir bana geliyor. Bir tanesi programlarken bozulmuştu. Hafızasına hala okuma-yazma yapabiliyorum ama program çalışmıyor. 5v veriyorum 3,3e düşürecek kadar çok akım çekiyor. Bir diğeri yine programlama sırasında bozuldu. Bununda hafızası silinmiyor. Okuyorsun, içindeki verilerin üzerine yazıyorsun ama silemiyorsun. Sildiğinizde normalde her wordun 3FFF olması gerekirken eski değerini koruyor. O wordün üstüne yazarsanız değeri değişiyor yoksa yok. Hiçbir worde 3FFF yazdıramıyorumda hafızasını sildiremiyorumda.

_____________________________


Türk Telekom'un her ay hiç bir hizmet vermeden 14,17 YTL almasına karşıysanız tıklayın
Liu Kang

Mesaj: 1018


 10 Temmuz 2008; 9:52:00 
Bu mesajla ilgili şikayetinizi bu icon a tıklayarak yapabilirsiniz.

Mesela ben de bir örnek vereyim, bazı nadir durumlarda program çalışıyor ama hafızasına hiçbir şekilde erişilemiyor. Kopmuş gitmiş bişeyler. Yani ezcümle eepromda ya da eeprom kontrol devrelerinde arıza olmayacak diye birşey yok. Bu ihtimal çok az değil.

_____________________________

Sayfa:   [1]
Tüm forumlar >> [Donanım / Hardware] >> Elektronik >> Pic'le ilgili karşılaştığım en ilginç sorun:16F877 ile EEPROM'a yazarken 5. bitte problem oluşuyor Sayfa: [1]
Buraya git:



Donanım Haber Video İnceleme
Chenbro 61163 kasa
Uygun fiyatli fakat fonksiyonel bir kasa mi ariyorsunuz?
Thermaltake Armor+ VH6000BWS
Thermaltake Armor+ VH6000BWS PC Kasası Video incelemesi
 


Yeni mesajlar Yeni mesajlar yok
Popüler konu, yeni mesajlar ile Popüler konu, yeni mesajlarsız
Kilitli yeni mesajlar ile Yeni mesajlar olmadan kilitli
 Yeni mesaj at
 Mesaja cevap at
 Yeni anket aç
 Oy kullan