Arama butonu
Bu konudaki kullanıcılar: 1 misafir
54
Cevap
7013
Tıklama
0
Öne Çıkarma
Cevap: PIC eeprom ulaşımı (2. sayfa)
A
18 yıl
Yarbay
Konu Sahibi

Yalnız WORD değişekeni 16 bitlik bir değişkendir.Fakat sanırsam bu PIC program belleği için ifade edilen WORD 14 bitlik bir kavram.Fakat kilobyte hesabı da doğru çıkıyor.

Kitapta diyor ki

PIC 16F628A 2 Kbyte'lık program belleğinin içerisinde 14 bit uzunluğundaki program komutları saklanır.

Mesela bizim MOVLW komutumuz 14 bit uzunluğundaysa

16F628A nın içine 2048*8/14=1170,2857142857142857142857142857

Kadar komut mu yazabiliriz?

Öff kafam karıştı biri açıklarsa çok sevinirim.Özellikle 14 bit olan şey nedir?

Teşekkürler





< Bu mesaj bu kişi tarafından değiştirildi alper.y -- 27 Aralık 2007; 23:26:17 >
Bu mesaja 1 cevap geldi.
U
18 yıl
Binbaşı

daha önceden programlanmış ve kullanımı esnasında eepromuna bilgiler yazılmış birpic tekrar programlandığında eepromu otomatik sıfırlanır mı?


Bu mesaja 1 cevap geldi.
A
18 yıl
Yarbay
Konu Sahibi

quote:

Orjinalden alıntı: elbombacı

daha önceden programlanmış ve kullanımı esnasında eepromuna bilgiler yazılmış birpic tekrar programlandığında eepromu otomatik sıfırlanır mı?

Programlarken eepromuna dokunmazsak sıfırlanmaz.Fakat biz yine de gaza gelip eepromu da silersek sıfırlanır.

En azından ben böyle biliyorum


Bu mesaja 1 cevap geldi.
P
18 yıl
Yüzbaşı

quote:

Yalnız WORD değişekeni 16 bitlik bir değişkendir.Fakat sanırsam bu PIC program belleği için ifade edilen WORD 14 bitlik bir kavram.Fakat kilobyte hesabı da doğru çıkıyor.

Kitapta diyor ki

PIC 16F628A 2 Kbyte'lık program belleğinin içerisinde 14 bit uzunluğundaki program komutları saklanır.

Mesela bizim MOVLW komutumuz 14 bit uzunluğundaysa

16F628A nın içine 2048*8/14=1170,2857142857142857142857142857

Kadar komut mu yazabiliriz?

Öff kafam karıştı biri açıklarsa çok sevinirim.Özellikle 14 bit olan şey nedir?

Teşekkürler


PIC RISC mimari bir mikrodenetleyicidir ve komut uzunlukları 14 bittir(16XXX serisi için)Bu şu anlama gelir;

PIC16F628 Pic Program Belleği
01100101110100 komut 1
11110010100010 komut 2
...
...
...
11011000001011 komut 2048

Yani komutlar PROGRAM belleğinde bu şekilde yerleşir.Program belleğini alt alta sıralanmış 14 bit uzunlukta dilimler dizisi olarak düşünmeniz olayı kavramanıza yardımcı olacaktır.Bahsettiğiniz WORD tipi'nin bu anlattığım olay ile hiç alakası yok.Bu tamamen RAM ile alakalı birşey.16XXX serisinde bir RAM gözü bit boyutu 1 byte'dır.(8bit)WORD 16 bit olduğuna göre bu tipi ifade etmek için derleyici iki adet RAM gözü kullanır.

PIC16F628 Ram Belleği
00000000 WORD
00000000

11001000 DWORD
00110111
11100100
00111000





< Bu mesaj bu kişi tarafından değiştirildi PanDa -- 28 Aralık 2007; 8:52:00 >
Bu mesaja 1 cevap geldi.
Q
18 yıl
Binbaşı

Özetle 16f877 'ye en fazla kaç kilo byte lık hex dosyası atabiliriz. 8kb mı 16 kb mı


Bu mesaja 1 cevap geldi.
P
18 yıl
Yüzbaşı

quote:

Özetle 16f877 'ye en fazla kaç kilo byte lık hex dosyası atabiliriz. 8kb mı 16 kb mı


Dostum daha önce datasheet diye birşey duydun mu?

8KB


Bu mesaja 1 cevap geldi.
Q
18 yıl
Binbaşı

quote:

Orjinalden alıntı: PanDa

quote:

Özetle 16f877 'ye en fazla kaç kilo byte lık hex dosyası atabiliriz. 8kb mı 16 kb mı


Dostum daha önce datasheet diye birşey duydun mu?

8KB

Zaten datashetindeki "Up to 8K x 14 words of FLASH Program Memory" kafamı karıştırdır.


Bu mesaja 1 cevap geldi.
P
18 yıl
Yüzbaşı

Arkadaşım yukarıda anlattım ya..

quote:

PIC16F628 Pic Program Belleği
01100101110100 komut 1
11110010100010 komut 2
...
...
...
11011000001011 komut 2048


PIC16F628'in program belleği 2KB.Yani 2048 tane 14 bit uzunluğunda komut tutabiliyor.(2048 x 14 veya 2KB x 14)PIC16F877 içinde aynı olay ama o 8KB

Bundan daha açık anlatım var mı bilmiyorum


Bu mesaja 1 cevap geldi.
S
18 yıl
Binbaşı

şekil olsa belki daha açık olurdu hocam.
Ekleme:Arkadaşlar 16F877 nin donanım mimarisinin şeklini google da bulup bir inceleyin bence.Daha açık olur.





< Bu mesaj bu kişi tarafından değiştirildi strom -- 28 Aralık 2007; 22:38:33 >
Bu mesaja 1 cevap geldi.
A
18 yıl
Yarbay
Konu Sahibi

Şimdi Program belleği 2 Kilobayt (16F628A için).

2048 tane komut yazıyoruz.Komutlar 14 bit şeklinde ise


(2 048 * 14) / 8 = 3 584 bayt yani 3.5 kilobayt lık .hex dosyası atabileceğimiz anlamına gelmiyor mu?. Ama program belleği 2 kilobyte diye geçiyor.Nerede yanlış düşünüyorum.

Teşekkür edeirm.


Bu mesaja 1 cevap geldi.
P
18 yıl
Yüzbaşı

Ben artık pes ediyorum

quote:

(2 048 * 14) / 8 = 3 584 bayt yani 3.5 kilobayt lık .hex dosyası atabileceğimiz anlamına gelmiyor mu?. Ama program belleği 2 kilobyte diye geçiyor.Nerede yanlış düşünüyorum.


Arkadaşlar konuyu açabildiğim kadar daha açayım.İlk önce neden datasheet'de 2KB yazıyor?Hafıza yapısının en temel elemanı byte'dır.Yani 8 bit.Büyüyen hafıza bir byte'ın katlarıdır.Fakat 16XXX serisi denetleyicilerin komut uzunluğu 14 bit.Bu komut uzunluğunu 1 byte yada 2 byte (WORD) olarak ifade edemiyoruz.Çünkü;

011101 <- 6 BIT 00010101 <- 1 BYTE = toplam 14bit

Bu yüzden datasheet'lerde hafıza büyüklüğünü bir şekilde ifade etmek için, 2KBolarak geçiyor.Adamlar diyorki " 2KB - 2048'e eşittir, yanına x14 koyuncada 2048 tane 14 bit komut saklarsınız"...

Yani lütfen şunu 14 ile çarpıp 8 ile bölmekten vazgeçin.Siz 16f628 için 2048 tane komut yazabilirsiniz.HEX dosyasında da 2048 tane 14 bitlik komut olacaktır.Lütfen PIC16F877 datasheet'inin 137 ve 137. sayfalarına bir bakın.

Birde datasheet'in ilk başlangıcındaki şu yazıya dikkat edin;

• Up to 8K x 14 words of FLASH Program Memory,
Up to 368 x 8 bytes of Data Memory (RAM)
Up to 256 x 8 bytes of EEPROM data memory

Burayı dikkatli okusanız zaten olayı çözeceksiniz.Up to 8K X 14 WORDS of FLASH memory.Bunun anlamı 8192 adet 14 kelime(komut)dir.Yani program belleği daha önce de gösterdiğim gibi 14 bitlik sıralar halinde organize edilmiş.RAM için ise 368 x 8 yani 368 tane 8 bitlik bilgi saklarsın demiş çünkü RAM de 8 bitlik sıralar halinde organize edilmiş.

PIC16F628 Pic Program Belleği
01100101110100 komut 1
11110010100010 komut 2
...
...
...
11011000001011 komut 2048

Bu yukardakinin üstüne de ŞEKİL istemek bence biraz saçma arkadaşlar.Eğer hala anlamadıysanız yapabileceğim birşey yok.
Ayrıca o kadar birşeyler yazıp yardımcı olmaya çalıştım.Sizden bir ricam olacak.Herkez PIC programlarken kullanıdığı dili yazabilir mi acaba?





< Bu mesaj bu kişi tarafından değiştirildi PanDa -- 29 Aralık 2007; 14:24:52 >
Bu mesaja 1 cevap geldi.
Q
18 yıl
Binbaşı

Detaylı anlatım için sağol panda anlaşılmıştır,sakin ol :) Bu durumda 18f452 ye geçtim.Pin yapısı felan aynı, 32 kb Flash'ı var 877 den müzdarip olanlara duyrulur.


Bu mesaja 1 cevap geldi.
P
18 yıl
Yüzbaşı

Çok hararetli anlattığımı sanmıyorum, sakin olayım.

Şimdi birşey diycem yine ortalık karışcak18F452'ye geçtin ok ama onun hafıza yapısı biraz farklı.Her komut 16 bit büyüklüğünde.Yani 18f452 ile 32K adet komut değil, 16384 adet(32'nin yarısı olduğuna dikkat edin) komut saklayabilirsin.

Size tavsiyem, eğer imkanınız varsa PIC18F8720 ile çalışmanız.
128K Program belleği, 1Mbit harici bellekten de boot oluyor,
4KByte'a yakın RAM,
1KByte EEPROM, vb.

Fakat bunun DIP şekli yok.Kendisi 80 bacaklı ve SMD olarak satılıyor.Türkiyede bulmak biraz zor ancak getirtmeniz lazım(ben çalıştığım firmada getirtmiştim)Ayrıca programlayıcısınıda yapmak imkansız gibi.Tek çare ICD almak.(Her PIC'i programlıyor)

Aslında sistem programlama ile uğraştığımdan uzun zamandır ARM serisine geçmeyi düşünüyorum(bir linux çekirdeği yazarız belki)Var mı benim gibi düşünen????????????


Bu mesaja 2 cevap geldi.
A
18 yıl
Yarbay
Konu Sahibi

Sayın PanDa anlattığınız için teşekkürler.Her şeyi anladım fakat bir yerde sorun yaşıyorum.

2048 tane 14 bitlik komut yazabiliyoruz.Bunu anladım.2 Kilobayt lık komut saklıyabiliyoruz.Fakat bu komutları kapladığı boyut olarak düşünürsek dediğim hesaplama neden yanlış oluyor? PIC in program belleğini doldurduk diyelim.PIC te 2048 tane 14 bitlik uzunluğunda komut var.Kapladığı alan 28672 tane bit değil mi? 8 bit için 1 bayt diyoruz. O zaman 3584 bayt oluyor.Yani bu komutlar toplamda 3.5 kilobaytlık alan kaplamıyorlar mı?

Sabrınız için teşekkür ederim.

Ben Asm dilini kullanıyorum.

Teşekkürler



Q
18 yıl
Binbaşı

quote:

Orjinalden alıntı: PanDa

.Yani 18f452 ile 32K adet komut değil, 16384 adet(32'nin yarısı olduğuna dikkat edin) komut saklayabilirsin.


Yani o zaman 18f452 ye 16kb büyüklüğünde hex dosyası atabiliriz.Sanırım bu da benim işimi görür.Kısayoldan işimi görecek bişi olsun yeter.
Bu arda micrchip'in sitesinde gördümde 32 bit 70 mhz 512 kb Flash bellekli 100 pin pic ler çıkarmış.Gerçi türkiyede varmıdır yokmudur ,komut seti programlayıcısı nasıl olur vs.. o ayrı mesele.
Proton kullanıyorum kodlama için.


Bu mesaja 1 cevap geldi.
P
18 yıl
Yüzbaşı

@90alper90 yaptığın hesap BYTE'ları hesaplamak mantığında doğru ama şöyle; 2048 x 14 / 8 dediğin değer yapıyor sadece, yani evet 3.5KB'lık alan var.Fakat komut uzunlukları 1 byte'değil ki
Komut uzunlukları 14 bit.Bu yüzden 2048 adet yüklenebiliyor.Eğer 8bit uzunluğunda olsaydı dediğin gibi 3.5KB yükleme yapılabilirdi..Senin kafanın içini çok iyi anlıyorum.Çünkü sen assembly'de yazıyorsun ve bence de şu an en iyisini yapıyorsun.Assembly ve C'ciler böyle byte'a bit'e çok takar kafayı
Sana tavsiyem 18FXXX serisine geçtiğinde kesinlikle C18 ile çalışman.Yada 30XXX serisi ile çalışırsan C30 ile çalışman.Ayrıca donanım bilginide geliştir ve uzman ol
Ben gömülü sistemlerle uğraşanların Proton, BASIC gibi diller ile uğraşmasını doğru bulmuyorum.Ama amaç kolaydan devreler yapmaksa ve amaç KOD yazmak değilse tabi ilgilenilebilir....

@QKlavye dediğin PIC'leri biliyorum fakat çok detaylı bakmadım.Yinede Microchip'in şuan GÖMÜLÜ OS yazılabilecek kapasitede PIC ürettiğini düşünmüyorum.Yinede son ürünlere bakmak lazım.

Kolay Gelsin.


Bu mesaja 1 cevap geldi.
A
18 yıl
Yarbay
Konu Sahibi

İlginiz için teşekkür ederim.Evet şimdi fikirlermiz uyuştu. Sonuç olara maksimum 2048 tane 14 bitlik veri yazıyoruz.Ama kapladığı alan 3.5 kb.Yani 16f628A nın içine maksimum 3.5 kb büyüklüğünde program atabilir.Dediğiniz gibi ASM de bit byte kavramı ile çok karşılaşıyorsunuz.Fakat PIC in içinde ne oluyor, nasıl oluyor çok iyi anlıyorsunuz.Ben de ASM nin hakkını vermek için Register adları yerine adreslerini kullanıyorum.Örneğin STATUS yerine h'03' yazıyorum.Genellikle EQU komutunu da kullanmıyorum.Kullanınca biraz PBP ye kaçıyormuş gibi kalıyor ve ASM kodlamanın zevkini vermiyor.

Öneriniz için teşekkür ederim. C18 C30 dediğiniz kavramlar C programlamacılık için mi geçerli, biraz açabilir misiniz?

Teşekkür ederim.


Bu mesaja 1 cevap geldi.
P
18 yıl
Yüzbaşı

@90alper90 şimdi STATUS yerine 0x03 yazman biraz saçma yalnız.Bende yıllardır assembly ile yazıyorum ve birçok asm gurusu gördüm böyle birşey yapmıyorlar:)
İkincisi yine PIC içine 3.5KB program atıyoruz kelimesi yalnış oldu."3.5KB bit tutuyor desek daha doğru"

C18 ise 18FXXX serisi için C dilinde program yazmak ve derlemek için compiler'dır.MPLAB ile bütünleşik çalışır.


Bu mesaja 1 cevap geldi.
A
18 yıl
Yarbay
Konu Sahibi

STATUS olayı şöyle biraz da PIC in içindeki adresleri de öğrenmeye çalışıyorum.DAha öğrenme aşamasındayım ve programlar basit oluyor.Onun için zorluk çıkartmıyor ve hem de adresleri öğrenmiş oluyorum.Ama ilerde daha uzun programlara geçince program esnasında karışıklık verebilir.İnatla h'03' kullanmanın da anlamı yok tabi ki.

Yanıtlarınız için teşekkür ederim.


Bu mesaja 1 cevap geldi.
Q
18 yıl
Binbaşı

Proton programında Result's penceresi var.Buradaki compile sonrası bilgiler sağlıklımıdır.
Şöyle ki 16f877 için kodu derlediğimde muhtemel 8192 alandan 1605 ini kullanıdığını,yaklaşık % 20 lik alanın kullanılıp kalanının boş olduğunu söylüyor.


Bu mesaja 1 cevap geldi.