Bu uygulamada "Atmega328P ile bootloader yükleme" üzerinde çalışacağız.
Not : Kart asıl tasarımı " http://vonkonow.com/wordpress/2012/10/nanino-the-diy-friendly-arduino/" adresindeki "Johan von Konow" ait. Biz sadece birkaç ekleme ve değişiklik yaptık.
Bootloader
Elektronik ile uğraşanlar özellikle yazılım güncellemesi gereken bazı cihazların seri port veya USB port üzerinden güncelleme (yazılım yüklemesi) yapılabildiğini rastlamıştır. Bu servis kolaylığı sağlamaktadır. Çünkü cihazın fabrikaya gönderilmesi gerekmeden, veya cihazı açmadan mikrokontroller üzerindeki yazılımı kolaylıkla yüklenebilmesine imkan sağlar. Bu yöntemin başka bir avantajı kart üzerinde özellikle SMD yapısındaki kılıflardaki mikrokontrollerlerin (sökülmesinin zorluğu ve riski bir yana) üzerinde işlem yapılması ve programlanacak mikrokontroller ve programlayıcı çeşitliliği gibi konularla uğraşması ayrı bir durumdur.Tüm bu sorunları çözümü olarak mikrokontoller üzerine üretim esnasında bir yazılım yüklenir ve bu yazılımın tek görevi seri port, ethernet veya USB gibi iletişim yöntemleri ile gelecek verilerin (burada asıl program diyelim) mikrokontrollerin hafızasına yazmaktır. İşte bu mikrokontrollerin üzerine yazılan bu ilk programa bootloader denir. Bootloader işlemci tarafından koruma altındadır. İşlemci tamamen silinene kadar flash bellekte kalır.
8 bit mikrokontroller çipler üzerinde belki gerekli olmasada (dip kılıfındaki çiplerin kolay sökülebilmesi sayesinde) özellikle yüksek hafızalı 32 bit mikrokontrollerler üzerinde gereklidir. Kılıf yapıları ve program özellikleri nedeniyle gereklidir.
Bootloader örneği olarak yazıcılarda kullanılmaktadır. Bazen gelen yazıcı yazılımında bazı hatalar olabiliyor. Daha önemlisi üretici yazıcının daha verimli çalışması için yazılımında küçük güncellemeler yapmış olabiliyor, bu durumda yazıcının USB portu üzerinden yazıcının yazılımı kolaylıkla güncellenebilmektedir.
Şekil-1:Bootloader prensip çalışma şekli
Sonuçta projede kullanılan bootloader dosyası Arduino dosyasıdır. Dolayısı ile kolaylıkla programlayıcıı üzerinde oluşturulan dosya derlenip kart üzerine gönderilebilecektir.
Atmega328p flash bellek bölümü iki ana bölüme ayrılmıştır; uygulama bölümü ve Bootloader bölümü. Her iki bölüm kendine göre koruma bitleri ile istenirse koruma altına alınabilir.
Normalde Atmega328p çiplerinde uygulama bölümünde flash alanı yazma komutu çalışmaz. (SPM) Flash alanını yazma komutu ancak bootloader alanına yazılmış programlar tarafından kullanılabilir.
Boot loader bitlerini kullanıcı aşağıdaki gibi seçebilir;
- Mikrokontroller tarafından yazılım güncellemesinden tüm Flash'ı koruyabilir
- Mikrokontroller tarafından bir yazılım güncellemesinden sadece Boot Loader Flash koruyabilir
- Mikrokontroller tarafından bir yazılım güncellemesinden sadece Uygulama Flash koruyabilir
Devre
Devre açısından fazla bir şey yok. İşlemci, kristal ve birkaç tane bağlantı için konnektör.
Şekil-2 :İşlemci kartı üstten görünümü
Şekil-3 :USB çevirici olarak kullanılan FTDI232BL kartının önden ve arkadan görünümü
Şekil-4 :USB çevirici ile bilgisayar arasındaki bağlanıyı sağlayan USB kablosu.
Şekil-5 :İşlemci ve USB çevirici kartlarının bağlantıları yapılmış hali
Burada dikkat edilecek nokta işlemci üzerinde bootloader için kullanılan RXD ve TXD bacakları işlemcinin seri (UART) haberleşmesi içinde kullanılmaktadır.
Şema
Devrede kullanılan USB çevirici hariç, projede kullanılan elemanlar IC1 (Atmega328p) sistemin kalbi olarak çalışmaktadır. IC1 (Atmega328p) bacaklarına bağlı X1 (16MHz ) kristal, C5 ve C6 (22pF) kondansatörler işlemcinin ihtiyacı olan saat frekansını üretmektedir. İşlemcinin 19 nolu bacağına bağlı olar R3 (1k) ve LED1 (LED13) işlemcinin çalışmasını test etmek üzere kullanım amacıyla monte edilmiştir. (ilk LED yak söndür uygulaması için temel elemandır)İşlemcinin 1.bacağına bağıl S1 (anahtarı) sıfırlama işlemi için kullanılırken, bu bacak ile Vcc arasına bağlı R2 (10) direnç pull up olarak kullanılmaktadır. İşlemcinin 1. bacağı ile P6 konnektörü DTR bacağı arasına bağlı C7 (100nF) kondansatör özellikle programlama esnasında işlemcinin sıfırlanmasını sağlar.
İşlemcinin bacaklarına bağlı P2,P3,P4,P5 (dişi) konnektörleri özellikle bu kartın üzerine takılacak ek kartlar için veya ek donanımların bağlanması için bağlantı noktalarını oluşturur.
Buradaki P6 (erkek) konnektör işlemcinin bootloader programlama için bağlantı noktasını oluşturur.
Besleme hatları üzerine bağlı R1(1k) ve LED2 (PWR LED) devrenin beslemeye bağlı olduğunu belirtir.
J1 konnektörü bir köprü yardımı ile harici besleme için kullanılıp kullanılmayacağını belirtir.
P1 klemensi, D1 (2W10M) köprü diyodu ve IC2 (7805) devrenin harici besleme ile kullanımı içindir. (J1 köprü bağlı iken)
Devre üzerinde belirtilmeyen kondansatörler filtre amaçlıdır.
Şekil-6:Blok şeması
Şekil-7:Devre şeması
Devre Yapımı
Devre yapımı kondansatör ve dirençlerin SMD olmasından başka bir özelliği yoktur. Kendinize güveniyorsanız kartı tekrar dip kılıf elemanlar için tekrar çizip çıkartabilirsiniz. Bazı noktalardaki yakın lehim adalarının lehimlenirken kısa devre olmaması için dikkat etmek yeterlidir. Entegre için için 28 bacaklı dar tip soket kullanılması entegrenin bir sonraki kullanımı için yerinde bir seçenek olacaktır.
Şekil-8:İşlemci kartı yollar
Şekil-9:İşlemci eleman yerleşimi
Şekil-10:İşlemci kartı üzerindeki bakırlı taraftaki eleman yerleşimi(SMD).
Şekil-11:İşlemci yolları birlikte eleman yerleşimi
Şekil-12:İşlemci yolları birlikte SMD eleman yerleşimi
Şekil-13:İşlemci kartı monte edilmiş halde önden ve arkadan görünümü . Kondansatör ve dirençlerin SMD kılıfında olduğunu unutmayın.
Projede kullanılan USB dönüştürücü sadece program yükleme işi için düşünülsede gerektiğinde seri port ile bilgisayar bağlantısını da yerine getirir. (USB-UART olarak çalışmaktadır.)
Şekil-14:İşlemci kartı ile USB dönüştürücü kartı arasındaki bağlantılar. Bağlantılar doğrudan kablo ile sağlanabileceği gibi, projedeki resimlerde görüldüğü gibi bağlantıları yapılan IDC10 kablo ve konnektörü ile sağlanabilir. İstenirse USB dönüştürücü tarafına kart tekrar elden geçirilip uygun bağlantılara sahip IDC konnektörü eklenebilir.
Devre Elemanları
1K (SMD-1206) | R3,R1 |
10K (SMD-1206) | R2 |
22pF (SMD-1206) | C5,C6 |
100nF (SMD-1206) | C1,C2,C4,C7, |
10µF (SMD-1206) | C3 |
3mm LED | LED1,LED2 |
ATMEGA328P(DIL) | IC1 |
7805 | IC2 |
W10M veya benzeri | D1 |
2'li klemens | P1 |
28 bacaklı entegre soketi (DIL) | 1 adet |
1x5 header pin erkek 90 derece | P6 |
1x2 header pin erkek | J1 |
1x8 header pin dişi | P2,P3 |
1x6 header pin dişi | P4,P5 |
buton | S1 |
Hazırlık
Şekil-15:Bootloder dosyasının bulunduğu yer ve bilgisayar üzerindeki simge görünümü.
Şekil-16:İşlemci farklı olsada AVRISP MKII programlayıcı bağlantısı ve görüntüsü. Programlayıcının kablosu kart üzerinde ISP olarak tanımlanan (2x3) konnaktöre takılır.
Şekil-17:AVR Studio programlama ana penceresi "Maim" sekmesi. "Device and Signature Bytes" başlığı altında "Atmega328p" seçili olduğuna emin ol. "Read Signature" butonuna basılırsa işlemcinin kodu görüntülenir.
Şekil-18:"Program" sekmesi altında "Flash" bölümünde programlanması istenen hex dosyası seçilir ve "Program" butonuna tıklanır. Seçilmiş olan hex dosyası işlemcinin flash belleğine aktarılır.
Şekil-19:Sigorta ayarları. Buradaki görüntü sadece fikir vermesi açısından AVR Studio görüntüsüdür. Kullanılacak farkli programlayıcılarda farklı ayarlar görülenecektir.
low fuses=0xFF
high fuses=0xDE
extended fuses=0x05
şeklinde elle değer girerek ayarlıyor ve "Program" butonuna basılarak yazılıyor.
Şekil-19:"LockBits" sekmesi altında koruma bitlerinden sadece boot bölümü ile ilgili olanların seçilmesi gerekir.
lock bits=0x0F
şeklinde elle girerek ayarlayıp, "Program" butonuna basılarak yazılıyor. Dikkat edilirse sadece Boot bölümü ile ilgili ayarları değişecektir.
Tek yapılması gereken artık işlemcinin burada monte edilmiş kartın üzerine takmak. Programlama portuna gerekli bağlantıyı yapıp bilgisayarın USB portuna bağlamak. Bu noktada aslında seri port üzerinden haberleşme sağlanacağı için atanan seri port numarasının öğrenilmesi gerekiyor. Bilgisayar sistemleri arasında değişiklik gösterebileceği için sizinkini anlatan belgeleri internetten aramanız yerinde olacaktır.
Not: Arduino programını incelerseniz, bazı programlayıcılar ile doğrudan işlemcinin (Atmega serisi) programlanabildiğini görebilirsiniz.
Programlama
Şekil-20:Montajı tamamlanmış, bağlantıları yapılmış ve programlanmış sistem.
Şekil-21:İşlemci kartı üzerindeki programlama pinlerine bağlı USB dönüştürücü kablosu. Ters takılmamasına dikket etmek gereklidir.Konnektörün iki sırası da bağlantı için kullanılabilir. Kart üzerine yerleştirilmiş pinler yüzünden sadece bir sırası kullanılabilmektedir.
Not: Burada verilen USB çevirici kullanmanız gerekli değildir. Herhangi bir USB dönüştürücü veya bilgisayarınız uygunsa RS232 dönüştürücü de kullanabilirsiniz.
Şekil-22:Yan-sön (blink) LED programını örnek dosyasını yükleme.
Şekil-23:USB çeviricinin bilgisayarda atadığı sanal portu seçme.
Şekil-24:Son olarak "Yükle" butonuna tıklandığında program derlenecek ve mevcut bağlantı üzerinden işlemcie yüklenecektir.
Artık istenen her program yüklemesi sadece "Yükle" butonuna basma veya "Dosya -Yükle" menüsünden seçme ile gerçekleştirilebilir.
Programlama ile ilgili örnekler ve komut seti bu program üzerinde yer almaktadır.
Sonuç
Elimizde örnek olduğu için bootloader Arduino ve nanino uygulamaları üzerinden anlatılmıştır. İstenildiği takdirde kendi bootloader programınızı oluşturmanız mümkündür. USB-seri dönüştürücü olarak FTDI232BL ile yapılmış blogda uygulaması yapılan bir devre önersek de, hazır veya kendizin yaptığı bir dönüştürücü kullanabilirsiniz. Burada size gereken 5V, RXD, TXD DTR ve GND uçlarıdır. Eğer devrenizi harici olarak besleyecekseniz, o zaman USB çeviricide 5V ucu gerekli değildir.
Şekil-25:Tabii ki projede anlatılan kartı öyle çıplak kullanılacak değil, bu kartı çeşitli ek kartlar ile daha geliştirmek gerekir. Soldan sağa doğru yapılmış bazı ek kartlar: 74HC595 için LED sürücü kart, ENC28J60 için ethernet kartı, SD kart için sürücü kartı ve en sağdaki karakter LCD için (ve LM35 için) ek sürücü kartı. (Renkli konnekteörler kart üzerinde güzel duruyormuş)
Not: Kendi adıma uzun zamandır özellikle SPI portunu kullanan uygulamalardan kaçındım. Çünkü bu port aynı zaman işlemcinin ISP programlama bacaklarını kapsıyordu. Bu türden bir uygulama elbette benim için biçilmiş kaftan oldu. Şekil 25 üzerindeki kartlar ile ilgili projeleri uygun bir zamanda eklemeyi planlamaktayım.
Ekler:
"Atmega328P ile bootloader yükleme" projesi için gereken dosyalar
Bu devrenin yapım sorumluluğu size aittir. Devre yapıldı ve çalışıyor. K.A....
Hiç yorum yok:
Yorum Gönder