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 ![]() |
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 |
Ö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. |
Arkadaşım yukarıda anlattım ya..
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 ![]() |
ş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. |
Ş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. |
Ben artık pes ediyorum![]()
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? |
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. |
Çok hararetli anlattığımı sanmıyorum,![]() Şimdi birşey diycem yine ortalık karışcak ![]() 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 ![]() |
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 |
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. |
@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. |
İlginiz için teşekkür ederim.Evet şimdi fikirlermiz uyuştu.![]() Ö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. |
@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. |
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. |
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. |
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. Cevapları Gizle