Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => Atmel => Konuyu başlatan: alper06 - 14 Ağustos 2012, 00:53:45

Başlık: AVR DAHILI EEPROM PROBLEMI
Gönderen: alper06 - 14 Ağustos 2012, 00:53:45
Merhaba arkadaşlar.

Endüstriyel bir projede Atmega32 serisi işlemciler kullandım.
Kartlar harici Eeprom kullanmak yerine AVR' nin dahili Eeprom belleğini kullandım.
Buralara cihazlar ile ilgili Konfigurasyon Değerlerini yükledim.
Cihazları sahaya gönderdikten sonra 2-3 hafta sonra sorunlar çıkmaya başladı.
Daha sonra kontrol ettiğimde cihazlardaki Eeprom değerlerinn çok alakasız değerler ile değiştiğini gördüm.
Yazma ve okuma yaparken Interruptları kapatmadım. Bundan dolayı olabilir mi?

Yazma ve okuma işini aşağıdaki gibi AVR-GCC komutlarıyla yaptım.
//
//   eeprom_busy_wait();
//   eeprom_write_byte(0,1);         //Language
/////////////////////////////////////////////////////////////////////////
//   eeprom_busy_wait();
//   SpnDisplayValue[6]         =eeprom_read_word(62);


Teşekkürler...
Başlık: Ynt: AVR DAHILI EEPROM PROBLEMI
Gönderen: arm-beginner - 14 Ağustos 2012, 09:31:34
AVR-GCC eeprom fonksiyonlarını kullanmiyorum: çünkü GCC'nin yeni versiyonlarında code boyutunu aşırı şişiriyor. Bu nedenle kendi fonksiyonlarımı kullanıyorum ve GCC'nin bu fonksiyonlarını çok iyi bilmiyorum.
Dikkatimi çekenler:
- Çoook eskilerden kalan bir alışkanlık: 0x0000 adresi kullanmam. Eski AVR'lerde bu adrsi kullanmamak bir zorunlukdu.
- Neden 2 tane  eeprom_busy_wait() kullanıyorsun? Başka yerlerde  eeprom_write_byte() kullanmiyorsan, ilkini silebilirsin.
- eeprom_write_byte(0,1) compiler tarafından bir uyarı tetiklemiyormu? Bence doğrusu
eeprom_write_byte((char *)0, 1) olması lazım.
- Dataseet'deki "Preventing EEPROM corruption" bölümünü okumuşundur, ama bence bir daha oku. Ben her yeni projemde o tür uyarıları tekrar okurum.

Burda tek bilmediğimiz konu: Fuse'ları nasıl ayarladın? Mutlaka 'Brown out' devrede olsun. 2. önerim: En uzun bekleme süresini seç, ve program başında hemen EEPROM'a yazıyorsan, oraya ekstradan bir bekleme koy. Çünkü EEPROM'a yazarken, voltajın önemi var.

Ben eeprom'u çok sık kullanırım ve yıllardır çalışan cihazlarım var, ve hiç birinde eeprom ile ilgili bir sorun ile karşılaşmadım.

Moralini bozma. Mutlaka problemi çözeceksin!
Başlık: Ynt: AVR DAHILI EEPROM PROBLEMI
Gönderen: alper06 - 14 Ağustos 2012, 15:32:59
Alıntı yapılan: arm-beginner - 14 Ağustos 2012, 09:31:34
AVR-GCC eeprom fonksiyonlarını kullanmiyorum: çünkü GCC'nin yeni versiyonlarında code boyutunu aşırı şişiriyor. Bu nedenle kendi fonksiyonlarımı kullanıyorum ve GCC'nin bu fonksiyonlarını çok iyi bilmiyorum.
Dikkatimi çekenler:
- Çoook eskilerden kalan bir alışkanlık: 0x0000 adresi kullanmam. Eski AVR'lerde bu adrsi kullanmamak bir zorunlukdu.
- Neden 2 tane  eeprom_busy_wait() kullanıyorsun? Başka yerlerde  eeprom_write_byte() kullanmiyorsan, ilkini silebilirsin.
- eeprom_write_byte(0,1) compiler tarafından bir uyarı tetiklemiyormu? Bence doğrusu
eeprom_write_byte((char *)0, 1) olması lazım.
- Dataseet'deki "Preventing EEPROM corruption" bölümünü okumuşundur, ama bence bir daha oku. Ben her yeni projemde o tür uyarıları tekrar okurum.

Burda tek bilmediğimiz konu: Fuse'ları nasıl ayarladın? Mutlaka 'Brown out' devrede olsun. 2. önerim: En uzun bekleme süresini seç, ve program başında hemen EEPROM'a yazıyorsan, oraya ekstradan bir bekleme koy. Çünkü EEPROM'a yazarken, voltajın önemi var.

Ben eeprom'u çok sık kullanırım ve yıllardır çalışan cihazlarım var, ve hiç birinde eeprom ile ilgili bir sorun ile karşılaşmadım.

Moralini bozma. Mutlaka problemi çözeceksin!


eeprom_write_byte((char *)0, 1) olarak düzeltmeleri yaptım.
Bundan dolayı verdiği uyarılar kayboldu.

Umarım sorun hallolmuştur..
Teşekkürler
Başlık: Ynt: AVR DAHILI EEPROM PROBLEMI
Gönderen: mehmet - 15 Ağustos 2012, 03:19:15
Eğer AVR'yi besleyen kısımda parazit varsa veya
sistem kapatıldıgında -ki güçlü besleme kaynağı
kullanıldıgında daha fazla olmakta- voltaj yavaşça
azaldığı için AVR Eepromnunda sorunla oluşabiliyor.
Bunu önlemenin bir yolu BOR sistemini kullanmak.
5v besleme yapılıyorsa 4v civarına BOR ayarını
yapmak yeterli.

Saygılar...