{"id":1961,"date":"2020-11-22T21:57:59","date_gmt":"2020-11-22T18:57:59","guid":{"rendered":"https:\/\/www.mikrobotik.com\/wp2\/?p=1961"},"modified":"2020-11-22T21:57:59","modified_gmt":"2020-11-22T18:57:59","slug":"kutuphanesiz-spi-serial-memory-kullanimi-arduino","status":"publish","type":"post","link":"https:\/\/www.mikrobotik.com\/wp2\/2020\/11\/22\/kutuphanesiz-spi-serial-memory-kullanimi-arduino\/","title":{"rendered":"K\u00fct\u00fcphanesiz SPI serial memory kullan\u0131m\u0131 (Arduino)"},"content":{"rendered":"<p>Serial memory entegrelerinin k\u00fct\u00fcphanesiz kullan\u0131m\u0131. K\u00fct\u00fcphanesiz derken \u00fcr\u00fcn bazl\u0131 k\u00fct\u00fcphane kast edilmi\u015ftir. SPI k\u00fct\u00fcphanesi kullan\u0131lacakt\u0131r.<\/p>\n<p><span style=\"color: #ff0000;\"><strong>Not:<\/strong><\/span> T\u00fcm anlat\u0131mlar <strong>Arduino<\/strong> ya g\u00f6re anlat\u0131lsa da PIC i\u00e7in de ge\u00e7erlidir. <strong>PICBASIC<\/strong> ile yap\u0131lm\u0131\u015f \u00f6rnek yaz\u0131n\u0131n sonundad\u0131r.<\/p>\n<p>SPI haberle\u015fme, 4 kablo ile 20mhz h\u0131z\u0131na kadar haberle\u015fme yapabilece\u011finiz bir seri haberle\u015fme protokol\u00fcd\u00fcr.<br \/>\n<a href=\"https:\/\/github.com\/safaka123\/Mikrobotik_yazilarim\/blob\/main\/spi_memory_son\/spi_ilk%20sema.png?raw=true\" target=\"_blank\" rel=\"lightbox noopener noreferrer\"><img decoding=\"async\" class=\"aligncenter lazyload\" data-src=\"https:\/\/github.com\/safaka123\/Mikrobotik_yazilarim\/blob\/main\/spi_memory_son\/spi_ilk%20sema.png?raw=true\" alt=\"\" width=\"347\" height=\"107\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 347px; --smush-placeholder-aspect-ratio: 347\/107;\" \/><\/a><br \/>\n<a href=\"https:\/\/github.com\/safaka123\/Mikrobotik_yazilarim\/blob\/main\/spi_memory_son\/spi_ikinci%20sema.png?raw=true\" target=\"_blank\" rel=\"lightbox noopener noreferrer\"><img decoding=\"async\" class=\"aligncenter lazyload\" data-src=\"https:\/\/github.com\/safaka123\/Mikrobotik_yazilarim\/blob\/main\/spi_memory_son\/spi_ikinci%20sema.png?raw=true\" alt=\"\" width=\"347\" height=\"107\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 347px; --smush-placeholder-aspect-ratio: 347\/107;\" \/><\/a><\/p>\n<p><strong>Yukar\u0131daki pim adlar\u0131n\u0131 a\u00e7\u0131klayal\u0131m<\/strong>.<br \/>\n<strong>MISO\u00a0(Master In Slave Out)<\/strong> \u2013 Slave den Master\u2019a bilgi g\u00f6nderilir.<br \/>\n<strong>MOSI\u00a0(Master Out Slave In)<\/strong> \u2013 Master dan slave\u2019e do\u011fru bilgi ak\u0131\u015f\u0131.<br \/>\n<strong>SCK\u00a0(Serial Clock) \u2013<\/strong> Saat frekans\u0131 her iki y\u00f6nde bilgi ak\u0131\u015f\u0131na k\u0131lavuzluk eder. Model ar CLK piminin \u00e7al\u0131\u015fmas\u0131na g\u00f6re \u015fekillenir.<br \/>\n<strong>SS\u00a0(Slave Select) \u2013<\/strong> Bir veya birden fazla al\u0131c\u0131 olmas\u0131 durumunda her al\u0131c\u0131y\u0131 se\u00e7mek i\u00e7in kullan\u0131lan pim. 2. resimde bu \u015fekilde ba\u011flant\u0131 g\u00f6r\u00fclmektedir.<\/p>\n<p>Direkt ileti\u015fim oldu\u011fundan gelen bilgilerin do\u011frulu\u011fundan emin olamayabilirsiniz. K\u0131sa mesafe haberle\u015fmesi oldu\u011fundan CHECKSUM (do\u011frulama) gibi eklentileri yoktur. Bu da do\u011frulama yapamad\u0131\u011f\u0131m\u0131z anlam\u0131na gelir.<br \/>\nSizler 2 Arduino aras\u0131nda bunu kullanmak isterseniz ve do\u011frulama ihtiyac\u0131 hissederseniz <strong>checksum<\/strong> sistemi gibi bir kod format\u0131 yaratabilirsiniz. Ya da gelen datay\u0131 do\u011frulama olarak kar\u015f\u0131ya g\u00f6nderebilirsiniz. Tabii ki bu da haberle\u015fme h\u0131z\u0131n\u0131z\u0131 bir miktar d\u00fc\u015f\u00fcrecektir. Seri haberle\u015fme sistemleri bu tip kontrol mekanizmalar\u0131na sahiptir. <a href=\"https:\/\/en.wikipedia.org\/wiki\/Checksum\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>Detayl\u0131 bilgi i\u00e7in bak\u0131n\u0131z.<\/strong><\/a><\/p>\n<p>(<strong>Checksum,<\/strong>\u00a0seri bilginin sonuna eklenen t\u00fcm dizinin durumuna uygun bir toplam i\u015flemidir.<br \/>\nMesela, g\u00f6nderilen karakterlerin \u00e7ift olanlar\u0131n\u0131n toplam\u0131 diyelim. BABA kelimesini g\u00f6ndermek istersek. ASCII tablosundan (<span style=\"color: #ff6600;\">HEX olarak<\/span>) B=0x66\u00a0 A=0x65 tir. Yani g\u00f6nderece\u011fimiz bilgi<br \/>\nBABA = 0x66,0x65,0x66,0x65 burada 66 \u00e7ift rakam oldu\u011fundan ve 2 tane oldu\u011fundan, di\u011fer arduinoya g\u00f6nderece\u011fimiz bilgi, BABA = 0x66,0x65,0x66,0x65,0x02 say\u0131s\u0131 olursa gelen bilgi ile son verinin kar\u015f\u0131la\u015ft\u0131rmas\u0131n\u0131 al\u0131c\u0131 arduino hesaplar ve do\u011frulad\u0131\u011f\u0131nda kar\u015f\u0131ya bir do\u011fruland\u0131 bilgisi g\u00f6nderebilir. Karma\u015f\u0131k checksum bilgisine gerek kalmayabilir. )<\/p>\n<ul>\n<li>SPI k\u00fct\u00fcphanesinde baz\u0131 kabuller vard\u0131r. \u0130stedi\u011finiz zaman bunlar\u0131 de\u011fi\u015ftirebilirsiniz. Mesela SS pimi arduino uno i\u00e7in D10 pimidir. Bunun yan\u0131 s\u0131ra saat frekans\u0131 4 e b\u00f6l\u00fcnm\u00fc\u015ft\u00fcr. Siz daha yava\u015f bir frekans istedi\u011finizde bunu setting k\u0131sm\u0131nda belirtmeniz gerekir ya da<br \/>\n<strong>setClockDivider(SPI_CLOCK_DIV2)<\/strong> gibi bir kod ile de\u011fi\u015ftirmeniz gerekir. Bununla birlikte bit transferinin nereden ba\u015flayaca\u011f\u0131n\u0131 da <strong>SPI.setBitOrder(MSBFIRST)<\/strong> ya da <strong>LSBFIRST<\/strong> belirtmeniz gerekir. Tabii ki mode k\u0131sm\u0131n\u0131 da bu \u015fekilde belirtmemiz gerek. <strong>SPI.setDataMode(mode tablosuna g\u00f6re yaz)<\/strong> Genellikle al\u0131c\u0131 cihazlar MODE0 ve MODE3 sinyal \u015feklini benimsiyormu\u015f. En iyisi kullanaca\u011f\u0131n\u0131z al\u0131c\u0131n\u0131n DATASHEET dok\u00fcman\u0131na bakman\u0131zd\u0131r.<\/li>\n<\/ul>\n<p><a href=\"https:\/\/github.com\/safaka123\/Mikrobotik_yazilarim\/blob\/main\/spi_memory_son\/spi_modes.JPG?raw=true\" target=\"_blank\" rel=\"lightbox noopener noreferrer\"><img decoding=\"async\" class=\"aligncenter lazyload\" data-src=\"https:\/\/github.com\/safaka123\/Mikrobotik_yazilarim\/blob\/main\/spi_memory_son\/spi_modes.JPG?raw=true\" alt=\"\" width=\"382\" height=\"318\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 382px; --smush-placeholder-aspect-ratio: 382\/318;\" \/><\/a><\/p>\n<p><strong>MODE <\/strong>konusunu a\u00e7\u0131kl\u0131\u011fa kavu\u015ftural\u0131m. <strong>MODE CLK<\/strong> dedi\u011fimiz saat durumu ve \u00f6rneklemenin al\u0131nd\u0131\u011f\u0131 yeri ayarlar. \u00d6ncelikle <strong>mode0<\/strong> sinyaline bakal\u0131m. Saat ba\u015flang\u0131c\u0131 <strong>polarity 0<\/strong> yani saat normal durumda <strong>LOW<\/strong> pozisyonundan ba\u015flar. <strong>Phase =0<\/strong> diyor. ilk gelen darbe y\u00fckselerek gelecek. Al\u0131c\u0131 da ilk saat y\u00fckselme kenar\u0131nda \u00f6rnekleme al\u0131r. Zaten sinyalde g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi her saat palsinin <strong>y\u00fckselen kenar\u0131<\/strong> \u00f6rnek alma zaman\u0131 olarak ayarlanm\u0131\u015f durumda. Benzer yap\u0131 ise <strong>MODE3<\/strong> te g\u00f6r\u00fclmektedir. Dikkat ederseniz <strong>Mode3<\/strong> te <strong>polarity HIGH<\/strong> seviyesinden ba\u015flar ve <strong>LOW<\/strong> durumuna d\u00fc\u015f\u00fcp tekrar <strong>HIGH<\/strong> durumuna y\u00fckseldi\u011finde \u00f6rnekleme almaya ba\u015flar.<strong> Phase=1<\/strong> dir. <strong>Mode0<\/strong> ile kar\u015f\u0131la\u015ft\u0131r\u0131rsak arada bir <strong>phase(faz)<\/strong> kay\u0131kl\u0131\u011f\u0131 ya\u015fansa da yine y\u00fckselen kenardan itibaren ba\u015flam\u0131\u015ft\u0131r.<br \/>\n<strong>Mode1 ise Polarity 0<\/strong> olmas\u0131ndan dolay\u0131 saat palsi <strong>LOW<\/strong> durumdan ba\u015flar. \u00d6rnekleme ise saat palsinin d\u00fc\u015fen kenar\u0131nda al\u0131nmaktad\u0131r. <strong>mode1 de phase 0 ve mode2 de ise phase 1<\/strong> oldu\u011fundan \u00f6rnek alma hem <strong>mode1<\/strong> hem de<strong> mode2<\/strong> de <strong>d\u00fc\u015fen kenar<\/strong> \u00f6rnek alma zaman\u0131d\u0131r. Sadece <strong>phase<\/strong> durumundan dolay\u0131 biri saatin ba\u015flang\u0131c\u0131nda biri 2. palsin ba\u015flang\u0131c\u0131nda \u00f6rnek almaya ba\u015flar.<\/p>\n<figure style=\"width: 475px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/github.com\/safaka123\/Mikrobotik_yazilarim\/blob\/main\/spi_memory_son\/SPI_lib_pimler.JPG?raw=true\" target=\"_blank\" rel=\"lightbox noopener noreferrer\"><img decoding=\"async\" data-src=\"https:\/\/github.com\/safaka123\/Mikrobotik_yazilarim\/blob\/main\/spi_memory_son\/SPI_lib_pimler.JPG?raw=true\" alt=\"\" width=\"475\" height=\"407\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 475px; --smush-placeholder-aspect-ratio: 475\/407;\" \/><\/a><figcaption class=\"wp-caption-text\"><span style=\"color: #ff6600;\">Arduino kartlar\u0131na g\u00f6re ve SPI k\u00fct\u00fcphanesine g\u00f6re Slave select piminin yeri.<\/span><\/figcaption><\/figure>\n<p><span style=\"color: #ff6600;\">NOT:<\/span> SS pimi daima output olarak setup b\u00f6l\u00fcm\u00fcnde tan\u0131mlanmal\u0131. Tan\u0131mlanmad\u0131\u011f\u0131 taktirde programdaki di\u011fer k\u00fct\u00fcphaneler taraf\u0131ndan de\u011fi\u015ftirilebilir ve SPI haberle\u015fmeniz \u00e7al\u0131\u015fmaz olabilir.<\/p>\n<p><strong>Buraya kadar SPI ya giri\u015f olarak bilgi vermeye \u00e7al\u0131\u015ft\u0131m.<\/strong> Bundan sonra ise konumuz olan SPI serial memory entegrelerle nas\u0131l bilgi al\u0131\u015fveri\u015fi yapabiliriz onu g\u00f6rece\u011fiz. SPI k\u00fct\u00fcphanesine ait komutlar da \u00e7ok fazla de\u011fildir. Bunu a\u015fa\u011f\u0131daki \u00f6rnek programlara bakarak siz de g\u00f6rebilirsiniz.<\/p>\n<p>Seri haberle\u015fme kullanan bu tip haf\u0131za entegreleri, SPI haberle\u015fmesi kulland\u0131\u011f\u0131ndan h\u0131zl\u0131 bir \u015fekilde yaz\u0131p silme i\u015flemlerinin yap\u0131lmas\u0131na olanak sa\u011fl\u0131yor. Eskiden flash haf\u0131za 100.000 kez silinip yaz\u0131l\u0131rken teknolojinin geli\u015fmesiyle 1.000.000 kez yaz\u0131l\u0131p silinmeye ba\u015flad\u0131\u011f\u0131 i\u00e7in de bu avantaj haline geldi.<\/p>\n<p>Epromlar ile kar\u015f\u0131la\u015ft\u0131r\u0131ld\u0131\u011f\u0131nda baz\u0131 dezavantajlar\u0131 var. Fakat yine de baz\u0131 SPI haberle\u015fmeli entegreler bu dezavantaj\u0131 ortadan kald\u0131rm\u0131\u015f g\u00f6r\u00fcn\u00fcyor. Mesela 25LC512 (512Kbit) entegresi 1 kez yazd\u0131ktan sonra de\u011fi\u015fiklik yapmak istedi\u011finizde, page erase denilen blok \u015feklinde silme i\u015flemi yapman\u0131z\u0131 istiyor. 25LC640A (64Kbit) entegresinde ise page erase yok. Ayn\u0131 sayfaya tekrar tekrar yazabiliyoruz.<br \/>\nEPROM da ise istedi\u011fimiz kadar silme i\u015flemi yapmadan ayn\u0131 h\u00fccreyi de\u011fi\u015ftirebiliyoruz. Genelde kulland\u0131\u011f\u0131m\u0131z entegreler I2C haberle\u015fmesi kullan\u0131yorlar.<\/p>\n<p><a href=\"https:\/\/www.mikrobotik.com\/wp2\/2020\/10\/29\/arduino-ve-pcf8574-lcd-modulunu-dijital-pim-coklayici-olarak-kullanma\/\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"color: #ff6600;\"><strong>I2C hakk\u0131ndaki yaz\u0131m\u0131 <\/strong><\/span><strong>buradan okuyabilirsiniz.<\/strong><\/a><\/p>\n<p>I2C ile \u00e7al\u0131\u015fan Epromlar, Standard (100 kHz), Fast (400 kHz) and Fast\u2212Plus (1 MHz) h\u0131zlar\u0131nda haberle\u015fiyorlar. Genelde 100khz ve 400khz kullan\u0131l\u0131yor.\u00a0 SPI kullanan seri haf\u0131za entegreleri ise 10Mhz h\u0131z\u0131na kadar haberle\u015febiliyor. Hatta baz\u0131lar\u0131 20Mhz e kadar haberle\u015febiliyormu\u015f.<\/p>\n<p>Ba\u015fl\u0131kta k\u00fct\u00fcphanesiz kullan\u0131m dedim. Fakat bu SPI k\u00fct\u00fcphanesini kullanmayaca\u011f\u0131m anlam\u0131na gelmez. Elbette SPI haberle\u015fme komutlar\u0131n\u0131 kullanmak i\u00e7in ona ihtiya\u00e7 var. (Ben SPI y\u0131 da kendim yazar\u0131m diyenler isterlerse onu da yazabilirler fakat vakit kayb\u0131 olur. )<br \/>\n<strong>Neden k\u00fct\u00fcphanesiz dedim. <\/strong>Benzer entegreler genelde ayn\u0131 komut yap\u0131s\u0131n\u0131 kullansa da tek k\u00fct\u00fcphane hepsine yetmeyebilir. Bu kez kulland\u0131\u011f\u0131n\u0131z entegreye ait k\u00fct\u00fcphane bulman\u0131z gerekecektir.<br \/>\n\u00d6rneklerde <span style=\"color: #ff6600;\">25LC512 (512Kbit), AT25F512A(512Kbit), 25LC640AT(64Kbit)<\/span> entegreler kullan\u0131lm\u0131\u015ft\u0131r.<br \/>\nProgramlar aras\u0131nda \u00f6rnek verilen 1 adet k\u00fct\u00fcphaneli program da var. (kendi program\u0131m de\u011fil \u00f6rnek olsun diye ekledim)<br \/>\nBu 3 entegrenin yazma komutu okuma komutu ayn\u0131 olsa da 1 tanesinde (25LC640AT)<span style=\"color: #ff6600;\"> page erase komutu yok.<\/span> Bir tanesinde t\u00fcm entegreyi sil komutu di\u011fer entegreden farkl\u0131. Komut yaz\u0131l\u0131\u015f\u0131 ayn\u0131 olsa bile kod fark\u0131 var. (2 adet 512Kbitlik entegrede). Yani t\u00fcm entegreler i\u00e7in benzer komutlar kullan\u0131lsa bile kodlar farkl\u0131 olabiliyor. Ya da entegrenin kapasitesine g\u00f6re kod dizilimin de adres bilgisi, 2 byte ya da 3 byte olabiliyor.<\/p>\n<p>Bundan dolay\u0131 t\u00fcm entegrelere ait bir k\u00fct\u00fcphane yapsan\u0131z, bu kez de programlayacak haf\u0131za bulamayabilirsiniz. Yaz\u0131n\u0131n ilerleyen b\u00f6l\u00fcmlerinde bunu daha iyi anlayacaks\u0131n\u0131z.<\/p>\n<p>\u00c7\u00f6z\u00fcm nedir derseniz? Hangi entegreyi kullan\u0131yorsan\u0131z o entegrenin kodlar\u0131n\u0131, entegreye ait DATASHEET dosyas\u0131ndan elde etmektir. Datasheet te sadece kodlar yok. Her sayfa(page) ka\u00e7 byte tan olu\u015fuyor. Her sector(sekt\u00f6r) ka\u00e7 byte tan olu\u015fuyor. Ka\u00e7 sekt\u00f6r var gibi bilgilerin yan\u0131 s\u0131ra maksimum ka\u00e7 Mhz de ileti\u015fim kurman\u0131z gerekti\u011fini yaz\u0131yor. Mesela 25LC640AT 2Mhz iken 25LC512 10Mhz haberle\u015fme imkan\u0131 veriyor. Bu bilgiler \u0131\u015f\u0131\u011f\u0131nda kolayl\u0131kla haberle\u015febilirsiniz.<\/p>\n<p><strong>\u00d6ncelikle SPI haz\u0131rl\u0131k k\u0131sm\u0131n\u0131 g\u00f6relim.<\/strong><br \/>\nSPI i\u00e7in program\u0131n setup k\u0131sm\u0131nda verilecek 2 komut var.<\/p>\n<p><span style=\"color: #ff0000;\"><strong>SPI.begin ();<br \/>\n<\/strong><strong>SPI.beginTransaction(SPISettings(4000000, MSBFIRST, SPI_MODE0));<\/strong><\/span><\/p>\n<p>SPI begin sat\u0131r\u0131 komut yazabilmeniz i\u00e7in k\u00fct\u00fcphaneyi aktif ediyor. 2. Sat\u0131rda ise 4000000=4Mhz h\u0131z\u0131nda haberle\u015fmek istedi\u011fimizi belirtiyor.<br \/>\nMSBFIRST dedi\u011fimiz k\u0131s\u0131m ise binary modunda kullan\u0131lan de\u011ferin en y\u00fcksek bitinden itibaren g\u00f6nder demektir. Ayr\u0131ca Mode k\u0131sm\u0131n\u0131 da ayarlaman\u0131z gerekiyor.<br \/>\n<span style=\"color: #ff6600;\">Mesela 10001100 gibi bir say\u0131m\u0131z var. Burada soldaki 1 biti en y\u00fcksek bittir. Yani MSB yi ifade eder. En sa\u011fdaki bit ise LSB yani en d\u00fc\u015f\u00fck biti ifade eder. <\/span><br \/>\n<span style=\"color: #ff6600;\">Burada bit, byte kelimelerini bilmeyenler i\u00e7in a\u00e7\u0131klama yapmam gerekti\u011fini d\u00fc\u015f\u00fcn\u00fcyorum. <\/span><br \/>\n<span style=\"color: #ff6600;\">Bit : dijital sistemlerde yap\u0131lan i\u015flemlerde en k\u00fc\u00e7\u00fck yap\u0131 ta\u015f\u0131 diyebiliriz. Ya 1 olur ya da 0 olur. <\/span><br \/>\n<span style=\"color: #ff6600;\">Byte: 8 adet bitin bir araya gelmesiyle 1 byte olu\u015fur. Buna \u00f6rnek vermemiz gerekirse i\u015flemciler 8 bit 32 bit 64 bit diye s\u0131n\u0131fland\u0131r\u0131l\u0131r. Ayr\u0131ca yazd\u0131\u011f\u0131m\u0131z ABC 123 gibi karakterler ise bilgisayarda ASCII kodlar\u0131 olarak bilinir. Bu ASCII kodlar\u0131 8 bit ile ifade edilir. Yani her bir karakter 1 Byte l\u0131k yer kaplar. <\/span><br \/>\n<span style=\"color: #ff6600;\">Haf\u0131za entegreleri de her ne kadar 512Kbit olarak bit ile ifade edilse de yap\u0131lar\u0131 1 bytel\u0131k bilgilere g\u00f6re \u00e7al\u0131\u015f\u0131r. Yani ka\u00e7 karakter al\u0131r bu entegre diyorsan\u0131z, 512K y\u0131 8 bit say\u0131s\u0131na b\u00f6lmeniz gerekir. <\/span><br \/>\n<span style=\"color: #ff6600;\">(Not: 512Kbit dedi\u011fimiz de 512000 bit demek de\u011fildir. Say\u0131 sistemlerinde 1000 kat yerine 1024 kat b\u00fcy\u00fcr. Bundan dolay\u0131 512*1024=524288 bit yapar. ) <\/span><br \/>\n<span style=\"color: #ff6600;\">Bunu da 8 bit\u2019e b\u00f6lersek 512K=65536 byte\u00a0 (karakter) al\u0131r diyebiliriz. <\/span><br \/>\n<span style=\"color: #ff6600;\">25LC512 gibi entegreler i\u00e7in s\u00f6ylersek datasheet de aksi belirtilmedik\u00e7e PAGE size(sayfa boyutu)=128byte, SECTOR size (Sekt\u00f6r boyutu)=16Kbyte d\u0131r.<\/span><\/p>\n<p><strong>SPI haberle\u015fmede kullan\u0131lan di\u011fer komutlar ise \u015fu \u015fekildedir.<\/strong><\/p>\n<p><strong>digitalWrite(SS, LOW);<\/strong> \/\/\u00a0 CS Yani SS slave select pimi master taraf\u0131ndan LOW yap\u0131larak haberle\u015fme ba\u015flar.<br \/>\n<strong>SPI.transfer (1); \u00a0<\/strong>\/\/ bilgi MOSI ucundan al\u0131c\u0131n\u0131n SI(slave input) ucuna MSB ilk g\u00f6nderilecek \u015fekilde Master cihaz\u0131n sa\u011flad\u0131\u011f\u0131 CLK palsi e\u015fli\u011finde g\u00f6nderilir.<br \/>\n<strong>digitalWrite(SS, HIGH);<\/strong> \/\/ daha sonras\u0131nda SS pimi High yap\u0131larak i\u015flem tamamlan\u0131r.<\/p>\n<p>Tabii ki burada g\u00f6nderilecek kodlar al\u0131c\u0131 cihaz\u0131n istedi\u011fi formatta g\u00f6nderilecektir.<br \/>\nMesela Bu haf\u0131za entegrelerinde Al\u0131c\u0131 sistemin istedi\u011fi komut \u015fu \u015fekildedir. Komut sinyal g\u00f6r\u00fcnt\u00fclerinde, CS low pozisyona geldi\u011finde veri g\u00f6nderme ba\u015flar ve HIGH oldu\u011funda biter. Bu \u015fekilde sinyalleri incelemenizi tavsiye ederim. Instruction yazan k\u0131s\u0131mda a\u015fa\u011f\u0131daki tablodan buldu\u011fumuz kodu g\u00f6ndermekle ba\u015flar\u0131z. Sonra adres 2-3 byte yer al\u0131r. sonras\u0131nda ise data byte lar\u0131n\u0131 g\u00f6ndeririz ya da al\u0131r\u0131z. CLK sinyalini master cihaz g\u00f6nderdi\u011fi i\u00e7in READ komutunda veri olarak 0 yollayarak CLK sinyalinin devam etmesini sa\u011flar. Ka\u00e7 byte okunacaksa o kadar byte 0 g\u00f6nderir ve Master g\u00f6nderilen veri kadar byte okur. kar\u015f\u0131l\u0131\u011f\u0131nda gelen veriyi okur.<\/p>\n<p><a href=\"https:\/\/github.com\/safaka123\/Mikrobotik_yazilarim\/blob\/main\/spi_memory_son\/readsinyal.JPG?raw=true\" target=\"_blank\" rel=\"lightbox noopener noreferrer\"><img decoding=\"async\" class=\"aligncenter lazyload\" data-src=\"https:\/\/github.com\/safaka123\/Mikrobotik_yazilarim\/blob\/main\/spi_memory_son\/readsinyal.JPG?raw=true\" alt=\"\" width=\"500\" height=\"333\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 500px; --smush-placeholder-aspect-ratio: 500\/333;\" \/><\/a><\/p>\n<p><a href=\"https:\/\/github.com\/safaka123\/Mikrobotik_yazilarim\/blob\/main\/spi_memory_son\/bytewritesinyal.JPG?raw=true\" target=\"_blank\" rel=\"lightbox noopener noreferrer\"><img decoding=\"async\" class=\"aligncenter lazyload\" data-src=\"https:\/\/github.com\/safaka123\/Mikrobotik_yazilarim\/blob\/main\/spi_memory_son\/bytewritesinyal.JPG?raw=true\" alt=\"\" width=\"500\" height=\"333\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 500px; --smush-placeholder-aspect-ratio: 500\/333;\" \/><\/a><a href=\"https:\/\/github.com\/safaka123\/Mikrobotik_yazilarim\/blob\/main\/spi_memory_son\/writesequence_sinyal.JPG?raw=true\" target=\"_blank\" rel=\"lightbox noopener noreferrer\"><br \/>\n<img decoding=\"async\" class=\"aligncenter lazyload\" data-src=\"https:\/\/github.com\/safaka123\/Mikrobotik_yazilarim\/blob\/main\/spi_memory_son\/writesequence_sinyal.JPG?raw=true\" alt=\"\" width=\"500\" height=\"333\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 500px; --smush-placeholder-aspect-ratio: 500\/333;\" \/><\/a><a href=\"https:\/\/github.com\/safaka123\/Mikrobotik_yazilarim\/blob\/main\/spi_memory_son\/write_enablesinyal.JPG?raw=true\" target=\"_blank\" rel=\"lightbox noopener noreferrer\"><br \/>\n<img decoding=\"async\" class=\"aligncenter lazyload\" data-src=\"https:\/\/github.com\/safaka123\/Mikrobotik_yazilarim\/blob\/main\/spi_memory_son\/write_enablesinyal.JPG?raw=true\" alt=\"\" width=\"500\" height=\"333\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 500px; --smush-placeholder-aspect-ratio: 500\/333;\" \/><\/a><\/p>\n<p>Yazmak i\u00e7in yazma korumas\u0131n\u0131n da a\u015f\u0131lmas\u0131 laz\u0131m. yukar\u0131daki sinyal resmindeki gibi yazma korumas\u0131n\u0131 kald\u0131rabiliriz. Kod=6.<br \/>\n<span style=\"color: #ff0000;\"><strong>Bu tablo 25LC512 nin komut tablosudur.<\/strong><\/span> Bu tabloya g\u00f6re kodu bulup yollar\u0131z.<a href=\"https:\/\/github.com\/safaka123\/Mikrobotik_yazilarim\/blob\/main\/spi_memory_son\/komut%20tablosu.JPG?raw=true\" target=\"_blank\" rel=\"lightbox noopener noreferrer\"><img decoding=\"async\" class=\"aligncenter lazyload\" data-src=\"https:\/\/github.com\/safaka123\/Mikrobotik_yazilarim\/blob\/main\/spi_memory_son\/komut%20tablosu.JPG?raw=true\" alt=\"\" width=\"556\" height=\"223\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 556px; --smush-placeholder-aspect-ratio: 556\/223;\" \/><\/a><\/p>\n<p>Komut tablosuna bakarsan\u0131z write protect k\u0131sm\u0131n\u0131n sadece donan\u0131msal olarak yap\u0131lmad\u0131\u011f\u0131n\u0131 g\u00f6r\u00fcrs\u00fcn\u00fcz. Bu tabloda<strong> 6<\/strong> kodu (Set the write enable latch (enable write operations)) Bir yazma i\u015flemi yap\u0131laca\u011f\u0131 zaman haf\u0131zadaki yazma kilidini kald\u0131r\u0131r. Baz\u0131 komutlar bu olmadan \u00e7al\u0131\u015fmaz. Yazma komutu ve page erase komutu gibi.<\/p>\n<p><span style=\"color: #ff6600;\">Yukar\u0131daki sinyal resimlerine bakarsak 512Kbit entegrede 16 bitlik adresleme gerekti\u011fi g\u00f6r\u00fcn\u00fcyor.<\/span> Fakat denemelerimde ve k\u00fct\u00fcphane yazan ki\u015filerin programlar\u0131nda, komut ile adres aras\u0131nda 1 adet 0 g\u00f6ndermek gerekecektir. Bu da 3 tane 8 bitlik adres g\u00f6nderilmesi gerekti\u011fini bize anlat\u0131yor. Bu datasheet te nerede derseniz, datasheet 16 bit yeter diyor fakat ben proteus \u00fczerinde 16 bit adresle do\u011fru kay\u0131t yapamad\u0131m. Sonras\u0131nda k\u00fct\u00fcphaneli yap\u0131lan program\u0131nda ayn\u0131 \u015fekilde araya 0 koydu\u011funu g\u00f6rd\u00fcm. Bu \u015funu g\u00f6steriyor. 512Kbit entegrede en fazla 65535=0xFFFF kay\u0131t yap\u0131labilmektedir. Bununla birlikte 1024Kbit entegrelerde ise daha 131072 byte= 0x20000 yani 3 byte adrese ihtiya\u00e7 var. Bundan dolay\u0131 <strong>512K l\u0131k entegrede 3bytel\u0131k adrese sahip g\u00f6r\u00fcn\u00fcyor. Datasheet 2 byte dese bile<\/strong>. Belki de sonradan uyumluluk olarak yap\u0131ld\u0131. Bunun yan\u0131 s\u0131ra 64Kbit olan entegre ise daha k\u00fc\u00e7\u00fck boyutta oldu\u011fu i\u00e7in 2byte adres yeterli oluyor. <strong>(<span style=\"color: #ff6600;\"> Yani kulland\u0131\u011f\u0131n\u0131z entegrenin boyutuna g\u00f6re buradaki adres 2-3byte olabiliyor buna dikkat etmelisiniz.<\/span> )<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: center;\"><span style=\"color: #ff0000;\"><strong>NOT:<\/strong> SLAVE cihazda MISO pimi birden fazla al\u0131c\u0131 cihazla \u00e7al\u0131\u015ft\u0131\u011f\u0131nda ba\u011flant\u0131 hatt\u0131nda sorun olmas\u0131n diye, y\u00fcksek empedans durumunda bekler. Ancak veri istendi\u011finde OUTPUT konumuna ge\u00e7erek veri g\u00f6ndermeye ba\u015flar. A\u015fa\u011f\u0131daki resimde g\u00f6r\u00fcld\u00fc\u011f\u00fc gibi MISO hatt\u0131 birden fazla SLAVE cihaza ba\u011fl\u0131ysa.<\/span><br \/>\n<a href=\"https:\/\/github.com\/safaka123\/Mikrobotik_yazilarim\/blob\/main\/spi_memory_son\/spi_ikinci%20sema.png?raw=true\" target=\"_blank\" rel=\"lightbox noopener noreferrer\"><img decoding=\"async\" class=\"aligncenter lazyload\" data-src=\"https:\/\/github.com\/safaka123\/Mikrobotik_yazilarim\/blob\/main\/spi_memory_son\/spi_ikinci%20sema.png?raw=true\" alt=\"\" width=\"347\" height=\"107\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 347px; --smush-placeholder-aspect-ratio: 347\/107;\" \/><\/a><br \/>\n<strong><span style=\"color: #ff0000;\">\u015eimdi ise bir ka\u00e7 byte yazal\u0131m ve okuyal\u0131m.<\/span><\/strong><\/p>\n<figure style=\"width: 667px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/github.com\/safaka123\/Mikrobotik_yazilarim\/blob\/main\/spi_memory_son\/Arduino_spi_memory_devre.JPG?raw=true\" target=\"_blank\" rel=\"lightbox noopener noreferrer\"><img decoding=\"async\" data-src=\"https:\/\/github.com\/safaka123\/Mikrobotik_yazilarim\/blob\/main\/spi_memory_son\/Arduino_spi_memory_devre.JPG?raw=true\" alt=\"\" width=\"667\" height=\"359\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 667px; --smush-placeholder-aspect-ratio: 667\/359;\" \/><\/a><figcaption class=\"wp-caption-text\"><span style=\"color: #ff0000;\"><strong>SPI yazan kutu spi monit\u00f6rd\u00fcr. devrede bulunmayacak. <\/strong><\/span><\/figcaption><\/figure>\n<p><span style=\"color: #0000ff;\"><strong>Yazma i\u00e7in komut sat\u0131rlar\u0131.<\/strong><\/span><\/p>\n<p><span style=\"color: #ff6600;\">digitalWrite(SS, LOW);<\/span> \/\/ Haberle\u015fmeyi ba\u015flat<br \/>\n<span style=\"color: #ff6600;\">SPI.transfer (6);\u00a0<\/span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ write enable latch (enable write operations) kod=6<br \/>\n<span style=\"color: #ff6600;\">digitalWrite(SS, HIGH);<\/span> \/\/ Haberle\u015fmeyi kapat<br \/>\n<span style=\"color: #ff6600;\">delay(10); \u00a0<\/span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ S\u00fcre hi\u00e7 vermeseniz bile olur. \u0130ste\u011fe ba\u011fl\u0131.<\/p>\n<p><span style=\"color: #ff6600;\">digitalWrite(SS, LOW);<\/span>\u00a0\u00a0\u00a0 \/\/ Haberle\u015fmeyi ba\u015flat<br \/>\n<span style=\"color: #ff6600;\">SPI.transfer (2);\u00a0<\/span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ write komutu 1-128byte yazabilirsiniz. 128byte=1 page<br \/>\n<span style=\"color: #ff6600;\">SPI.transfer(addr &gt;&gt; 16);<\/span> \/\/ 3.adres Byte adresin en b\u00fcy\u00fck byte\u2019\u0131 MSB den dolay\u0131<br \/>\n<span style=\"color: #ff6600;\">SPI.transfer(addr &gt;&gt; 8);\u00a0<\/span> \u00a0 \/\/ 2. Adres byte<br \/>\n<span style=\"color: #ff6600;\">SPI.transfer(addr);\u00a0\u00a0<\/span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ 1. adres Byte<br \/>\n<span style=\"color: #ff6600;\">SPI.transfer(yaz);\u00a0<\/span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Yaz\u0131lacak 1. de\u011fer<br \/>\n<span style=\"color: #ff6600;\">SPI.transfer(yaz+1);<\/span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ yaz\u0131lacak 2. De\u011fer. Bu alt alta artt\u0131r\u0131labilir.<br \/>\n<span style=\"color: #ff6600;\">digitalWrite(SS, HIGH);\u00a0<\/span>\u00a0 \/\/ haberle\u015fmeyi kapat.<br \/>\n<span style=\"color: #ff6600;\">delay (100);<br \/>\n<\/span><br \/>\nBuraya kadar 2 bytel\u0131k bilgiyi yazd\u0131k. Addr de\u011feri 0x000001 oldu\u011funu d\u00fc\u015f\u00fcn\u00fcrsek yaz\u0131lacak ilk de\u011fer haf\u0131za entegresinin 1. Byte\u2019\u0131na 2. De\u011fer 2. Byte\u2019\u0131na verilir. <span style=\"color: #ff6600;\">128 byte i\u00e7erisinde istedi\u011finiz \u00f6nceden yaz\u0131lmam\u0131\u015f bir yere yazd\u0131rabilirsiniz.<\/span><\/p>\n<p><strong><span style=\"color: #0000ff;\">Okuma yap\u0131laca\u011f\u0131 zaman yine benzer sat\u0131rlar\u0131 g\u00f6receksiniz.<\/span><\/strong><br \/>\n<span style=\"color: #ff6600;\">digitalWrite(SS, LOW);<\/span>\u00a0\u00a0\u00a0<span style=\"color: #008000;\"> \/\/ Haberle\u015fmeyi ba\u015flat<\/span><br \/>\n<span style=\"color: #ff6600;\">SPI.transfer (3);\u00a0\u00a0<\/span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <span style=\"color: #008000;\">\/\/ read byte komutu kod=3<\/span><br \/>\n<span style=\"color: #ff6600;\">SPI.transfer(addr &gt;&gt; 16);<\/span><span style=\"color: #008000;\"> \/\/ 3. Byte adresin en b\u00fcy\u00fck byte\u2019\u0131 MSB den dolay\u0131<\/span><br \/>\n<span style=\"color: #ff6600;\">SPI.transfer(addr &gt;&gt; 8);<\/span>\u00a0 \u00a0<span style=\"color: #008000;\"> \/\/ 2. byte<\/span><br \/>\n<span style=\"color: #ff6600;\">SPI.transfer(addr);\u00a0<\/span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"color: #008000;\"> \/\/ 1. Byte<\/span><br \/>\n<span style=\"color: #ff6600;\">uint8_t result = SPI.transfer(0);<\/span> <span style=\"color: #008000;\">\/\/ burada okumak istedi\u011fimiz bilgi i\u00e7in CLK palsini master devam\u00a0\u00a0\u00a0\u00a0 \/\/\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026..ettirmek zorunda bundan dolay\u0131 bu 0 byte \u0131n\u0131 yollar\u0131z ve kar\u015f\u0131l\u0131\u011f\u0131nda \/\/\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026istedi\u011fimiz adresteki bilgiyi haf\u0131zadan okur ve master cihaza g\u00f6nderir.<\/span><br \/>\n<span style=\"color: #ff6600;\">uint8_t result1 = SPI.transfer(0);<\/span> <span style=\"color: #008000;\">\/\/ 2 bilgi yazd\u0131\u011f\u0131m\u0131zdan 2. Bilgiyi de bu \u015fekilde 0 g\u00f6ndererek cevab\u0131n\u0131 \/\/\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026.al\u0131r\u0131z.<\/span><br \/>\n<span style=\"color: #ff6600;\">digitalWrite(SS, HIGH);<\/span>\u00a0\u00a0 <span style=\"color: #008000;\">\/\/ haberle\u015fmeyi kapat<\/span><br \/>\n<span style=\"color: #ff6600;\">Serial.print(&#8221; okunan deger\u00a0 : &#8220;);Serial.print(result,HEX);Serial.print(&#8221; , &#8220;);Serial.println(result1,HEX);\u00a0<\/span> <span style=\"color: #008000;\">\/\/ yukar\u0131daki sat\u0131rda ise gelen de\u011fi\u015fkenleri ekrana yazd\u0131r\u0131r\u0131z.<\/span><br \/>\n<span style=\"color: #ff6600;\">delay (10);<\/span><\/p>\n<p>Yukar\u0131daki programda 2 byte yazd\u0131k 2 byte okuduk. Ekran g\u00f6r\u00fcnt\u00fcs\u00fcnde giden ve gelen bilgiler g\u00f6sterilmektedir. ( Addr&gt;&gt;16 gibi sat\u0131rlar g\u00f6r\u00fcyorsunuz bunlar\u0131n, verilen say\u0131y\u0131 binary olarak d\u00fc\u015f\u00fcn\u00fcp sa\u011f tarafa bit bit kayd\u0131\u011f\u0131n\u0131 d\u00fc\u015f\u00fcn\u00fcn. Bu i\u015flemi yapar. Mesela 24 bit yani 3 byte say\u0131n\u0131z var. En soldaki byte \u00f6\u011frenilmek istendi\u011finde 16 bit kayd\u0131rma yap\u0131l\u0131r ve en sa\u011fdaki byte olur bunu da bir de\u011fi\u015fkene aktarabiliriz ya da SPI transfer sadece 8 bit yollad\u0131\u011f\u0131ndan en sa\u011fdaki byte\u2019\u0131 kullanacakt\u0131r. Bundan faydalan\u0131r\u0131z. En sa\u011fda kalan byte yollanacakt\u0131r. Burada addr&gt;&gt;16,addr&gt;&gt;8: 3. Ve 2. Byte lar\u0131n en sa\u011fdaki byte\u2019a kayd\u0131r\u0131lmas\u0131 kolayca transfer edilmesini sa\u011flar. Son addr ise 3 byte l\u0131k veridir. Fakat SPI transfer sadece 8 bit yollad\u0131\u011f\u0131ndan en sa\u011fdaki byte\u2019\u0131 kullanacakt\u0131r bundan dolay\u0131 2. Ve 3. Byte lar i\u015flem d\u0131\u015f\u0131 kalacakt\u0131r.<\/p>\n<p><a href=\"https:\/\/github.com\/safaka123\/Mikrobotik_yazilarim\/blob\/main\/spi_memory_son\/3bytegonder.JPG?raw=true\" target=\"_blank\" rel=\"lightbox noopener noreferrer\"><img decoding=\"async\" class=\"aligncenter lazyload\" data-src=\"https:\/\/github.com\/safaka123\/Mikrobotik_yazilarim\/blob\/main\/spi_memory_son\/3bytegonder.JPG?raw=true\" alt=\"\" width=\"956\" height=\"151\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 956px; --smush-placeholder-aspect-ratio: 956\/151;\" \/><\/a><\/p>\n<p><span style=\"color: #ff6600;\"><strong>Bu durum 2. Videoda g\u00f6r\u00fclmektedir.<\/strong> <\/span><\/p>\n<p><a href=\"https:\/\/github.com\/safaka123\/Mikrobotik_yazilarim\/blob\/main\/spi_memory_son\/yazoku_ekran.jpg?raw=true\" target=\"_blank\" rel=\"lightbox noopener noreferrer\"><img decoding=\"async\" class=\"aligncenter lazyload\" data-src=\"https:\/\/github.com\/safaka123\/Mikrobotik_yazilarim\/blob\/main\/spi_memory_son\/yazoku_ekran.jpg?raw=true\" alt=\"\" width=\"317\" height=\"327\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 317px; --smush-placeholder-aspect-ratio: 317\/327;\" \/><\/a><\/p>\n<p>Yukar\u0131daki resimde sola do\u011fru bakan OK (lacivert olan) Master cihazdan Slave cihaza giden veridir. Hemen \u00fcst\u00fcndeki ise Slave cihaz\u0131n Master cihaza verdi\u011fi cevapt\u0131r. Bir yazma komutu veriyorsan\u0131z gelen bilgileri kontrol etmenize gerek yok. Fakat bir okuma yap\u0131yorsan\u0131z Bu gelen bilgileri dikkate almal\u0131s\u0131n\u0131z. 3 kodu ile ba\u015flayan sat\u0131r okuma sat\u0131r\u0131 oldu\u011fundan gelen bilgiler i\u00e7erisinde okunan de\u011ferler vard\u0131r.<br \/>\nSPI ile bir de Arduino.cc sitesinde \u00f6rnek olarak bulunan\u00a0 dijital pot \u00f6rne\u011fi programlar i\u00e7erisinde bulunmaktad\u0131r.<br \/>\n<strong>Burada SPI haberle\u015fme nas\u0131l kullan\u0131l\u0131yor. (<a href=\"https:\/\/www.arduino.cc\/en\/Tutorial\/LibraryExamples\/DigitalPotControl\" target=\"_blank\" rel=\"noopener noreferrer\">Detaylar i\u00e7in Bak\u0131n\u0131z<\/a> )<\/strong><\/p>\n<p><strong>Program\u0131n ba\u015f\u0131nda:<\/strong><br \/>\n<span style=\"color: #ff6600;\">const int slaveSelectPin = 10;<\/span><br \/>\n<strong>setup b\u00f6l\u00fcm\u00fcnde<\/strong><br \/>\n<span style=\"color: #ff6600;\">pinMode (slaveSelectPin, OUTPUT);\u00a0\u00a0 \/\/ set the slaveSelectPin as an output:<\/span><br \/>\n<span style=\"color: #ff6600;\">\u00a0SPI.begin<\/span><\/p>\n<p><strong>Loop b\u00f6l\u00fcm\u00fcnde<\/strong><br \/>\n<span style=\"color: #ff6600;\">digitalWrite(slaveSelectPin,LOW);<\/span><br \/>\n<span style=\"color: #ff6600;\">SPI.transfer(address);<\/span><br \/>\n<span style=\"color: #ff6600;\">SPI.transfer(value);<\/span><br \/>\n<span style=\"color: #ff6600;\">digitalWrite(slaveSelectPin,HIGH);<\/span><\/p>\n<p><strong>Farkettiyseniz<\/strong><br \/>\n<span style=\"color: #ff6600;\"><strong>SPI.beginTransaction(SPISettings(4000000, MSBFIRST, SPI_MODE0));<\/strong><\/span><\/p>\n<p>Gibi bir sat\u0131r olmad\u0131\u011f\u0131n\u0131 g\u00f6rm\u00fc\u015fs\u00fcn\u00fczd\u00fcr. SPI haberle\u015fme k\u00fct\u00fcphanesinde baz\u0131 ba\u015flang\u0131\u00e7 de\u011ferleri vard\u0131r. Bunlar ise burada kullan\u0131lm\u0131\u015ft\u0131r. Bundan dolay\u0131 bu sat\u0131r\u0131 kullanmam\u0131\u015flar. Fakat siz i\u015fi sa\u011flama almak i\u00e7in datasheet dok\u00fcman\u0131na bakarak ger\u00e7ek de\u011ferleri program\u0131n\u0131za yerle\u015ftirmelisiniz.<\/p>\n<p><strong>\u00d6ncelikle page(sayfa) boyutunda \u00e7al\u0131\u015fmay\u0131 g\u00f6relim. (512Kbit lik entegre i\u00e7in page=128Byte)<\/strong><br \/>\nNormalde adres 1 artt\u0131r\u0131larak page boyutundan b\u00fcy\u00fck bilgiler yaz\u0131labilir. Buraya kadar sorun yok. <span style=\"color: #ff6600;\">Fakat sorun 1 page boyutunda bilgiyi,<\/span> 1 komut sat\u0131r\u0131yla yazd\u0131rmaya kalkt\u0131\u011f\u0131n\u0131zda ortaya \u00e7\u0131k\u0131yor. Mesela 130 byte l\u0131k bir bilgiyi yazd\u0131r\u0131yorsunuz. Bu fazlal\u0131k olan bilgi di\u011fer page \u00fczerine yaz\u0131lacakt\u0131r derseniz, <span style=\"color: #ff6600;\">HATA yapars\u0131n\u0131z.<\/span> Maalesef bu bilgiler di\u011fer PAGE blo\u011funa yaz\u0131lmaz. Hatta PAGE ba\u015flang\u0131\u00e7 adresinden sonra bir adresten ba\u015flad\u0131\u011f\u0131n\u0131zda bilgiler yaz\u0131lmaya ba\u015flan\u0131r ve PAGE sonuna gelindi\u011finde kalan veri varsa bunu PAGE ba\u015f\u0131nda yazmad\u0131\u011f\u0131 yerlere yazar. A\u015fa\u011f\u0131daki \u00f6rnek resimlerdeki gibi.<br \/>\nYaz\u0131lan bilgi.128 Byte:\u00a0 \u201c123456789098765432101234567890987654321<br \/>\n01234567890987654321012345678909876543210123456789<br \/>\n0987654321012345678909876543210Merhaba!&#8221;\u00a0 Adres 0x000000 olmas\u0131 gerekirken 0x000014 adresi verilmesinden dolay\u0131 kaym\u0131\u015ft\u0131r.<br \/>\n<span style=\"color: #ff6600;\">Bu bilgiler adres yanl\u0131\u015f verildi\u011finde a\u015fa\u011f\u0131daki resimdeki gibi g\u00f6r\u00fcn\u00fcr.<\/span><br \/>\n<a href=\"https:\/\/github.com\/safaka123\/Mikrobotik_yazilarim\/blob\/main\/spi_memory_son\/eprom_yanl%C4%B1%C5%9F.JPG?raw=true\" target=\"_blank\" rel=\"lightbox noopener noreferrer\"><img decoding=\"async\" class=\"aligncenter lazyload\" data-src=\"https:\/\/github.com\/safaka123\/Mikrobotik_yazilarim\/blob\/main\/spi_memory_son\/eprom_yanl%C4%B1%C5%9F.JPG?raw=true\" alt=\"\" width=\"359\" height=\"306\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 359px; --smush-placeholder-aspect-ratio: 359\/306;\" \/><\/a><br \/>\nYukar\u0131daki resimde, merhaba kelimesinin adres yanl\u0131\u015fl\u0131\u011f\u0131ndan dolay\u0131 en sona yaz\u0131lamad\u0131\u011f\u0131n\u0131 en ba\u015fta yaz\u0131lamayan yerlere yaz\u0131ld\u0131\u011f\u0131n\u0131 g\u00f6r\u00fcyorsunuz.<\/p>\n<p>Yaz\u0131lan bilgi 132 byte: &#8220;UUUU123456789098765432101234567890987654321<br \/>\n0123456789098765432101234567890987654321<br \/>\n01234567890987654321012345678909876543210Merhaba!&#8221;<br \/>\nBu \u015fekilde bir komut sat\u0131r\u0131nda 132 karakter yazarsan\u0131z blok olarak yazd\u0131\u011f\u0131n\u0131z i\u00e7in fazla olan karakterleri PAGE ba\u015flang\u0131\u00e7 yerine geri d\u00f6nerek eski bilginin \u00fczerine yazar. <strong><span style=\"color: #ff6600;\">Tabii ki bu durum yanl\u0131\u015f durumdur.<\/span><\/strong><br \/>\n<a href=\"https:\/\/github.com\/safaka123\/Mikrobotik_yazilarim\/blob\/main\/spi_memory_son\/eprom_eksik.JPG?raw=true\" target=\"_blank\" rel=\"lightbox noopener noreferrer\"><img decoding=\"async\" class=\"aligncenter lazyload\" data-src=\"https:\/\/github.com\/safaka123\/Mikrobotik_yazilarim\/blob\/main\/spi_memory_son\/eprom_eksik.JPG?raw=true\" alt=\"\" width=\"435\" height=\"400\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 435px; --smush-placeholder-aspect-ratio: 435\/400;\" \/><\/a><br \/>\nYukar\u0131daki resimde ise 132 karakter oldu\u011fundan ilk yazd\u0131\u011f\u0131 UUUU bilgilerinin \u00fczerinde 128 ten sonra kalan byte lar\u0131 yazmaya \u00e7al\u0131\u015fm\u0131\u015f. Fakat \u00fczerine yazma yapt\u0131\u011f\u0131 i\u00e7in 2. yazd\u0131\u011f\u0131 de\u011fer do\u011fru de\u011fer de\u011fil Yaz\u0131labilseydi. merhaba kelimesinin eksik olan k\u0131sm\u0131n\u0131 yazmal\u0131yd\u0131. Fakat \u00fcst\u00fcne yazma yoktur. Dikkat ederseniz 4 adet fazla karakteri 2. sayfaya yazmad\u0131.<br \/>\n<span style=\"color: #ff6600;\">PAGE WRITE i\u00e7in ayr\u0131 bir komut yoktur. Sadece 128 bytel\u0131k bilgi yazarsan\u0131z bunu page write olarak alg\u0131lar. Daha d\u00fc\u015f\u00fck veri yazmak istedi\u011finizde bunu normal yazma olarak de\u011ferlendirir. PAGE WRITE komutu aramay\u0131n.\u00a0<\/span><br \/>\n<a href=\"https:\/\/github.com\/safaka123\/Mikrobotik_yazilarim\/blob\/main\/spi_memory_son\/eprom_dogru.JPG?raw=true\" target=\"_blank\" rel=\"lightbox noopener noreferrer\"><img decoding=\"async\" class=\"aligncenter lazyload\" data-src=\"https:\/\/github.com\/safaka123\/Mikrobotik_yazilarim\/blob\/main\/spi_memory_son\/eprom_dogru.JPG?raw=true\" alt=\"\" width=\"502\" height=\"384\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 502px; --smush-placeholder-aspect-ratio: 502\/384;\" \/><\/a><br \/>\nYukar\u0131daki resimde ise do\u011fru adresten ba\u015flayan 128 byte yaz\u0131lan bir eprom bilgisi g\u00f6r\u00fcyorsunuz.<\/p>\n<p>Bununla birlikte tek tek yazarak page s\u0131n\u0131r\u0131n\u0131n d\u0131\u015f\u0131na \u00e7\u0131kabiliriz demi\u015ftik. Evet 1 komut sat\u0131r\u0131nda 128 byte yazmak yerine 128 kez yazmay\u0131 g\u00f6ze alarak 1 PAGE boyutundan b\u00fcy\u00fck bilgiyi yazabiliriz.<br \/>\n<a href=\"https:\/\/github.com\/safaka123\/Mikrobotik_yazilarim\/blob\/main\/spi_memory_son\/pagetenbuyuk.JPG?raw=true\" target=\"_blank\" rel=\"lightbox noopener noreferrer\"><img decoding=\"async\" class=\"aligncenter lazyload\" data-src=\"https:\/\/github.com\/safaka123\/Mikrobotik_yazilarim\/blob\/main\/spi_memory_son\/pagetenbuyuk.JPG?raw=true\" alt=\"\" width=\"541\" height=\"495\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 541px; --smush-placeholder-aspect-ratio: 541\/495;\" \/><\/a><br \/>\nYukar\u0131daki resimde ise teker teker adres verilerek yaz\u0131lan bilgilerle PAGE boyutundan fazla yaz\u0131labildi\u011fi g\u00f6r\u00fcl\u00fcyor. 1. page 0x0000 &#8211; 0x007F aras\u0131ndad\u0131r. Yaz\u0131lan bilgiler bu boyutu a\u015fm\u0131\u015ft\u0131r.<\/p>\n<p><span style=\"color: #ff6600;\"><strong>Hangi page hangi adresten ba\u015fl\u0131yor bunu nas\u0131l \u00f6\u011frenebiliriz,<\/strong><\/span> derseniz. 0 dan ba\u015flayarak 128 artt\u0131rarak sayfa ba\u015flang\u0131\u00e7lar\u0131n\u0131 bulabilirsiniz. 0+128=128=0x0080 2. sayfa. 128+128=256=0x0100 d\u0131r. Bu tabii ki <span style=\"color: #ff6600;\">512kbit entegreler i\u00e7indir.\u00a0<\/span><br \/>\n<span style=\"color: #ff6600;\">25LC640A da<\/span> 1 page=32byte t\u0131r. 0+32=32=0x0020 dir. Bu hesapla kendi entegrenizin page adres ba\u015flang\u0131\u00e7lar\u0131n\u0131 bulabilirsiniz.<br \/>\n<strong><span style=\"color: #ff6600;\">Neden 0 dan ba\u015fl\u0131yoruz derseniz.<\/span> <\/strong>haf\u0131za entegrelerinin h\u00fccreleri 0x0000 adresinden ba\u015flar. buna dikkat etmeniz gerekir.<\/p>\n<p><span style=\"color: #ff0000;\"><strong>Not:<\/strong> <\/span>Page erase yapt\u0131n\u0131z ve i\u015flemlerinize g\u00f6re 1 page ayarlad\u0131n\u0131z. \u00d6nce 10. adrese yazd\u0131n\u0131z. Fakat sonraki de\u011fer 5. adrese yaz\u0131lmas\u0131 gerekti. Bu durumda 10. adrese yazd\u0131\u011f\u0131n\u0131z veri silinir mi diye d\u00fc\u015f\u00fcnebilirsiniz. S\u0130L\u0130NMEZ. Page i\u00e7erisinde ilk defa bilgi yaz\u0131lacak bir adrese, bilgi yazd\u0131\u011f\u0131n\u0131zda \u00f6nceden yaz\u0131lm\u0131\u015f de\u011ferler de\u011fi\u015fmezler. <span style=\"color: #ff6600;\">Yaz\u0131lan bir de\u011ferin \u00fczerine yaz\u0131lamaz.<\/span> <span style=\"color: #ff6600;\">Yazarsan\u0131z yanl\u0131\u015f de\u011fer al\u0131r.\u00a0<\/span><\/p>\n<p>Sector ise (page) sayfalardan olu\u015fur. Fakat page olarak boyut bilgisi verilmez. Boyut byte cinsinden belirtilir. bundan dolay\u0131 page olarak bakarsan\u0131z yar\u0131da kalabilir. Sector Erase dedi\u011finizde son page i\u00e7indeki verilerin bir k\u0131sm\u0131 silinebilir bir k\u0131sm\u0131 kalabilir. Sector olarak silecekseniz bu duruma dikkat edin.<\/p>\n<p>Bu sayfalar blok olarak yaz\u0131ld\u0131\u011f\u0131 gibi tek tek de yaz\u0131labilece\u011fini ifade etmi\u015ftim.<br \/>\n<span style=\"color: #ff6600;\">As\u0131l problem \u015fudur.<\/span> Bir page i\u00e7inde de\u011fi\u015fiklik yap\u0131lacak ise bu page i\u00e7indeki verilerin tamam\u0131, ge\u00e7ici olarak okunur ve okunan verilerde de\u011fi\u015fiklik yap\u0131l\u0131p tekrar page erase yapt\u0131ktan sonra 128 byte olarak yerine konur.<br \/>\nBir indis(array) de\u011fi\u015fkene 128 bytel\u0131k bilgiyi al\u0131rs\u0131n\u0131z hangi k\u0131sm\u0131n\u0131 de\u011fi\u015ftirecekseniz de\u011fi\u015ftirirsiniz. Sonras\u0131nda PageErase yaparak 128 byte bilgiyi yerine koyars\u0131n\u0131z. 512Kbitlik bir entegrede 128bytel\u0131k bir bilginin pageerase ile silinmesi 5ms s\u00fcrecektir. Bu da h\u0131zl\u0131 bir yazma eklendi\u011finde fazla zaman\u0131n\u0131z\u0131 almayacakt\u0131r.<br \/>\n<span style=\"color: #ff6600;\">\u015eayet 1 haf\u0131za entegresi almay\u0131 d\u00fc\u015f\u00fcn\u00fcrseniz datasheete bak\u0131n. En d\u00fc\u015f\u00fck page yap\u0131s\u0131 olmas\u0131na ve page erase olmas\u0131na bak\u0131n.<\/span> Yoksa i\u015f daha zor. Mesela AT25F512 de page erase yoktur. Page yap\u0131s\u0131 program diye bir komut ile yap\u0131l\u0131yor. Fakat standarttan biraz farkl\u0131. Bu tip standart yap\u0131dan farkl\u0131 tipleri de se\u00e7mezseniz sizi zorlamayacakt\u0131r. Bu entegrede page erase yok, sector erase vard\u0131r. Bu da bir kerede 32K l\u0131k bilgiyi silmeniz demektir.<br \/>\nDaha d\u00fc\u015f\u00fck page sayfas\u0131 kullanan entegre sizin i\u015finizi daha kolay g\u00f6recektir.<span style=\"color: #ff6600;\"> Bunun sebebi 128byte geri al\u0131p de\u011fi\u015ftir ve tekrar yerine koy dedi\u011finizde bu hem daha \u00e7abuk olur hem de haf\u0131zan\u0131z\u0131 zorlamayacakt\u0131r.<\/span><\/p>\n<p><strong>Bu tip entegreleri, kal\u0131c\u0131 bir kod ile programlamak istiyorsan\u0131z sorun yok. Mesela baz\u0131<\/strong> programlarda fontlar arduino program\u0131na g\u00f6m\u00fcl\u00fcr ya da resim bilgileri arduino i\u00e7ine g\u00f6m\u00fclmeye \u00e7al\u0131\u015f\u0131l\u0131r. Bu tip programlar\u0131n kal\u0131c\u0131 ekran g\u00f6r\u00fcnt\u00fclerinin imaj\u0131n\u0131 bu haf\u0131za entegresine koydu\u011funuzda ekran de\u011fi\u015ftik\u00e7e, ekran g\u00f6r\u00fcnt\u00fcs\u00fcn\u00fc haf\u0131za entegresinden \u00e7a\u011f\u0131r\u0131p ekran\u0131 de\u011fi\u015ftirebilirsiniz. Bu tip haf\u0131za entegrelerinin kullan\u0131m\u0131, Mikrokontrol entegrenizin i\u015fini kolayla\u015ft\u0131racak ve daha fazla program haf\u0131zas\u0131 b\u0131rakacakt\u0131r. SPI h\u0131z\u0131nda okumak da size fazla zaman kaybettirmeyecektir. Mesela OLED displayi ele alal\u0131m. 128*64 piksel oldu\u011funu d\u00fc\u015f\u00fcnelim ve 8 piksel bir byte oldu\u011funu d\u00fc\u015f\u00fcn\u00fcrsek 4Mhz h\u0131z\u0131nda SPI ile \u00e7al\u0131\u015f\u0131rsak, ekran\u0131n tamam\u0131na ait bilginin okunmas\u0131 sadece 2,5ms s\u00fcrmektedir. Bu da bizim fark edebilece\u011fimiz bir h\u0131z de\u011fildir. Yani gayet h\u0131zl\u0131 okunuyor.<br \/>\nArduino ya da di\u011fer mikrokontrolc\u00fcler de program ya da data haf\u0131zas\u0131ndan tasarruf etmi\u015f olacakt\u0131r. Bununla birlikte birden fazla SPI cihaz\u0131 da SS hari\u00e7 ayn\u0131 u\u00e7lar\u0131 kullanabilece\u011finiz i\u00e7in pim sorunu da olmayacakt\u0131r. Sadece her SPI cihaz i\u00e7in farkl\u0131 bir SS pimi belirlemelisiniz.<\/p>\n<p><span style=\"color: #ff6600;\">Buraya kadar SPI nas\u0131l \u00e7al\u0131\u015f\u0131r ve Serial memory entegreleri nas\u0131l kullan\u0131l\u0131r anlatmaya \u00e7al\u0131\u015ft\u0131m. Bu bilgileri ARDUINO kullananlar i\u00e7in anlatt\u0131m.<\/span><br \/>\n<span style=\"color: #ff0000;\"><strong><br \/>\nBundan sonras\u0131 i\u00e7in PICbasic ile nas\u0131l yap\u0131l\u0131r \u00f6rnekleri g\u00f6receksiniz.<\/strong><\/span><\/p>\n<p><strong>\u00d6ncelikle SPI haberle\u015fmesi i\u00e7in gereken<span style=\"color: #ff0000;\"> SHIFTOUT<\/span> ve <span style=\"color: #ff0000;\">SHIFTIN<\/span> komutlar\u0131n\u0131n kullan\u0131mlar\u0131na <a href=\"https:\/\/melabs.com\/resources\/pbpmanual\/5_65-5_70.htm\" target=\"_blank\" rel=\"noopener noreferrer\">buradan bak\u0131n.<\/a><\/strong><\/p>\n<p>12F683 ile yapm\u0131\u015f oldu\u011fum devre budur. SPI\u00a0 yazan\u00a0 k\u0131s\u0131m\u00a0 SPI\u00a0 monit\u00f6rd\u00fcr.\u00a0 Devrede\u00a0 bulunmayacak.<a href=\"https:\/\/github.com\/safaka123\/Mikrobotik_yazilarim\/blob\/main\/spi_memory_son\/12F683_devre.JPG?raw=true\" target=\"_blank\" rel=\"lightbox noopener noreferrer\"><img decoding=\"async\" class=\"aligncenter lazyload\" data-src=\"https:\/\/github.com\/safaka123\/Mikrobotik_yazilarim\/blob\/main\/spi_memory_son\/12F683_devre.JPG?raw=true\" alt=\"\" width=\"728\" height=\"410\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 728px; --smush-placeholder-aspect-ratio: 728\/410;\" \/><\/a><br \/>\nPicbasic program\u0131n\u0131 ise <a href=\"https:\/\/github.com\/safaka123\/Mikrobotik_yazilarim\/tree\/main\/spi_memory_son\/picbasic_spi\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>github \u00fczerinden<\/strong><\/a> .alabilirsiniz.\u00a0 Bu program her ne kadar picbasic ile yap\u0131lm\u0131\u015f olsa da mant\u0131k arduino programlar\u0131yla ayn\u0131d\u0131r. <span style=\"color: #ff6600;\">Sizlerde kendi programlama dillerinizde SPI haberle\u015fme komutlar\u0131n\u0131 \u00f6\u011frenerek bu mant\u0131\u011f\u0131 oturtabilirsiniz.<\/span><br \/>\n<strong>PICBASIC yazma komutu:<\/strong><br \/>\nLow SS\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <span style=\"color: #008000;\">&#8216; haberle\u015fme a\u00e7<\/span><br \/>\nShiftout MOSI,SCK,MSBFIRST,[2,Addr1,addr2,addr3,yaz,yaz+1]\u00a0 \u00a0 \u00a0 \u00a0<span style=\"color: #008000;\">&#8216; komut ve veri gonder<\/span><br \/>\nHigh SS\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <span style=\"color: #008000;\">&#8216; Haberle\u015fme kapat<\/span><\/p>\n<p><strong>Okumak i\u00e7in :<\/strong><br \/>\nLow SS\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <span style=\"color: #008000;\">&#8216; haberle\u015fme a\u00e7<\/span><br \/>\nShiftout MOSI,SCK,MSBFIRST,[3,Addr1,addr2,addr3]\u00a0 \u00a0 <span style=\"color: #008000;\">\u00a0&#8216; veri okuma ba\u015flang\u0131\u00e7 adresi g\u00f6nder<\/span><br \/>\nShiftin MISO,SCK,MSBPRE,[oku1,oku2]\u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span style=\"color: #008000;\"> \u00a0&#8216; veri okuma<\/span><br \/>\nHigh SS\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <span style=\"color: #008000;\">&#8216; haberle\u015fme kapat<\/span><\/p>\n<p>Okuma komutundaki <strong>MSBPRE<\/strong> i\u00e7in <strong>yukar\u0131daki<\/strong> <strong>SHIFTIN detayl\u0131 bilgi linkine<\/strong> bas\u0131n\u0131z.<\/p>\n<p><strong><span style=\"color: #ff0000;\">T\u00fcm programlara<\/span> <a href=\"https:\/\/github.com\/safaka123\/Mikrobotik_yazilarim\/tree\/main\/spi_memory_son\" target=\"_blank\" rel=\"noopener noreferrer\">buradan ula\u015fabilirsiniz<\/a>.\u00a0<\/strong><\/p>\n<p><strong><span style=\"color: #ff0000;\">Programlar\u0131n proteus \u00fczerinde denenmesi.<\/span><\/strong><br \/>\n<iframe data-src=\"https:\/\/www.youtube.com\/embed\/v_-SJiDmdBI\" width=\"900\" height=\"506\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" data-load-mode=\"1\"><\/iframe><\/p>\n<p><span style=\"color: #ff0000;\">\u00a0<strong>Arduino sa\u011fa ve sola bit kayd\u0131rma nedir ve nas\u0131l bir sonu\u00e7 g\u00f6zlemlenir.<\/strong><\/span><br \/>\n<iframe data-src=\"https:\/\/www.youtube.com\/embed\/O8q9dlR2YaI\" width=\"900\" height=\"506\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" data-load-mode=\"1\"><\/iframe><br \/>\n&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Serial memory entegrelerinin k\u00fct\u00fcphanesiz kullan\u0131m\u0131. K\u00fct\u00fcphanesiz derken \u00fcr\u00fcn bazl\u0131 k\u00fct\u00fcphane kast edilmi\u015ftir. SPI k\u00fct\u00fcphanesi kullan\u0131lacakt\u0131r. Not: T\u00fcm anlat\u0131mlar Arduino ya g\u00f6re anlat\u0131lsa da PIC i\u00e7in de ge\u00e7erlidir. PICBASIC ile yap\u0131lm\u0131\u015f&#8230; <\/p>\n","protected":false},"author":1,"featured_media":1968,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,21],"tags":[],"class_list":["post-1961","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arduino","category-proteus"],"_links":{"self":[{"href":"https:\/\/www.mikrobotik.com\/wp2\/wp-json\/wp\/v2\/posts\/1961","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mikrobotik.com\/wp2\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mikrobotik.com\/wp2\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mikrobotik.com\/wp2\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mikrobotik.com\/wp2\/wp-json\/wp\/v2\/comments?post=1961"}],"version-history":[{"count":8,"href":"https:\/\/www.mikrobotik.com\/wp2\/wp-json\/wp\/v2\/posts\/1961\/revisions"}],"predecessor-version":[{"id":1970,"href":"https:\/\/www.mikrobotik.com\/wp2\/wp-json\/wp\/v2\/posts\/1961\/revisions\/1970"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mikrobotik.com\/wp2\/wp-json\/wp\/v2\/media\/1968"}],"wp:attachment":[{"href":"https:\/\/www.mikrobotik.com\/wp2\/wp-json\/wp\/v2\/media?parent=1961"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mikrobotik.com\/wp2\/wp-json\/wp\/v2\/categories?post=1961"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mikrobotik.com\/wp2\/wp-json\/wp\/v2\/tags?post=1961"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}