12 Mayıs 2014 Pazartesi

Atmega8

atmel-atmega8-mikrodenetleyicisi-ve-assembler
Hazırlayan: İbrahim KORANA – Atmel üretimi mikrodenetleyiciler hakkında Türkçe kaynak bulmak zor ATmega8 için çok detaylı bir yazı uygulamalar assembler komut bilgileri kullanım bilgileri tahminimce verilen bir çok bilgi diğer modeller içinde geçerlidir
Şekil 2.1.2 Atmega8 Microdenetleyici Blok Diyagramı
atmega8-microdenetleyici-blok-diyagrami
Şekil 2.1.3 Atmega8 Microdenetleyici Bacak Bağlantı Şeması (PDIP)
atmega8-microdenetleyici-bacak-baglanti-semasi-pdip
Şekil 2.1.4 Atmega8 Microdenetleyici Bacak Bağlantı Şeması (TQFP)
atmega8-microdenetleyici-bacak-baglanti-semasi-tqfp
Pin Anlamları
VCC Sistem besleme voltajı. 4.5v-5.5v
GND Sistem GND
Port B (PB0..PB7)
• Port B, programlanabilir pull-up dirençleri bulunan, 8 bit genişliğinde bir giriş-çıkış portudur. Porta byte olarak erişim yapılabileceği gibi bit olarak da erişim yapılabilir.
• Portun 6 ve 7. bitleri, Oscillator’ün internal RC seçilmesi durumunda port bitleri, aksi durumda oscillator giriş uçları olarak kullanılır.
Xtal1/Xtal2/Tosc1/Tosc2
SPI
• Oscillator’un internal RC seçilmesi durumunda portun 6 ve 7. bitleri ASSR registerinin durumuna göre Timer/counter2’nin asenkron giriş uçları olarak kullanılabilir. Port ve portun fonksiyonlarının kullanımı ilerideki konularda detaylı olarak anlatılacaktır
Port C (PC0..PC6)
PC7/Reset
Adc, Seri giriş-çıkış
• Port C, programlanabilir pull-up dirençleri bulunan 7 bit genişliğinde bir giriş-çıkış portudur. Porta byte veya bit erişimleri yapılabilir.
• Portun 7. biti RESDISBL yönlendirme biti ile anlam değiştirebilir. RESDISBL biti programlanmış ise pin girişçıkış pini, programlanmamış Port ve portun fonksiyonlarının kullanımı ilerideki konularda detaylı olarak anlatılacaktır.
Port D (PD0..PD7)
Usart, int,
Timer/counter,
Analog comparator
• Port D, programlanabilir pull-up dirençleri bulunan 8 bit genişliğinde bir giriş-çıkış portudur. Port byte veya bit erimleri ile kullanılabilir. Port fonksiyonlarının kullanımı ilerideki konularda detaylı olarak anlatılacaktır.
AVCC
Avcc analog digital çevirici için besleme voltaj girişidir. Bu voltaj girişi saglanmadan ADC fonksiyonu kullanılamaz. ADC fonksiyonunun kullanımı için Avcc ucu alçak geçiren bir filtre ile besleme voltajına bağlanmalıdır.
AREF
Analog-Digital çevirici için referans voltaj girişidir.
MCS-51 Microdenetleyici Ailesinin RAM yapısı ve Register’leri
Genel Amaçlı Registerler ve Stack : MCS-51 sisteminde register kavramı, diğer microdenetleyici sistemlerindeki genel amaçlı register kavramı ile aynıdır. Söz konusu sistemin mimari özelliklerinden biri bu registerlerle ilgilidir. MCS–51 sisteminde fiziksel olarak hiç bir register bulunmaz. Fakat MCS-51’ in assembler dilini başka işlemcilerin alışılmış olan assembler diline yaklaştırmak amacıyla MCS-51’in assembler dilinde R0 – R31 gibi 32 adet register ismi kullanılmaktadır.
Görünür ile gerçeklik arasında uyum her bir register ismi altında belli bir iç RAM hücresinin
kullanılması sayesinde sağlanır. Bu uyumu sağlamak için gereken işlemler derleyici
tarafından ve kullanıcıya şeffaf olarak gerçekleştirilir. Registerler iç ram’ın 00h -1Fh adresleri de yerleşir.
Buna göre söz konusu registerlerin ismini veya adreslerini kullanmanın hiçbir farkı yoktur. Örneğin R5. registerinin içeriğinin akümülatöre gönderilmesi gerekiyorsa o zaman MOV A, R5 veya MOV A, $05 yazılması yeterlidir. Sonuç olarak sistemde 32 register vardır. Bu registerler iç ram’ın 00h – 1Fh adreslerine yerleşmektedir. Aslında registerler ram hücrelerin kendileridir. Bu hücreler komut görüntüsüne uygun olarak registerler diye adlandırılmaktadırlar. Böyle aldatmacalar bilgisayar tekniğinde çok yaygın olarak kullanılmaktadır ve amacı kullanıcı alışkanlığı ile donanım gerçekliği arasındaki açıklığı mümkün olduğu kadar kapatmaktır.
Şekil 2.3.1.1 Registerlerin iç ram üzerindeki yerleşimi
registerlerin-ic-ram-yerlesimi
Microdenetleyiciler iç ram olarak 8 bit ile adreslenemeyecek kadar büyük iç ram veya
rom bulundurabilirler. Bu gibi durumlarda iç ram’a veya rom’a erişim için 16 bit registerler
gerekli olurlar. Bu ihtiyacı karşılayabilmek için X,Y,Z registerleri düzenlenmiştir. Bu
registerler R26 ile R31 registerleri üzerine yerleştirilmiş durumdadırlar ve genel olarak
Indirect adresleme için kullanılırlar.
Şekil 2.3.1.2 X,Y,Z registerlerinin ram üzerindeki yerleşimi
xyz-registerlerinin-ram
Stack, program içinde kullanılan geçici dataların saklanılması amacıyla kullanılan bir
alandır. Program içinde kullanılan local degişkenler, alt program çağırmalarında ve Interrupt
geçişlerinde geri dönüş adresleri ve parametreler stack alanı içinde tutulur. Stack LIFO (Last in First Out, Son giren ilk çıkar) metodu ile çalışır.
Registerler gibi stack’da ayrıca şema olarak mevcut değildir. Stack işlemleri SP (Stack
Pointer) registerin yardımı ile iç ram’ın belli bir alanında simule edilir.
MCS-51 core içerisinde gerçekleştirilmiş olan mantığa göre microdenetleyicinin her bir resetlemesinden sonra SP = 0h durumu oluşur. Bu durum stack alanı ile register alanlarının çakışmalarına neden olur. Herhangi bir karışıklığın önlenebilmesi için programların eğer stack kullanacaklarsa Stack Pointer’a stack olarak kullanacakları alanın başlangıç adresini yerleştirmeleri gereklidir. Stack teorik olarak 60h adresinden başlayarak FFh adresine kadar devam edebilir.
20h – 5Fh arasındaki iç ram alanı hayati önem taşımakta olan SFR (Special Functial
Register) için ayrılmıştır ve bu alanın başka amaçlar için kullanılması microdenetleyicinin
işinin bozulmasına sebep olabilir. Bu registerler sonraki bölümde açıklanacaktır.
Şekil 2.3.1.3 Genel iç ram yerleşimi
genel-ic-ram-yerlesimi
Özel Amaçlı Registerler
Bu registerler gurubunu sadece SFR’ ler (Spesial Function Registers) olarak adlandıracağız. Bu registerlerden her biri çok özel olan bir veya birkaç fonksiyonun gerçekleştirilmesine hizmet ederler. Her bir programda SFR’ lerin hepsinin kullanılması gerekmez. Yani herhangi bir programda yalnız o program için geçerli olan SFR alt gurubu kullanılır. Geride kalan SFR’ler hakkında düşünmeye gerek yoktur. Çünkü RESET sırasında bütün SFR’ ler etkisiz duruma getirilir. SFR’leri açıklarken onları hizmet amaçlarına göre aşağıdaki guruplara bölünmesi uygun olacaktır.
• Microdenetleyicinin mikroişlemci kısmının temel görevlerini sürdürebilmesi için gereken SFR’ler.
• Microdenetleyicinin içinde bulunan Timer/Counter’ları denetleyen SFR’ ler.
• Microdenetleyici içerisinde bulunan Usart’ı denetleyen SFR’ler,
• Microdenetleyici içerisinde bulunan interrupt devresi denetleyen SFR’ ler.
• Giriş / Çıkış portları olarak kullanılan SFR’ ler,
• Diğer SFR’ler
Özel Amaçlı Registerler başlığı altında sadece Microdenetleyicinin microişlemci kısmının temel görevlerini sürdürebilmesi için gereken SFR’lerden bahsedilecek, Timer/Counter, Usart, Interrupt ve diğer SFR’ler ayrı başlıklar halinde incelenecektir.
SREG (Status Register) : Bu register yapılan matematiksel işlemlerin ve microdenetleyicinin genel durumunu tutmak için kullanılır. Register bir bayt olarak veya 8 ayrı bit olarak adreslenebilir. Register iç ram’de 5Fh adresinde yer alır. SREG’in bit yapısı aşağıdaki gibidir.
bit-read-write-sreg-atmega8
I Global Interrupt Enable
T Bit Copy Storage
H Half Carry Flag
S Sign Bit
V Two’s complement overflow flag
N Negative Flag
Z Zero Flag
C Carry Flag
SREG Registerinin bit değerleri, yapılan işlemlere göre microdenetleyici tarafından oluşturulur. Fakat programlar tarafından istenildiği şekilde değiştirilebilir.
(I) Global Interrupt Enable : I biti, microdenetleyici içindeki iç ve dış interruptları genel olarak açmak ve kapatmak için kullanılır. Eğer bit set durumda ise microdenetleyici kurulmuş
interruptların çalışmasına imkan verecektir. Aksi durumda interruptlar kurulmuş olsa
bile interrupt aktif olmayacaktır. Eğer I biti set edilmişse interrupt oluştuğunda microdenetleyici bit değerini kendiliğinden resetler ve reti komutu ile tekrar set yapar. Bu yöntem ile microdenetleyicinin peşpeşe oluşan interruptlarla stack taşmasının önüne geçilmiş olur. I biti sei komutu ile set, cli komutu ile resetlenebilir.
(T) Bit Copy Storage : T biti, bit kopyalama işlemlerinde kaynak veya hedef olarak kullanılır. Bit BLD ve BST komutlarında geçici alan olarak kullanılır. BLD komutu T bitini
belirlenen registerin istenen bitine kopyalar.
rd-b-t
Örnek : BLD r16,4 T bitinin değerini r16 registerinin 4. bitine kopyalar.
BST Komutu belirlenen registerin belirlenen bitini T registerine kopyalar.
t-rd-b
Örnek : BST r16,2 R16 registerinin 2. bitini T bitine kopyalar.
(H) Half Carry Flag (Auxilary Carry) : Microdenetleyici matematiksel işlemlerin sonunda H flagını set veya reset yapar. Flag genel olarak matematiksel işlemlerde alıcı alanın alt nibble’ında bir taşma olursa set olur. Bu durum BCD matematiksel işlemlerin yapılabilmesini sağlar.
(S) Sign Bit : Microdenetleyicinin matematiksel işlemler sonunda etkilediği bir flagdır. Flag
daima N ve V flaglarının toplamını ifade eder.
(V) Two’s complement overflow flag : Flag iki tabanlı sayılarla yapılan matematiksel işlemlerde byte üzerindeki taşmayı kontrol etmek için kullanılır. Yapılan matematiksel işlemler sonunda microdenetleyici flagı set veya reset yapar.
(N) Negative Flag : İşaretli sayılarla işlem yaparken işlem sonucunun işareti hakkında bilgi verir. Flagın set olması işlem sonucunun negatif, aksi pozitif olduğunu belirtir.
(Z) Zero Flag : Bir matematiksel işlem sonunda sonuç 0 ise veya bir atama işleminde alıcı
alana aktarılan değer 0 ise flag set olur. Bu özellik karşılaştırma işlemlerinde oldukça
sık kullanılır.
(C) Carry Flag : Bu flag ALU vasıtası ile peşpeşe yapılan toplama ve çıkartma işlemlerinin
gerçekleştirilmesi ve başka amaçlar için kullanılabilen bir flagdır. Toplama işlemlerinde flag elde (carry), çıkartma işlemlerinde borç (barrow) flagı olarak kullanılır. Çıkartma işleminde barrow’un dikkat dışı bırakılması gerektiğinde işlemden önce C=0 yapılmalıdır. Toplama işlemleri için ise iki değişik komut; ADD ve ADDC komutları kullanıldığından söz konusu ön hazırlığa ihtiyaç yoktur.
SP Registeri (Stack Pointer) : Bu register stack göstergesi olarak kullanılır. 5Dh ve 5Eh adreslerine yerleştirilmiştir. Stack teorik olarak tüm ram üzerinde olabileceği için 16 bit’lik bir register olarak düzenlenmiştir. SP olarak 16 bit erişim sağlanabileceği gibi SPH (5Eh) ve SPL (5Dh) olarak 8 bitlik erişim de sağlanabilir.
MCUCR Registeri (MCU Control Register) MCUCR registeri genel olarak microdenetleyicinin güç kontrolü ve dış interruptların nasıl tetikleneceğini belirlemek için kullanılır. Registerin genel yapısı;
mcucr
SE SM0..SM2 bitleri ile belirlenen microdenetleyici güç uyuma modunun aktif edilmesini sağlayan bittir. Bitin set edilmesi durumunda SM0..SM2 ile belirlenen güç uyuma modunu aktif hale getirir.
SM0..SM2 Microdenetleyici güç uyuma modlarının seçimini sağlayan bitlerdir.
sleep-mode-select
Not 1 : Bu mod sadece external oscillator kullanıldığında geçerlidir.
Idle Sleep Mode : SM0, SM1 ve SM2 bitleri 0 yapıldığında microdenetleyici idle güç uyuma moduna geçer. Bu modda CPU ve flash dışındaki tüm birimler çalışır durumdadır. Mod aktif edildikten sonra herhangi bir dış interrup geldiğinde, herhangi bir iç timer owerflow olduğunda, USART’tan bir karakter alındığında microdenetleyici Idle moddan çıkar.
ADC Noise Reduction : SM0 1, SM1 ve SM2 bitleri 0 yapıldığında ADC gürültü bastırma moduna geçilir. Bu modda I/O, CPU ve flash kapatılır. Bu birimler dışındaki birimler çalışır durumdadır. ADC Noise Reduction güç uyuma modu yüksek çözünürlüklü ADC çevrimlerinde oluşabilecek parazitleri engellemek içindir. Bu nedenle mod adc okuma çevrimine girildiğinde kendiliğinden devreye girer.
Power-Down : MCUCR registeri içinde SM0,SM1,SM2 bitleri 010 yapılırsa microdenetleyici Power-Down güç uyuma moduna geçer. Bu modda externel interruptlar, Two wire serial Interface ve watchdog hariç her şey durdurulur. Power-Down modunda iken açık external interruptlardan birinin durum değiştirmesi moddan çıkmak için yeterlidir.
Power-Save : SM0, SM1 ve SM2 bitleri 011 yapıldığında microdenetleyici powersave
moduna girer. Power-save modu power down modu ile çok benzer şekilde çalışır. Modun Power-down modundan farkı, timer2 asenkron modda çalışıyorsa timer2’nin durdurulmamasıdır.
Standby : Bu mod, microdenetleyici external crystal/resonator ile çalışacak şekilde
düzenlenmişse geçerlidir. Standby, power-down modu ile aynı özelliklere sahiptir. Ancak
standby modundan çıkış için 6 clock gereklidir.
Microdenetleyiciye ait tüm güç uyuma modları özet olarak aşağıdaki gibi gösterilebilir.
active-clock-domains-and-wake-up-sources-in-the-different-sleep-modes
Active Clock Domains : Aktif clocklar
Wake-up Sources : Uyandırma Kaynakları
(1) Clock kaynağı olarak external crystal/resonator seçilmişse
(2) ASSR registerinde ASR biti set edilmişse
(3) INT0 ve INT1 seviye tetiklemeli olarak seçilmişse
ISCxx ISCxx bitleri INT0 ve INT1 external interruptlarının nasıl tetikleneceğini gösteren bitlerdir. ISC00 ve ISC01 interrupt 0, ISC01 ve ISC11 interrupt 1 için tetikleme şekli belirler. Interrupt 0 için tetikleme tipleri aşağıdaki gibidir.
isc01-isc00
Interrupt 1 için tetikleme tipleri aşağıdaki gibidir.
isc11-isc10
MCUCSR Registeri (MCU Control and Status Register)
MCUCSR registeri microdenetleyicinin hangi kaynaktan resetlendiğini program içinde tesbit etmek için kullanılır. Registerin yapısı :
mcucsr
Bit 4..7 : Registerdeki 4-7 arasındaki bitler yedek bitlerdir ve değerleri daima 0’dır.
Bit 3 : WDRF Watchdog Reset Flag Microdenetleyici Watchdog tarafından resetlenmişse flag set olur.
Bit 2 : BORF Brown-out Reset Flag Microdenetleyici internal Brown-out devresi tarafından resetlenmişse flag set olur.
Bit 1 : EXTRF External Reset Flag Microdenetleyici reset ucu ile resetlenmişse flag set olur.
Bit 0 : PORF Power-on Reset Flagm Microdenetleyiciye ilk kez enerji verildiğinde flag set olur.
MCUCSR Registeri microdenetleyici resetlendikten sonra program yolu ile sıfırlanmalıdır.
OSCCAL Registeri (Oscillator Calibration)
Register, microdenetleyici internal RC oscillator ile çalıştırıldığında, oscillator’ü ayarlamak için kullanılır. Internal RC ilk kez çalıştırıldığında oscillator 1 Mhz, OSCCAL registeri 0 olarak ayarlanmıştır. Oscillator frekansı, OSCCAL registerinin değeri değiştirilerek % cinsinden ayarlanabilir. Registere yazılacak 0 dışındaki değerler oscillator frekansının artmasına neden olur. Bu yöntemle yapılan frekans değişimleri flash ve eeprom erişimlerini direkt etkiler. Bu nedenle flash ve eeprom erişimlerinde frekans %10 dan fazla artırılmamalıdır. OSCCAL frekans değişimleri aşağıdaki tabloda gösterilmiştir.
internal-rc-oscillator-frequency-range
Farklı oscillator seçimlerinde OSCCAL register değerinin frekans üzerindeki etkisi :
calibrated-8mhz-4mhz-rc-oscillator-frequency-osccal-value
calibrated-2mhz-1mhz-rc-oscillator-frequency-osccal-value
SPMCR Registeri (Store Program Memory Control Register)
SPMCR registeri program hafızasının programlanması sırasında kullanılacak olan bitleri içerir. Microdenetleyici içinde çalışan bir program tarafından program hafızasının (Flash Rom) programlanması boot loader programlarının vazgeçilmez özelliğidir. Bu nedenle register içeriği boot loader başlığı altında detaylı olarak incelenecektir. Registerin genel yapısı
aşağıdaki gibidir.
spmcr
SFIOR Registeri (Spesial Function In/Out Register)
PSR10 : Timer/Counter0 ve Timer/Counter1 tarafından kullanılan prescaller’ın (bölücü) resetlenmesini sağlar. Resetleme bit set yapıldığında ve timer/counter yeniden start edildiğinde gerçekleşir. Bit okunduğunda her zaman 0 değerini verecektir.
PSR2 : Timer/Counter2 tarafından kullanılan prescaller’ın (bölücü) resetlenmesini sağlar. Resetleme bit set yapıldığında ve timer/counter yeniden start edildiğinde gerçekleşir. Bit okunduğunda her zaman 0 değerini verecektir.
PUD : I/O portlara ait açılmış tüm pull-up dirençlerin kapatılmasını sağlar.
ACME : Microdenetleyici içindeki ADC kapalı ve ACME biti set ise Analog comparator’un negatif girişi ADC multiplexer tarafından seçilir. ACME biti logic 0 ise Analog conparator’un negatif girişi AIN1 ucundadır. Bitin detaylı açıklaması Analog Comparator bölümünde detaylı olarak anlatılacaktır.
Özel Amaçlı registerlerin microdenetleyici fonksiyonları açısından anlatımına başlamadan önce Atmel Mcs-51 komut setinin, program yazımı ve verilen örneklerin anlaşılabilmesi açısından kısaca anlatımında yarar bulunmaktadır.
Genel Assembler Bilgileri
Her bir assembler komutu bir, iki, üç veya dört kısımdan oluşabilir. Komut kısımları bir birinden virgül (,) vasıtasıyla ayrılır. Her bir komutun birinci kısmı komutun görevini ifade eder. Mesela MOV – gönder, ADD – topla, ANL – lojik çarp, JMP – atla, XCH – değiştir vs. Komutun geriye kalan kısımlarını onun operandları (üzerinde işlem yapılacak olan bilgiler) oluşturur. Bu anlamda sıfır, bir, iki ve üç operandlı komutlar söz konusu olacaklardır. Komutta her hangi bir operand olarak veri (data), adres ve register ismi kullanılabilir. Komularda sabit veri olarak 2’ li, 16’ lı ve 10’ lu sayı sisteminde ifade edilmiş sayılar kullanılabilir. Verilmiş olan sayını 2’ li sistemde ifade edilmiş olduğunu bildirmek için sayının başına 0b eklenir. Aynı amaçla 16’ lı sayının başına 0x eklenir. Eğer sayının sonuna veya başına hiç bir işaret eklenmemiş ise o zaman söz konusu sayının 10’ lu sistemde verilmiş olduğu varsayılır.
Örneğin : ldi r16, 0b10001001 ldi r15, 0x0F ldi r14, 112
Herhangi bir microdenetleyici komut seti ile programlama için kullanılan assembler derleyici arasında sıkı bir bağ bulunmaktadır. Assembler derleyiciler program yazımını kolaylaştırmak amacıyla komut setine ek olarak microdenetleyici komut setinden farklı komutlar sunabilmektedirler. Bu nedenle, bundan sonra anlatılacaklar Atmel firmasının AVR Studio 4 yazılımı esas alınarak anlatılacaktır. Yazılım bir assembler compiler’ın yanı sıra bir microdenetleyici simülatörü, bir flash programlayıcı ve debugger içermektedir. (Yazılım http://www.atmel.com/dyn/resources/prod_documents/aStudio4b460.exe linkinden ücretsiz olarak alınabilir.)
DEVICE : Komut, assembler derleyiciye hangi microdenetleyici için kod üreteceği konusunda bilgi üretir. Komut ile kullanılabilecek microdenetleyici isimleri aşağıdaki tabloda verilmiştir.
atmel-klasik-tiny-mega-diger
Assembler Operatörleri
Assembler komut operandları içinde, operandlar üzerinde direkt işlem yapmak için kullanılan işaretlerdir. Bu işaretler :
oparatorler
Logical Not
Sembol: !
Açıklama: Operatörde kullanılan değer 0 ise 1, sıfır olmayan bir değer ise 0 döndürür.
Örnek : ldi r16,!0xf0 ;r16 registerine 0 değerini atar.
Bitwise Not
Sembol : ~
Açıklama : Operatörde kullanılan değerin tüm bit değerlerini tersine çevirir.
Örnek : ldi r16,~0xf0 ; r16 registerine 0x0f değerini atar.
Minus
Sembol : -
Açıklama : Operatör kendisinden sonra kullanılan değeri negatif yapar.
Örnek : ldi r16,-2 ; r16 registerine -2 (0xfe) değerini yükler.
Multiplication
Sembol : *
Açıklama : Bu operatör iki değerin çarpımını döndürür.
Örnek : ldi r30,label*2 ;r30 registerine label*2 değerini atar.
Division
Sembol : /
Açıklama : Bu operatör soldaki değerin sağdaki değere bölümünün tamsayı cinsinden
sonucunu döndürür.
Örnek : ldi r30,label/2 ;r30 registerine label/2 sonucunu yükler
Modulo (AVRASM2)
Sembol : %
Açıklama : Operatör soldaki değerin sağdaki değere bölümünden kalanı tamsayı olarak
döndürür.
Örnek : ldi r30,label%2 ;r30 registerine label%2 sonucunu yükler
Addition
Sembol : +
Açıklama : Operatör iki değerin toplamını döndürür.
Örnek : ldi r30,c1+c2 ;r30 registerine c1+c2 sonucunu yükler.
Subtraction
Sembol : -
Açıklama : Operatör soldaki ifade ile sağdaki ifadenin farkını döndürür.
Örnek : ldi r17,c1-c2 ;r17 registerine c1-c2 sonucunu yükler.
Shift left
Sembol : <<
Açıklama : Operatör kendisinden önce kullanılan değerin bitlerini sağında kullanılan sayı
kadar sola kaydırarak sonucu döndürür.
Örnek : ldi r17,1<<4 ;r17 registerine 1 in 4 kez sola kaydırılmış halini yükler.
Shift right
Sembol : >>
Açıklama : Operatör kendisinden önce kullanılan değerin bitlerini sağında kullanılan sayı kadar sağa kaydırarak sonucu döndürür
Örnek: ldi r17,c1>>c2 ;r17 registerine c1 değerini c2 kez sağa kaydırarak yükler
Less than
Sembol : <
Açıklama : Operatörün solundaki değer sağındaki değerden küçükse 1, aksi durumda 0
döndürür.
Örnek : ldi r18,bitmask*(c1
Less or equal
Sembol : <=
Açıklama : Operatörün solundaki değer sağındaki değerden küçük veya eşitse 1, aksi
durumda 0 döndürür.
Örnek : ldi r18,bitmask*(c1<=c2)+1 ;r18 registerine işlem sonucunu aktarır.
Greater than
Sembol : >
Açıklama : Operatörün solundaki değer sağındaki değerden büyükse 1, aksi durumda 0
döndürür.
Örnek : ldi r18,bitmask*(c1>c2)+1 ;r18 registerine işlem sonucunu aktarır.
Greater or equal
Sembol : >=
Açıklama : Operatörün solundaki değer sağındaki değerden büyükse veya eşitse 1, aksi
durumda 0 döndürür.
Örnek : ldi r18,bitmask*(c1>=c2)+1 ; r18 registerine işlem sonucunu aktarır.
Equal
Sembol : ==
Açıklama : Operatörün sonundaki değer ile sağındaki değer eşitse 1, aksi durumda 0
döndürür.
Örnek : ldi r18,bitmask*(c1==c2)+1 ; r18 registerine işlem sonucunu aktarır.
Not equal
Sembol : !=
Açıklama : Operatörün solundaki değer ile sağındaki değer eşit değilse 1, aksi durumda
0 döndürür.
Örnek : .SET flag=(c1!=c2) ;flag değişkenine 1 veya 0 değerini aktarır
Bitwise And
Sembol : &
Açıklama : Operatörün solundaki ve sağındaki değerlerin bitlerini karşılıklı olarak and
logical işlemine tabi tutar.
Örnek : ldi r18,0x0A & 0×02 ;r18 registerine 2 değerini atar.
Not : And işleminde işleme tabi tutulan iki bit 1 ise sonuç 1 aksi halde sonuç 0 olur.
Bitwise Xor
Sembol : ^
Açıklama : Operatörün solundaki ve sağındaki değerlerin bitlerini karşılıklı olarak xor
logical işlemine tabi tutar.
Örnek : ldi r18,0x0A ^ 0×02 ;r18 registerine 0×48 değerini atar.
Not : Xor işleminde işleme tabi tutulan iki bit 1 ise veya 0 ise sonuç 0 aksi durumda sonuç 1 olur.
Bitwise Or
Sembol : |
Açıklama : Operatörün solundaki ve sağındaki değerlerin bitlerini karşılıklı olarak or logical işlemine tabi tutar.
Örnek : ldi r18,0x0A | 0×02 ;r18 registerine 0x4A değerini atar.
Not : Or işleminde işleme tabi tutulan iki bitten herhangi birisi 1 ise sonuç 1 aksi durumda sonuç 0 olur.
Logical And
Sembol : &&
Açıklama : Operatörün her iki tarafındaki değerlerden bir tanesinin 0 olması durumunda
0, aksi durumda 1 döndürür.
Örnek : ldi r18,0x0A && 0×02 ;r18 registerine 1 değerini atar.
Logical Or
Sembol : ||
Açıklama : Operatörün her iki tarafındaki değerlerden her ikisinin de 0 olması
durumunda 0, aksi durumda 1 döndürür.
Örnek : ldi r18,0x0A || 0×02 ;r18 registerine 1 değerini atar.
Conditional operator (AVRASM2)
Sembol : ? :
Düzen : Logic? exp1 : exp2
Açıklama : Logic olarak verilen ifade doğru ise exp1 değerini aksi halde exp2 değerini
döndürür.
Örnek : ldi r18, 1 > 2? 10 : 20 ; r18 registerine 20 değerini atar.
Hazır Fonksiyonlar
Hazır fonksiyonlar avr studio 4 assembler içinde bulunan hazır fonksiyonlardır. Bu fonksiyonlar :
• LOW(exp) 16 bitlik exp ifadesinin düşük byte değerini döndürür
• HIGH(exp) 16 bitlik exp ifadesinin yüksek byte değerini döndürür
• BYTE2(exp) exp ifadesinin 2. byte değerini döndürür
• BYTE3(exp) exp ifadesinin 3. byte değerini döndürür
• BYTE4(exp) exp ifadesinin 4. byte değerini döndürür
• LWRD(exp) exp ifadesinin 1. ve 2. byte değerlerini döndürür.
• HWRD(exp) exp ifadesinin 1. ve 2. byte değerlerini döndürür.
• PAGE(exp) exp ifadesinin 16-21. bit değerlerini döndürür.
• EXP2(exp) exp ifadesinin karesini döndürür.
• LOG2(exp) exp ifadesinin logaritmasını tamsayı olarak döndürür.
Data transfer komutları genel olarak, herhangi bir hafıza adresine değer atamak veya herhangi bir hafıza adresindeki bir değeri başka bir hafıza adresine aktarmak için kullanılan komutlardır.
Dallanma Komutları
Dallanma komutlarının özetlemesine geçmeden önce dallanma komutlarında sıklıkla kullanılan dört kavramın açıklanması gerekmektedir.
• Long address
• Absolute address
• Relative address
• Indirect address
Long Address : Bu tür adres yalnız atama ve çağırma komutlarında kullanılır. Eğer komutun adres operandı olarak 16 bitlik bir sayı kullanılırsa bu kod uzun adres olarak adlandırılır. Birçok microdenetleyici için adres hattı 16 bittir. Bu nedenler 16 bitlik bir adres long address olarak adlandırılır.
Absolute Address : Bu tür adres de yalnız atlama ve çağırma komutlarında kullanılır. Eğer absolute adres kullanan bir komutun adres operandı olarak 11 bitlik bir ikili kod veya büyük rakamı 7’ yi aşmayan 16’ lı kod kullanırsa bu kod absolute adres olarak adlandırılır. Görüldüğü gibi bu tür adreslemede adres hattının 5 büyük bitinin durumu hakkında somut bilgi verilmiştir. Absolute adreslemenin şartlarına göre söz konusu bitlerin bir önceki adresleme sırasında oluşmuş olan durumu değişmez kalmalıdır. Yani A15 – A11 bitlerinin eski durumu ile A10 – A0 bitlerinin yeni durumu birleşerek 16 bitlik tam bir adres oluşturur. Absolute adreslemede adresin 5 büyük bitinin kullanılması adreslemenin söz konusu bitlerin belli bir durumunda gerçekleştirilmesi demektir.
Relative Address : Relative adresleme şartlı veya şartsız kısa atlamalar için kullanılır. Bu tür adreslemede adres kodunun uzunluğu 8 bittir. Long ve absolute adreslerden farklı olarak bu kod varılacak olan bellek hücresinin adresini değil bu hücrenin program sayacının (Program Counter) göstermekte olduğu hücrelerden uzaklığı belirtir. Atlamalar ileriye ve geriye doğru olabildiğinden dolayı uzaklıkları da artı ve eksi işareti olabilirler. Başka bir deyimle relative adres işaretli bir sayı olmak zorundadır. Relative adresleme yöntemi ile 128 baytlık geriye 127 baytlık ileriye doğru atlama yapılabilir. Relative adreslemede atamaların doğru gerçekleştirilmesi için söz konusu adreslerin değerleri değil onlar arasındaki fark önemlidir. Yani programın bellek içerisinde herhangi bir şekilde kaydırılması relative adreslere göre kurulmuş olan atamaları etkilenmez. Atlama ilişkileri tamamen relative adreslere göre kurulmuş olan bir program ram yerleşim değişimlerinden etkilenmez.
Indirect Address : Indirect adresleme okuma ve yazma işlerinde kullanılır. Bu adreslemede komutun adres operand kısmında okunacak veya yazılacak hafıza hücrenin adresinin bulunduğu register gösterilir. Adreslemede kullanılan registerler olarak R0 veya R1 genel registerlerin biri veya pointer registerleri (X,Y,Z) kullanılır. R0 ve R1 registerleri 1 baytlık olduğu için belleğin yalnız ilk 256 baytını adresleyebilir ve bunlardan dolayı çok özel durumlarda faydalı olabilir. Ancak pointer registerleri 16 bitlik olduğu için mevcut adres uzayının başından sonuna kadar adresleyebilir.
atmega-sink-akim-source-akim
Çıkış olarak belirlenen bir port pininden 20 mA (miliamper) akım çekilebilir. 20 mA’den daha fazla akım gerektiren uygulamalarda pin’in zarar görmemesi için yükün transistör ile sürülmesi gereklidir. Port pinleri üzerinden değişik yapılardaki yükleri sürerken dikkat edilmesi gereken diğer bir husus da sistem beslemesinden daha yüksek voltajlarda çalışan yüklerden gelebilecek voltaj sızıntılarının önlenmesidir. Bu tür voltaj sızıntılarının önlenmesi tıkama diyotu yolu ile gerçekleştirilir.
Digital Output Örnek :
atmega-dijital-output-ornek
#include "m8def.inc" .CSEG .ORG 0x000
;Osilator ayarlanıyor
ldi r16,0xFF out OSCCAL,r16
;stack pointer ayarlanıyor
ldi r16,high(RAMEND) out sph,r16 ldi r16,low(RAMEND) out spl,r16
;port C çıkış için ayarlanıyor
ldi r16,0xFF
out DDRD,r16
ldi r16,0x01
out PORTD,r16
DNN: rol r16 out PORTD,r16 rjmp DNN
Digital Input-Output Örnek:
atmega-dijital-input-output-ornek
#include "m8def.inc"
.CSEG .ORG 0x000
;Osilator ayarlanıyor
ldi r16,0xFF out OSCCAL,r16
;stack pointer ayarlanıyor
ldi r16,high(RAMEND) out sph,r16 ldi r16,low(RAMEND) out spl,r16
;port C çıkış için ayarlanıyor
ldi r16,0xFF
out DDRC,r16
ldi r16,0x01
out PORTC,r16
;port D giriş için ayarlanıyor
ldi r16,0x00
out DDRD,r16
ldi r16,0xFF
out PORTD,r16

clt ;T Flagı reset
ldi r16,0x01
DNN: sbic PORTD,2 ;2. bit reset ise (Tuşa basıldı) rjmp PRG0 rcall TBIT
PRG0: brts SAGA ;T flag set ise rjmp SOLA
SOLA: rol r16 out PORTC,r16 rjmp DNN
SAGA: ror r16 out PORTC,r16
rjmp DNN
TBIT: brts RESETLE set ;T flagını set et rjmp CIKIS
RESETLE: clt ;T flagını resetle CIKIS: sbis PORTD,2 ;2. bit set ise (Tuş Bırakıldı) rjmp CIKIS ret
Step Motor Sürme
atmega8-step-motor-surme
#include "m8def.inc" .CSEG
;Osilator ayarlanıyor
ldi r16,0xFF
out OSCCAL,r16
;stack pointer ayarlanıyor
ldi r16,high(RAMEND)
out sph,r16
ldi r16,low(RAMEND)
out spl,r16
;port C çıkış için ayarlanıyor
ldi r16,0xFF
out DDRC,r16
;C portunun tüm bitleri set ediliyor
ldi r16,0xFF out PORTC,r16 DNN:
;1. Adım
ldi r16,0x01
out PORTC,r16
rcall BEKLE
;2. Adım
rol r16
out PORTC,r16
rcall BEKLE
;3. Adım
rol r16
out PORTC,r16
rcall BEKLE
;4. Adım
rol r16
out PORTC,r16
rcall BEKLE
rjmp DNN
BEKLE:
ldi r17,0xFF
BEK0:
ldi r18,0xFF
BEK1: dec r18 cpi r18,0x00 brne BEK1 dec r17 cpi r17,0x00 brne BEK0 ret
7 Segment Display Sürme
atmega8-7segment-display-surme
#include "m8def.inc"
.CSEG .ORG 0x000
;Osilator ayarlanıyor
ldi r16,0xFF out OSCCAL,r16 ;stack pointer ayarlanıyor
ldi r16,high(RAMEND) out sph,r16 ldi r16,low(RAMEND) out spl,r16
;port C çıkış için ayarlanıyor ldi r16,0xFF out DDRC,r16
ldi r16,0x00
out PORTC,r16
;port D Çıkış için ayarlanıyor
ldi r16,0xFF out DDRD,r16 ldi r16,0x00 out PORTD,r16 ; ; ;
PRG: ;0 Yazdırılıyor
ldi r16,0b00111111 out PORTC,r16 sbi PORTD,0 call BEKLE
;1 Yazdırılıyor ldi r16,0b00000110 out PORTC,r16 sbi PORTD,0 call BEKLE rjmp PRG
BEKLE: ldi r17,0xFF BEK1:
dec r17
cpi r17,0x00
breq CIK
rjmp BEK1
CIK: ret
Microişlemci Nedir?
Microişlemci, program yolu ile aritmetiksel ve mantıksal işlemler yapabilme gücü olan, kendisine bağlı iç ve dış çevre birimleri yönetebilen ve bu birimler arasındaki ilişkileri düzenleyebilen bir entegredir. Bir microişlemci, yapabileceği matematiksel ve mantıksal işlemlerin, çevrebirim yönetim fonksiyonlarının dizayn sırasında belirlendiği bir entegredir. Bu nedenle her microişlemci bir diğerinden farklıdır. (8088, Pentium III, Pentium II, Sparc, Alpha vb.)
Microişlemciler genel amaçlar için dizayn edilmiş yapılardır. Bu nedenle temel işlevlerini yerine getirebilmek için dizayn edilen komut setleri oldukça fazladır. Örneğin intel microişlemci ailesinin ilk işlemcilerinden olan 8088’in 92 adet komutu bulunmaktadır. Microişlemcilerin komut setleri ve bu komut setlerinin nasıl işletildiği işlemcinin mimarisini belirler. Eğer komutların hafızada kapladığı alanlar farklı ise bu şekilde düzenlenmiş işlemciler CISC (Complex Instruction Set Computing) işlemciler adını alırlar. CISC mimari ile düzenlenmiş işlemcilerde, komutlar basitlik veya karmaşıklıklarına göre hafızada farklı uzunlukta yer kaplarlar.
Bu durum işlemcinin içinde komutların decode edilmesi ile ilgili oldukça karmaşık bir birimin varlığını zorunlu kılar. Ancak, complex komutlar programlarda kullanılması gereken komut sayısını azaltırlar. 1970 yılında ortaya çıkan CISC mimari ilerleyen yıllarda hafıza birimlerinin büyümesi ve ucuzlaması, kısıtları nedeniyle RISC mimarinin ortaya atılmasına öncülük etmiştir. 1974 yılında IBM, bir işlemcinin daha az komut sayısı ve basit komutlardan oluşan bir komut seti ile çalışabileceğini önererek RISC (Reduced Instruction Set Computing) mimariyi çıkarttı. Bu mimaride komut uzunlukları sabittir ve her komut basit bir işlemi yerine getirir. Bir risc cipi bu iki karakteristik özelliği sayesinde komutların yorumlamasını kolaylıkla ve hızla yapabilir. RISC mimarinin en önemli dezavantajı CISC programlara göre programlarının hafızada daha fazla yer kaplamasıdır.
Gerek RISC mimaride gerekse CISC mimaride dizayn edilmiş olsun bir microişlemci herhangi bir komutu işleyebilmek için bir komut döngüsünü yerine getirmek zorundadır. Komut döngüsünün nasıl düzenlendiği genel olarak işlemcinin performansını belirler. Birkomut döngüsü 3 ana başlıktan oluşur.
1. Fetch
2. Decode
3. Execute
1. Fetch : İşlenme sırası gelen komutun ram’den okunarak microişlemcinin içine alınması
2. Decode : Komutun nasıl işleneceğinin belirlenerek çözümlenmesi
3. Execute : Komutun çalıştırılması ve elde edilen sonuçların ilgili yerlere aktarılması
mikrodenetleyici-ic-yapisi
• Execution Unit (Core): Bu ünite komutları çalıştırır. Genel olarak matematiksel işlemlerin kontrolü ve mantıksal işlemleri gerçekleştirir. Execution Unit Artimetik hesaplamalar için ALU (Arithmetic and Logic Unit) denen aritmetik ve mantık ünitelerini kullanılır, ALU için işlemcilerin yapıtaşıdır denilebilir.
• Branch Predictor: Bu ünite, bir program çalışırken hangi komutun öncelikle çalışacağını belirleyerek Prefetch ve Decode ünitelerine hız kazandırır.
• Floating Point Unit: Bu ünite tamsayı olmayan floating point sayılarla yapılan matematiksel işlemlerin gerçekleştirilmesini sağlar.
• L1 Cache: Sistem belleğinden gelen veriler, bazı durumlarda CPU ‘nun hızına yetişmeyebilir. Bu problemi çözmek için CPU içinde, küçük bir miktar cache (tampon) bellek bulunur. Önemli kodlar ve veriler bellekten cache belleğe getirilir ve burada tutulur. İhtiyaç duyulduğunda işlemci bunlara dış bellekte bulunan verilerden çok daha hızlı ulaşabilir. İşlenecek makine kodlarının ve verilerin saklandığı cache bellekler ayrı düzenlenirler.
• BUS Interface: Çevrebirimlerden işlemciye veri – kod karışımını getirir, bunları ayırarak işlemcinin ilgili ünitelerine aktarılmasını ve işlem sonuçlarının dış ortama aktarılmasını sağlar. Bu arayüzün genişliği işlemcinin adresleyebileceği hafızayı belirler. Örneğin 32 bitlik hafıza genişliğine sahip bir işlemci 4 GB hafızayı adresleyebilir ve bu hafızadan aynı anda 32 bitlik veriyi transfer edebilir.
Microişlemcilerin genel amaçlı yapılar olmaları, komut setlerinin büyüklüğü, kullanıldığı sistemlerde ana eleman olmaları vb. nedenlerle çalışma hızları oldukça önemlidir. Bir işlemcideki bütün elemanlar saat vuruşlarıyla çalışır. Saat hızı bir işlemcinin saniyede ne kadar çevrim yapabileceğini belirler. 200 MHz saat hızı bir işlemci kendi içinde saniyede 200.000.000 çevrim yapabilir. Her çevrimde işlemcinin ne kadar işlem yapabileceği işlemcinin yapısına göre değişir. Genel olarak bir işlemcinin performansını;
İşlemcinin Mimarisi
Saat Hızı
L1/L2 Cache Miktarı
belirler. Ham işlemci performansını ifade etmek için MIPS (Million Instructions Per Second, saniyede işlenebilen komut sayısı) ve MFLOPS (Million Floating Point Operations Per Second, saniyede yapılabilen kayar nokta hesabı) birimleri kullanılır.
Microdenetleyici Nedir?
Bir mikroişlemcinin çevrebirimleri (ram, rom, bus controller vb.) olmaksızın genel amaçlı bir programı çalıştırarak bir problemi çözmesi beklenemez. Mikroişlemcilerin anlamlı bir şekilde çalışabilmesi için minimum input ve output ünitelerinin bulunduğu bir sistemin kurulması gereklidir. Bir mikroişlemci ve minimum input-output ünitelerinin tek bir entegre içinde toplandığı yapılara microdenetleyici adı verilir.
Microdenetleyicilerde, çoğunlukla risc mimariye sahip bir microişlemci, proğramların ve verilerin saklanabileceği 2K ile 512Kb arasında değişebilen flash rom, 64 byte ile 16Kb arasında değişebilen statik ram, 4 ile 64 arasında değişebilen I/O, kontrol edilebilen
timer/counter’lar, PWM, dışarıdan tetiklenebilen Interrupt kaynakları, Analog-digital çeviriciler, digital-analog çeviriciler bulunur. Bu özellikler microişlemci ile microdenetleyici
arasındaki en önemli farkı oluşturur.
Microdenetleyiciler genel amaçlı uygulamalardan çok özel amaçlı uygulamalar için düzenlenmiş yapılardır. Kullanabilecekleri iç kaynakları çeşitli olmasına rağmen bu kaynakların sınırlı olması nedeniyle daha çok özel amaçlı cihazların kontrolünde kullanılmaktadırlar. Günlük hayatta kullandığımız birçok cihazın kontrolü microdenetleyiciler tarafından gerçekleştirilmektedir. Cep telefonu, televizyon, radyo, alarm sistemleri, taşıtlar, hesap makineleri, giriş-çıkış kontrol sistemleri, kameralar, bilgisayar vb.
Kısıtlı miktarda olmakla birlikte yeterince hafıza birimlerine ve input – output uçlarına
sahip olmaları sayesinde tek başlarına (stand alone) çalışabildikleri gibi donanımı oluşturan
diğer elektronik devrelerle irtibat kurabilir, uygulamanın gerektirdiği fonksiyonları
gerçekleştirebilirler. Mikrodenetleyiciler çoğunlukla, yer aldıkları uygulama devresinin içine
gömülmüş, sadece oraya adanmış olarak kullanılırlar.
Bu özellikleri nedeniyle bilgisayarlardaki kullanıcı uygulama programlarını çalıştırma gibi esneklikleri olmamakla birlikte kontrol ağırlıklı uygulamalarda alternatifsiz seçenek olarak karşımıza çıkarlar. Onları böyle cazip kılan, çok düşük boyutlu olmaları (az yer kaplamaları), düşük güç tüketimleri, düşük maliyetlerine karşın yüksek performansa sahip olmaları gibi özellikleridir.
Microişlemci-Microdenetleyicinin Tarihsel Gelişimi
Microişlemcilerin gelişimi 1970 li yıllarda başlar. 1971 yılında İntel firması hesap makinelerinde kullanılmak üzere ilk microişlemcilerden sayılabilecek 4004 işlemcisini üretti. Bu işlemci 4 bit veri yoluna sahipti ve 640 byte adres uzayına sahipti. Bu işlemcinin rağbet görmesi üzerine daha genel amaçlı ve daha büyük hafıza birimlerini adresleyebilecek 8080 microişlemcisi üretildi. 1974 yılında üretilen bu işlemci 8 bit veri yoluna ve 64Kb adres uzayına sahipti. 8080 8 bit microişlemcilerde endüstri standardı olan bir entegredir. Intel 1976 yılında 8080 işlemcinin gelişmiş bir versiyonu olan 8085 işlemcisini piyasaya sürerek işlemci gelişimini sürdürdü.
Intel 8080 işlemcisini duyurduktan kısa bir süre sonra Motorola 6800 microişlemcisini üretti. Bu işlemci 8080 işlemci ile karşılaştırılabilir bir güce sahipti. Motorola 6800 işlemcisinin devamı olarak bu işlemci ile uyumlu 6809 işlemcisini üretti. Bu işlemci 16 bit veri yoluna sahipti.
6809 işlemcisinden sonra Motorola 68000 işlemci serisinin üretimine başladı. Bu işlemci iç yapısında 32 bit dış yapısında ise 16 bit veri yoluna sahip bir işlemcidir ve 6800 serisi işlemcileri desteklememektedir. 68000 serisi işlemciler 68008, 68010, 68012, 68020, 68030, 68040 ve Power PC ile günümüze kadar gelmiştir.
Intel firması 1978 yılında ilk 16 bit veri yoluna sahip microişlemcisi olan 8086’yı duyurdu. 8086 gerek iç veri yollarında gerekse dış veri yollarında 16 bit uzunluk kullanan bir
yapıya sahipti. Çevrebirimlerle uyum problemleri yaşanması üzerine intel 1979 yılında iç
yapısında 16 bit, dış veri yolunda 8 bit yapıya sahip 8088 işlemcisini duyurdu. Bu işlemciler
8080-8085 microişlemci serisi ile benzeşmesine rağmen bu seri ile tam uyumlu değildir.
8086 ve 8088 1981 yılında ilk üretilen IBM-PC lerin gelişiminin temelini oluşturmuştur. Bu
işlemciler geriye uyumluluk kaygıları ile gelişimini bugüne kadar sürdüren Intel x86 ailesinin
başlangıcı olmuştur.
Intel firması 1976 yılında 8080-8085 microişlemcilerinin devamı olarak bazı microişlemci çevre birimlerini içinde barındıran ve özel amaçlı uygulamalarda kullanılmak üzere 8048 ve 8051 microdenetleyicilerin üretimini gerçekleştirdi. Bu microdenetleyiciler üzerinde kullanılan yapı günümüzde de kullanılan birçok 8 bit microdenetleyicinin temelini oluşturan standardı sağlamıştır. 8048 ve 8051 ile başlayan microdenetleyici serisi farklı özelliklerle günümüze kadar gelmiştir. Intel firmasının PC lerin gelişimine temel oluşturan 8086-8088 serisinin 1Mb hafıza sınırlaması 80’li yıllarda birçok uygulama için ciddi problemler oluşturmaya başladı. Bu nedenle Intel 16Mb belleği adresleyebilen 80286 işlemcisini üretti. Bu işlemci 8088 işlemcisinin devamı olarak piyasaya sürüldü ve 8088 ile tam uyumlu olarak çalışabiliyordu. Intel firmasının bu işlemcisi IBM firmasının PC/AT makinelerinde kullanıldı.
1985 yılında Intel ilk 32 bit işlemcisi olan 80386 işlemcisini duyurdu. Bu işlemcinin 16 bit dış veri yoluna versiyonu 80386SX’in üretimini 1988 yılında gerçekleştirdi. 80386 işlemcinin devamı olarak piyasaya sürülen 80486, 80386 nın gelişmiş bir versiyonu görünümündedir.
80486 ile 80386 arasındaki en önemli fark 80486 içinde kayan noktalı sayılarla işlem yapabilecek bir FPU (Floatin-Point unit) bulunmasıdır. 80486 microişlemcinin ardından Intel, hızlarını, cache miktarlarını, işlem kapasitelerini artırarak x86 microişlemci serisini geliştirmeye devam etti. (Pentium I, Pentium pro, Pentium II, Pentium III, Pentium IV)
pentium-ii-pentium-iii-pentium-iv
Neden Intel Tabanlı Microdenetleyici ?
Günümüzde microdenetleyicilerin birçok çeşidi bulunmaktadır. Intel, Microchip, Motorola, National, Atmel firmalarının ürettiği microdenetleyiciler bunlar arasında sayılabilir. Microdenetleyici gerektiren herhangi bir uygulama geliştirirken seçilecek microdenetleyicinin
uygulamanın gereklerini karşılayıp karşılamadığı önemlidir. Bunun yanı sıra kullanılacak olan
derleyici, programlayıcı, simülatör, elektriksel özellikler, kaynak temini, seçenek çeşitliliği,
kolay elde edilebilirlik, fiyat, Komut seti vb. özellikler de microdenetleyici seçiminde önemli
etmenlerdir.
Atmel firmasının ürettiği Atmega serisi microcontrollerların yukarıda sayılan birçok
özellikte öne çıktığı görülmektedir. Firma 8 bit Intel MCS-51 core’a sahip microdenetleyicilerin yanı sıra 16/32 bit veri yoluna sahip microdenetleyiciler, otomotiv
temelli microdenetleyicileri de Intel MCS-51 core ile kullanıma sunmaktadır.
Microdenetleyicilerin aynı core’u kullanıyor olmaları, komut setlerinin de birbirini
desteklemesi anlamına gelmektedir. Bu nedenle herhangi bir microdenetleyici için yazılan
program özelliklerin aynı olması durumunda hiçbir değişikliğe ihtiyaç duymadan farklı bir
microdenetleyicide çalışabilmektedir. Atmel microdenetleyiciler elektriksel bozukluklardan
etkilenmeyi minimize edebilmek için Wath dog timer, Brown-out dedektör vb. özellikler
içermesi nedeniyle sanayi uygulamalarında oldukça yoğun kullanılmaktadır.
MCS-51 Microdenetleyici Ailesinin Mimari Özellikleri
MCS-51 Microdenetleyici Ailesinin Genel Mimari Yapısı : Sanayi Otomasyonu için günümüzde mevcut olan mikroişlemciler ve microdenetleyiciler arasında en uygunlardan birisi MCS-51 ailesinden olan microdenetleyicilerdir. Bu microdenetleyicilerin çekici tarafı, bu aileden olan her bir microdenetleyicinin çok küçük boy bir bilgisayar olması ile birlikte içermekte olduğu girişçıkış potlarının her birinin ve diğer önemli fonksiyon registerlerin (Special Function Registers SFR) büyük çoğunluğunun üzerinde bayt ve bit maniplasyonu yapmaya direkt imkan sağlamasıdır.
MCS-51 ailesinden olan microdenetleyici tabanlı kontrol kartına sanayi otomasyonuna
yönelik küçük boy bilgisayar özelliği kazandırmaya imkan sağlayan özellikler sadece bir çip
içerisinde yer alan aşağıdaki mimari özelliklerdir.
• 8/16/32 bit RISC merkezi işlem birimi (CPU),
• Dahili EEprom
• Dahili Flash Rom
• Harici veya dahili olarak seçilebilen osilatör,
• Bayt veya bit olarak düzenlenebilen, pull-up dirençleri aktif veya pasif yapılabilen Giriş / Çıkış portları,
• Static RAM bellek (İç Ram),
• Dış program/veri belleği (Bazı microdenetleyicilerde),
• 8/16 bit Zamanlayıcı/Sayaç/Pwm,
• İç ve dış kaynaklara hizmet edebilen, farklı vektörlere sahip kesme (Interrupt) sistemi,
• Seri Port,
• ISP Port,
• JTag Port,
• Security bitler aracılığı ile program ve verinin korunabilmesi,
• Watch dog timer, Brown-out dedektör,
• Analog-Digital çevirici (Adc)
• 20 MHZ kadar çalışma frekansı,
• Çalışma frekansına bağımlı (MIPS) çalışma performansı
MCS-51 risc core’a sahip, Atmel firmasının atmega8 microdenetleyicisi yukarıda sözü
edilen mimari yapının tümüne sahiptirler. Atmega8 microdenetleyicisinin özellikleri aşağıdaki
şekilde özetlenebilir.
• Geliştirilmiş RISC mimari
- 130 adet komut
- 32 genel amaçlı register
- Her clock’ta 1 komut çalıştırma
• 8Kb program tarafından da yazılabilen program belleği
• 512 Byte EEprom
• 1 Kb statik ram
• 2 adet 8 bit timer/counter
• 1 adet 16 bit timer/counter
• 3 adet PWM kanalı
• 6 kanal 10 bit ADC
• Byte temelli çift yönlü seri kanal
• Programlanabilir seri USART
• Master/Slave SPI seri kanal
• Programlanabilir Watchdog timer
• Chip içinde analog comparador
• Power on reset ve programlanabilen Brown-out dedektör
• Internal düzenlenebilir RC oscillator
• İç/Dış kaynaklı Interrupt sistemi
• 5 değişik uyuma modu
• 23 programlanabilir giriş-çıkış ucu
• 0-16 Mhz çalışma frekansı
• 4.5 – 5.5v çalışma voltajı
Şekil 2.1.1’ de MCS-51 core mimarisinin blok diyagramını, şekil 2.1.2’de Atmega8
microdenetleyicinin blok diyagramı, şekil 2.1.3’ de ise bu microdenetleyicinin bacak bağlantı
şeması gösterilmiştir.
Şekil 2.1.1 MCS-51 core mimarisinin blok diyagramı
mcs-51-core-mimarisinin-blok-diyagrami
yukarıda özetler verilmiştir tamamı atmel-atmega8-assembler.rar Emeği geçen Kişilere Teşekkürler

Elektroeğirme Nedir?

Elektroeğirme Nedir?

Geleceğin teknolojisi olarak belirtilen elektroeğirme tekniği, bir sıvı çözeltiye kontrollü elektrik alan kuvveti uygulanması temeline dayanmaktadır. Mühendislik ve tıp disiplinlerini birlikte içeren bu teknik ile üretilen ipliksi fiber yapılar kısa zamanda hayatımızın birçok alanına girmiş bulunuyor. Elektroeğirme teknolojisinin ayrıntıları yazımızda.












Elektroeğirme Tekniği


Elektroeğirme, dilimize ingilizce electrospinning kelimesinden geçmiştir. Kısacaelektro+iplik anlamına gelmektedir. Elektroeğirme tekniği, mühendislik ve tıp disiplinlerini bir arada barındıran multidisiplinler yöntemidir. Peki elektroeğirme nasıl yapılır?

Bir sıvı çözelti, kuvvetli bir elektrik alana maruz kaldığında sıvı çözeltinin molekülleri artı ve eksi yük ile yüklenir ve tıpkı mıknatısın zıt kutupları gibi moleküller birbirini itmeye çalışır. Bu itme kuvveti belirli bir seviyeden sonra sıvı çözeltinin sakız gibi uzayarak incelmesine neden olur. Kuruyan sakız benzeri çözelti kesintisiz ipliksi fiberler halinde birikir.


Resim 1: Elektroeğirme Tekniği Genel Şeması


Bu yöntem ile elde edilen ipliksi yapılar insan saçından yaklaşık olarak 20.000 kat daha küçüktür.


Elektroeğirme Hangi Alanlarda Kullanılır?


Elektroeğirme tekniği ile elde edilen ipliksi fiber yapılar kolay işlenebilmeleri sayesinde özellikle biyotıp ve doku mühendisliği alanlarında çok cazip bir yöntemdir.

Biyotıp alanında kullanılacak olan malzemelerin biyouyumlu yani biyolojik sistemle barışık olması gerekmektedir.

Biyomalzemelerin, kullanım alanlarına göre farklılık gösterseler de yüzeylerinin pürüzlü vegözeneklerden oluşması ayrıca mekanik dayanımlarının yüksek olması gerekiyor. Bu malzemelerin karmaşık yapıda olması ve üretim pahalılığı araştırmacıları gelecek için umut vaat eden elektroeğirme tekniğine yönlendirdi.


Resim 2: Elekroeğirme Cihazı


Elektroeğirme yöntemi ile elde edilen ipliksi yapılar küçük boyutları, büyük yüzey alanları, eşsiz optik özellikleri ve yüksek mekanik dayanımları sayesinde biyotıp ve doku mühendisliği alanındaki araştırmacıların imdadına yetişiyor. Bütün bu özelliklerin bir arada bulunması ile ipliksi fiberler biyofiltre olarak kullanılabiliyor.


Resim 3: Elektroeğirme Tekniğinin Midye Üzerinde Uygulaması


Elektroeğrilmiş malzemeler, bu özellikleri sayesinde damar tıkanıklıklarında kullanılan stentlerde, optik uygulamalarda, kemik rejenerasyonunda, yapay böbrek geliştirilmesinde, yara dolgu malzemelerinde kullanılabiliyor.


Gelecekte Elektroeğirme


Araştırmacılar elektroeğirme yönteminde uygulanan elektrik alanı yönlendirerek, ipliksi yapıları çeşitli şekillerde elde etmeyi planlıyor. Bu sayede doku motiflerinin oluşturulması amaçlanıyor.


Resim 4: Elektroeğirme Tekniği Sonucunda Oluşan İpliksi Fiber Yapılar


Gelecekte elektroeğirme yöntemiyle, canlı kök hücreler ile doldurulmuş kanal şeklinde ipliksi yapılar elde edilebilecek. Bu kanal şeklindeki yapılar tedavi bölgesine nakledildiğinde hem hızlı hem de düşük maliyete etkili bir iyileşme sağlanabilecek.


Elektroeğirme tekniğinin çalışma sistemini ve oluşan ipliksi fiberleri bu videodan izleyebilirsiniz.

 

ATmega8 Led Saat Termometre Devresi

ATmega8 DS1307 DS18B20 Led Saat Termometre Devresi

atmega8-ds1307-ds18b20-led-saat-termometre-devresi
Ledli Saat Termometre Devresi ATmega8 mikrodenetleyici üzerine kurulu yapımı baya zahmetli ama görünümü çok güzel 900 adet led kullanılmış ledler tabelarda ki gibi bir plakaya yerleştirilmiş Atmega8 çıkışlarında 4 adet 74HC574 var çıkışları ise IRF8910PbF (so8 kılıf tek paket iki mosfet smd) mosfet ile güçlendirilmiş pcb düzenlemesi yapılarak piyasada bolca bulunan farklı N-kanal mosfet kullanılabilir.
Termometre Saat Devresinde zamanlama için DS1307 saat entegresi kullanılıyor iç ve dış mekan sıcaklık ölçümü içinde iki adet DS18B20 sensör kullanılmış. Projeye ait proteus isis simülasyon, kaynak kod dosyalayı ve ana kartın sprint layout ile hazırlanmış pcb çizimi var.
atmega8-ds1307-ds18b20-led-saat-termometre-devresi-saat-devresi
alternatif link: atmega8-ds1307-ds18b20-led-saat-termometre-devresi.rar alternatiflink2 alternatif link3

Akü, hakkında genel bilgiler

Akü, Akümülatör Eğitim Kitabı

aku-akumulator-egitim-kitabi
Otomobil veya kamyon akülerinin araçlarda bir çok işlevi vardır. En önemli görevleri marş motorunu çalıştırmak ve aracı hareket ettirmektir. Bunun yanında otomobilde alternatörün ihtiyacı karşılayamadığı durumlarda ilk ateşleme, far lambalarının yanması, ısıtıcılar, havalandırma, radyo gibi sistemin diğer enerjiye ihtiyaç duyan bölümlerine elektrik sağlar. Ayrıca aküler aracın voltaj kontrol sisteminin bütünü oluşturarak araçtaki bilgisayar hafızalarını, far ve radyoları elektriksel dalgalanmalardan korur.
Günümüzde araçlar yolculuk bittikten sonrada çalışmaya devam eden birçok elektrikli cihazdan oluşmaktadır. Bilgisayarlar ve saatler 24 saat akım çekmekte, araç hareket ettikten sonra çalışan fanlar zaman kontrollü olmakta ve yüksek akım çekmekte, sık kullanılmasalar da 30 watt ve daha güçlü radyolar ve kapıların açılması ile devreye giren çok sayıdaki aydınlatma lambaları elektrikle çalışmaktalar.
Aynı zamanda yakıttan tasarruf istekleri daha küçük, hafif ve verimli parçaların üretilmesi yönünde üreticileri zorlamaktadır. Daha fazla parça küçük motor bölümlerinde iç içe bir arada durmakta ve bu da motor kapağının altında sıcaklık yükselmelerine neden olmaktadır. Ve sıcaklıkta akümülatörün ömrünü kısaltmaktadır.
Bugünün otomobillerinde modern aküler zorlukla çalışmaktalar. Ne kadar akümülatörleri zorlarsak bağımlılığımız o kadar artmakta. Akü satıcı ve servislerinin akü hakkında gerekli bilgiye sahip olması müşterilerine vereceği güvenin artmasını sağlamakta buda ürünün satış veimajına katkı sağlamaktadır.
Bu el kitabıyla akülerin çalışmasını bakımını ve test edilmesini daha iyi anlayabileceksiniz buda müşterilerin talep ettiği kaliteli hizmeti vermenizi sağlayacaktır.

AKÜLERİN ÖLÇÜLERİ

Otomotiv akümülatörleri çeşitli ölçülerde ve performanslarda üretilmektedirler. Her akünün üzerinde kullanım gerilimini (12 V), kapasitesini ve akım şiddetini gösteren rakamlar bulunur.
Performans ölçümlerinde temel olarak iki yöntem kullanılır; nominal kapasite ve rezerv kapasite. Nominal kapasite genel olarak Avrupa ülkelerinde uygulanan tam şarjlı akünün beyan edilen kapasitesinin % 5 akımla ile boşaltılması sonucunda kutuplar arasındaki gerilimin 10.5’e düşmesi için geçen süre ile belirlenir ve bu değer 60 Ah nominal kapasiteli akümülatörlerde 20 saatten az değildir. Rezerv kapasite genellikle Amerika’da uygulanan tam şarjlı akümülatörün 25 A sabit akımla kutupları arasındaki gerilim 10.5 V’a düşene dek boşaltılması için geçen süredir. 60 Ah nominal kapasite boşalma süresi olan 95 dakika ile 95 RC (Rezerv Capacity) olarak gösterilirler.
Akım şiddetini gösteren rakamlar bir standardın soğukta yol verme test yöntemine göre değeri belirttiği için değerin yanında uygun olduğu standart belirtilir (Örneğin; EN, IEC, SA, DIN gibi).

AKÜNÜN PARÇALARI VE ÇALIŞMA PRENSİBİ

AKÜNÜN PARÇALARI
Akümülatör kimyasal enerjiyi elektrik enerjisine elektrik enerjisini de kimyasal enerjiye dönüşümlü olarak bir çok sefer çevirebilen cihazlara denir. Kurşun-asit akümülatörlerinde elektrot olarak kurşun ve kurşun oksitleri, elektrolit olarakta seyreltilmiş sülfürik asiti kullanırız. Şarjlanmış bir aküde (+) artı elektrodda kurşun dioksit (-) eksi elektrodda ise süngerimsi gözenekli yapıya sahip kurşun bulunur.
akumulatorun-parcalari-calisma-prensibi
Akü Kutu, kapaklar (1): Kutu ve kapaklar plastikten (Polipropilen kopolimerlerinden) üretilirler ve bunların görevi yeterli yalıtımı, sızdırmazlığı , mekanik ve kimyasal özellikleri korunması ve uzun süreli dayanıklılığı sağlamasıdır.
Akü Plakalar (2): Akümülatörlerin enerji vermesini sağlayan en önemli parça, plakalardır. İki çeşit plaka bulunur;artı ve eksi plakalar. Plakanın iskeleti ızgaradır. Izgaralar düşük miktarlarda antimuan veya kalsiyum içeren alaşım kurşundan dökülür veya genişletilmiş metal (expended metal) teknolojisi ile kalsiyumlu şeridin ezilerek genişletilmesi sonucunda üretilirler . Izgaranın üretim yöntemi ve kalıp dizaynı plakanın özelliklerini etkileyen faktörlerdir. Izgaranın üzerinin farklı nitelikteki hamurlarla sıvanması ile artı ve eksi plakalar elde edilir. Artı plakalar akımı veren plakalar oldukları için ve oksitlenme reaksiyonu bu plakada olur eksi plakalara göre her zaman daha kalın ve ağır üretilirler.
Ayıraçlar (3): Ayıraçlar eksi ve artı plakaların birbirine değerek kısa devre olmasını engelleyen ve aynı zamanda da elektriği taşıyan iyonların geçişine engel olmayan levha veya torba şeklinde plastik ayırıcılardır.
akumulatorun-parcalari-plakalar
Kutup Başları (5): Her kurşun-asit hücresi 2 Volttur. İstenilen akü voltajına bağlı olarak bunlar seri bağlanırlar. Bunun sonucunda artı plakaların bağlı olduğu uc artı kutuptur eksi plakaların bağlı olduğu uç eksi kutuptur. Kutupların üzerinde veya yanlarında işaretleri vardır ve artı kutup daha büyüktür.
Gaz Kapakları: Akümülatörün üretiminde kullanılan alaşımın özelliğine bağlı olarak her zaman Hidrojen ve oksijen gazı çıkışları vardır. Akü içerisindeki basıncın belirli değerlerin altında kalması gerekir . Bu amaçla gazın dışarıya çıkmasını sağlayan delikli kapaklara buşon denir.
Elektrolit (4): Elektrolit plakaların içerisine batırıldığı iyonların artı kutuptan eksi kutuba taşınmasını sağlayan sulandırılmış sülfirik asittir. Elektrolitin yoğunluğu akünün özelliklerini etkiler. Yüksek yoğunluklarda akü yüksek voltaj verir ancak kısa sürede yıpranmaya neden olur. Düşük yoğunluklu elektrolitler ise volt ve marş basma gücünün azalmasına neden olurlar.
Elektrolit yoğunluğunun ölçülmesinde Bome deyimi kullanılmaktadır. Bome derecesi ile yoğunluk arasındaki bağıntı aşağıdaki gibidir.

Akü eğitim el kitabı

Akü ölçüleri
Akü parçalari ve çalışma prensibi
Akü parçalari
Akünün Çalışma Prensibi

Akü çalışma prensibi

Akü tiplerine göre üretim aşamaları
Akü ve aracınız
Akü gerilimi
Akü ve sıcaklık
Akülerin depolanması
Depolama ve kuru şarjlı akülerin doldurulması
Akünün araca takılması

Akünün şarj edilmesı

Akünün bakımı
Hidrometre kullanılması
Sülfatlanmış Aküler
Aküden Aküye takviye
Arizalı Aküde yapılacak kontroller
Arizalı akülerin kontrolunda dikkat edilecek hususlar
Sağlam iade akülerin değişken yük test cihazi ile kontrolu
Bazı akü arıza tipleri
Akünün yaşı ve kod sistemi
Yukarıda özet ve içerik listesi verildi dökümanın tamamı;

Alternatif link (+dökümanın hazırlanmada kullanılan ingilizce kaynaklaraku-akumulator-egitim-kitabi.RARalternatif link2 alternatif link3

ATmega16 Matris Led Saat Termometre Devresi

atmega16-matris-led-saat-termometre-devresi
Bir önce ki “ATmega8 DS1307 DS18B20 Led Saat Termometre Devresi” yazısında paylaşılan projenin 1 üst versiyonu daha gelişmiş ve küçük.. gösterge olarak 8×24 led matris kullanılmış yine 2 knal ısı ölçümü (DS18B20) var Saat Termometre Devresi ATmega16 mikrodenetleyici üzerine kurulu proje baya ilerlemiş farklı pcb versiyonlarıda var tüm kaynak kodların yanı sıra proteus isis simülaston şeması ve sprint layout ile hazırlanmış kaynak pcb çizimleride bulunuyor
led-matris-saat-atmega16-ds18b20-termometre-devresi-saat-devresi
Kaynak: mdoga.ru alternatif link: atmega16-matris-led-saat-termometre-devresi.rar alternatif link2alternatif link3

Orangutan SV-328 Modül İle Engel Algılayan Robot Projesi

orangutan-sv-328-modul-ile-engel-algilayan-robot-projesi
Engel Algılayan Robot devresi Orangutan SV-328 kontrol modülü üzerine kurulu bu modül daha önce@Ediz Agarer tarafından paylaşılan “ROTKON Robot geliştirme kontrol kartı” yazsında verilen devrenin benzeri Orangutan SV-328 modülde Atmel ATmega328P mikrodenetleyici kullanılıyor dahili motor sürücüsü var (Toshiba TB6612FNG) 2 tane DC motor bağlanabilir çıkış gücü 1.2A max. pik 3 amper..
Engel algılama içinde iki adet SHARP GP2Y0A41SK0F sensör kullanılıyor. Engel Algılayan Robot yazılımı Atmel IDE Studio 6 ile hazırlanmış kaynak C, HEX vb. kodları var.
engel-robotu-gp2y0a41sk0f-robot-projesi-robot
robot-orangutan-sv328-atmega328-tb6612fng

Otomatik bobin sarma makinesi

otomatik-bobin-sarma-makinesi-atmaga8-l293
Bobin Sarma Makinesi Atmega8 mikrodenetleyici üzerine kurulu motor sürücü katında L293 kullanılmış step motor kullanıldığı için devre üzerinde herhangi bir sensör yok adıma göre hesaplamayı yapıyor gösterge için kullanılan LCD WH0802 tuş takımı için 12 adet buton kullanılmış.
Otomatik Bobin Sarma Makinesine ait CVAVR kaynak kodlar proteus isis simülasyon dosyası ve şeması var.
bobbin-winding-machine-bobin-sarma-makinesi-atmega8-l293
bobbin-winding-l293-sipir-sayici-devresi-tur-sayici-devresi
 alternatif link: otomatik-bobin-sarma-makinesi-atmaga8-l293.rar alternatif link2alternatif link3

Sitemize Yazar Alınacaktır

 Sitemize ve sizlere tüm elektrik ve elektronik dallarda katkı sağlayacak deneyimli yazarlar alınacaktır İletişim bölümünden bize ulaşırsanız seviniriz

30 Ocak 2014 Perşembe

Kalp Atışlarıyla Kendini Şarj Edebilen Pil

Kalp Atışlarıyla Kendini Şarj Edebilen Pil

Kalp hastalıkları insanlığın yüzlerce yıldır en büyük sağlık problemlerinden biri. Kalple ilgili bazı sağlık sorunlarını düzeltmek için günümüzde kalp pilleri kullanılıyor. Araştırmacılar kalp sorunlarını düzeltmeye yarayan bu kalp pillerini, kalp atışları ile besleyebilecek bir batarya icat ettiler. Ayrıntılar haberimizde.







Amerikalı ve Çinli araştırmacılardan oluşan bir ekip geçtiğimiz günlerde kalp pillerini beslemek için implant edilebilir (vücuda yerleştirilebilir) yeni bir batarya icat ettiler. Pil kalp, akciğer, diyafram gibi organların sürekli hareketlerini elektrik enerjisine dönüştürebiliyor.

Birer küçük santral diyebileceğimiz bu cihazlar kurşun zirkonat titanat nano-şeritlerden yapılıyor. Doğada biyo-uyumlu plastik olarak bulunan bu madde piezoelektrik özelliği gösteriyor. Piezoelektrik özelliğine sahip maddeler basıncı elektrik enerjisine dönüştürebiliyor.




Araştırmacılar bu pillerin cep telefonları da dahil olmak üzere gelecekte bir çok uygulamada kullanılabileceğini berlitiyor. Cihazın doğrultma devresi ve minik şarj edilebilir pil aynı plastik kılıf içinde bulunuyor.

Ekip şu ana kadar cihazı bir ineğin kalbine başarı ile yerleştirmeyi başardı ve kısa sürede bu pillerin medikal cihazlarda kullanılabilmesini amaçlıyor
.