Merhaba, Ziyaretçi. Lütfen giriş yapın veya üye olun.

Kullanıcı adınızı, parolanızı ve aktif kalma süresini giriniz

  Gelişmiş Arama
insanın içinde varsa, commodore.gen.tr açığa çıkarır bunu.. bir nevi retro olaylarının dolunayıyız.(Arda)
Sayfa: 1 [2] 3 4 ... 14   Aşağı git
Yazdır
Gönderen Konu: Psid player projesi  (Okunma Sayısı 99900 defa)
0 Üye ve 1 Ziyaretçi konuyu incelemekte.
i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« Yanıtla #15 : Ocak 21, 2015, 02:34:34 ÖÖ »

Bu projede çok fazla bir ilerleme olmadı. Tape adaptörüne, pcb olaylarına falan biraz fazla kendimi kaptırdım sanırım

Geçenlerde counter entegrelerim geldi. 74HCT4040 12 bit ripple counter ve 74HC390N dual 4 bit ripple counter. Toplamda 16 biti bulacak senkron bir counter bulamadığım için bu şekilde bir kombinasyon oluşturdum. Ripple counter'ların senkron counter'lardan farkı clock uygulandığında sayma işlemini yapan flip flop'ların birbirlerinden sırayla beslenerek işlemi yapmaları. Senkron'da ise clock sinyali ile beraber eş zamanlı tüm flip flop'lar çalışıp sonuç üretiliyor.

Aldığım entegrelerin Datasheet'lerine baktığımda iki entegre ile 16 bit saymayı oluşturabilmek için toplamda 300ns kadar bir bekleme süresi gerekecek. Bu da ram'e birazcık yavaş erişim demek. Hesabıma göre tüm 64k'yı doldurmak 1 saniyeyi bulmayacak.

Biraz bu kısmına odaklandım işin. Daha önce tam yazma kısmını yazmıştım, ona okuma özelliği de ekleyip pic'in 8 bacağını ledlere bağladım. Proteus'ta 16 byte yazma ve okuma denedim. Counter'larım da geldiğine göre artık gerçek aksiyon zamanı geldi. İlk iş ram test programını breadboard üzerinde gerçekleyip test etmek olacak.

Bu arada öldürdüğümü düşündüğüm 6510 ile ilgili de olumlu gelişmeler var. Eğeyi elime alıp kopan bacağın olduğu yeri biraz eğeledim ve lehim yapabileceğim bir noktaya ulaştım. Gerçi niyetim wdc65c02 kullanmak zira temin etmesi 6510 temin etmekten bir nebze daha kolay. Beri yandan ondan daha kolayı herhalde değişik 6502 clone'larını temin etmek. Counter çıkışını tri-state buffer'lardan geçirmem lazım 6510 ile çakışmamaları için bu durumda 6510'un adress hatlarını tristate edebilme özelliğine ihtiyacım kalmıyor. Processor port'unu kullanan sid de herhalde çok fazla yoktur. Kullansa dahi onun implement edilmesi de başlı başına bir iş.


Bu arada PIC + SRAM + 4 bit counter ile 16 byte'lık yazma okuma denemeleri yaptım. PIC üstünde delay rutinini istediğim gibi oturtamadım. Düzgün mü çalışıyor yanlış mı çalışıyor şu an anlaşılmıyor. Proteus'ta düzgün çalışıyor en azından. Şimdilik 16 byte yazma / okuma yazdım. Bunun yerine 8k delay olmadan komple data yazıp, sonra hepsini belli bir checksum algoritmasıyla okuyup sonucunu led'lerle göstermek daha sağlam sonuç verecek muhtemelen. Bu arada sürpriz, 16f877'nin stack boyutu en fazla iç içe 8 çağrıya izin verecek boyuttaymış. Daha sonra entegre edeceğim fat kütüphanesinde sorun olacak gibi bu. Hali hazırda proteus'ta stack overflow'u daha basit şeylerle bile gözlemledim

Beri yandan dün ve bugün ptt'nin takip sistemi düzgün çalıştı, bir anda tek günde bir sürü hareket oldu benim programmer'ın gelişinde. Gümrüğe takılmazsa 1 hafta içinde elimde.  İlk sid denemelerimi yapabilirim bu şekilde. Eski vesa local bus ekran kartımdan bir adet 27c256 32k eprom buldum bu arada. Evde sram bolluğu oldu bu arada eski bir 486 dx board'undan 9 adet PDM41256 32k sram söktüm. Aklınızda olsun sram lazım olursa eski board'lara bir bakın. Eskiden bu bellekler cpu'lar için harici cache bellek olarak kullanılıyordu.

ps: Ptt cayır cayır tracking kasıyor, son iki haftaki halinden eser yok Paket gümrüğe takılmamış, bana 30-40 km mesafeye kadar gelmiş
« Son Düzenleme: Ocak 21, 2015, 02:53:20 ÖÖ Gönderen: i_r_on » Logged

Every imagination is one's self reflection but not every self reflection is imagination. <I.R.on - 2001>

twitter | blog
Simon (Özay Turay)
Yönetici
*****
Mesaj Sayısı: 7.184


Commodore Forever


Üyelik Bilgileri WWW
« Yanıtla #16 : Ocak 21, 2015, 16:22:50 ÖS »

3.5 ay önce aldığım ve gelmediği için parasını bile geri aldığım (USD 1.38) 18650 şarj aleti bugün postadan çıktı benim de. PTT sürprizlerle dolu.
Logged

http://www.retrodergi.com - http://www.e-turay.com - http://www.karizmawow.com

Retro: Commodore 64, Amiga 500, Amiga 1200
Retromsu: Wii, XBox360, XBox, PS3 Slim, PS2 FAT, PS1, PS Vita, Nintendo 3DS, Nintendo 2DS
i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« Yanıtla #17 : Ocak 23, 2015, 00:51:50 ÖÖ »

PTT'yi övdüğümüz gibi bozdu kendini, iki gündür dağıtım merkezinde bekletiyolar paketi, "handed over to the postman in order to be delivered" yazısını bir türlü göremedim

Bugün bahsettiğim ram testi olayının pic için kodunu yazıp proteus üzerinde denedim. Mplab'ın xc8 compiler'ının kesin telepatik güçleri var.

Basit bir algoritma bulayım dedim, 12 bitlik counter ile 4096 byte adresleyebiliyorum. Başlangıcı belli sahte rastgele (pseudo random) sayılar yazayım dedim bu ram'e. Sonra aynı algoritma ile geri okuyup okuma hatası var mı yok sayayım, sonucu da led'lerde göstereyim dedim.

Şöyle bir algoritma,
yazma kısmı
-----------
a = 73
i 0'dan 4095'e kadar
&nbsp; ram'in i adresine a değerini yaz
&nbsp; a = a xor (a>>1)

okuma kısmı
-------------
a = 73
i 0'dan 4095'e kadar
&nbsp; ram'in i adresinden r değerini oku
&nbsp; r eşit değil a ise hata sayısını bir arttır
&nbsp; a = a xor (a>>1)

hata sayısı sıfırdan büyükse LED1'i yak
PORTC'deki 8 led'e a değerini yaz


Aynı kodu doğrulama olsun diye bir de c#'ta yazıp çalıştırdım. Sonuç 73 (01001001) çıkıyordu.

Devrem zaten hazırdı, proteus üzerinde simüle ettim. Baktım sonucu veren led'ler doğru. Ancak hata sayısının 0'dan büyük olduğunu müjdeleyen LED1'de yanıyordu. Debug ettim, okumalar hatalıymış. Rastgele değerler okunuyor. Ancak nedense döngünün dışına çıkıp ram'den son okuduğum değeri PORTC'ye yazarken 73 değerini bulup yazıyor. Değişkenin eski değerini görüyor herhalde bu dedim. Okuma sayısını bir azalttım ki farklı bir değer verecek mi bakalım. Yine doğru sonucu verdi meret (103 müydü neydi) ki işin enteresanı bu değer kodda sabit olarak da geçmiyor.

PORTC'yi set etme işini döngünün scope'una koyup eğer döngü indisi 4096 ise PORTC'yi set et deyince doğru değer yerine hatalı değeri PORTC'ye bağlı ledlerde görebildim.

Düşün yani devre hatalı hali çalışabilsin diye özel çaba sarfediyoruz

Bu arada tam olarak da mantıklı bir açıklamasını bulamadım bu mevhumun. Sonra dur dedim şu okuma aşamasını satır satır takip edeyim entegrelerin bacaklarındaki sinyallere de bakarak. Daha ilk değeri yanlış okuduğunda baktım okuması gereken değere aslında çok benziyor ama birebir de aynı değil. Sram'in data bus'ına göz attığımda daha önceki testler sırasında data bus'ının 0. pin'inin bağlantısını kopardığımı fark ettim.

Bağlantıyı geri yerine koydum ve çalıştırdım. Bu sefer hiç okuma hatası olmadı, LED1'de buna göre doğru bir şekilde yanmadı. Artık önceki halinin hatalı olduğunu kabul ettiğim PORTC'ye bağlı led'ler de düzgün sonucu verdi ve oldu dedim.




Bakalım yarın şu alttaki devredeki 4 bit counter'ı 12 bit olanla değiştirip programı deneyeceğim. Simülasyonla gerçek hayat arasında zamanlama vesaire açısından bir sıkıntı olacak mı anlaşılacak. Bu arada çok sık yaşadığım ciddi bir problem var. Ya pic restart olduğu için ya da breadboard'da temassızlık olduğu için devreyi çalıştırabilmek için bir kaç kez sök tak yapmak zorunda kalıyorum. 5v'u 9v'tan regülatör üstünden aldım ama herhangi bir capacitor bağlamadım bunlara filtre için. Belki de bundan.



Mesajın ekinde pic kodu, test için yazdığım c# kodu mevcut. SRAM ile uğraşmak isteyenler başlangıç için kullanabilirler. Nette kaynak bulmak güç bu konuda. Bir elemanın güzel bir forum post'undan bulmuştum CS, WE ve OE'nin nasıl set edilmesi gerektiğini. Okumada problem çıkınca ilk iş tekrar onu fellik fellik aradım ama bulamadım Kağıda yazdım ne de olsa deyip linki almamıştım sonra da tekrar arar bulurum ya deyip kağıdı da bir yere tıkıştırdım.

İşyerinde yaptıklarımdan bahsederken yaşadığım diyaloglardan biri ile bitireyim

- Çinden paket gelecekti gelmedi anasını satayım
- Ne sipariş verdin ki?
- Eprom programmer
- Hayırdır ne yapıyosun?
- C64 müziklerini çalacak bir devre yapıyorum
- Youtube'dan dinlesene youtube'da var.
- Aynı kalite olmuyor. Gerçi parçaların orjinal cihazdan kaydedilmiş halleri de var ancak&nbsp; bir de hobi amaçlı tabii, kendini geliştirme falan.
- C64 hala var mı yav? [Bu kısım genelde diyaloglarda standart olarak geçiyor]

* PICSramTest.c.txt (2.6 KB - Yükleme: 510 kez.)
* PICSramTest.cs.txt (0.86 KB - Yükleme: 493 kez.)

* ProteusSramTest.png (46.12 KB, 1105x817 - Görüntüleme: 3380 kez.)

* 20150123_003921.jpg (82.92 KB, 800x450 - Görüntüleme: 3088 kez.)
« Son Düzenleme: Ocak 23, 2015, 01:12:29 ÖÖ Gönderen: i_r_on » Logged

Every imagination is one's self reflection but not every self reflection is imagination. <I.R.on - 2001>

twitter | blog
Simon (Özay Turay)
Yönetici
*****
Mesaj Sayısı: 7.184


Commodore Forever


Üyelik Bilgileri WWW
« Yanıtla #18 : Ocak 23, 2015, 09:33:42 ÖÖ »

Tüm bunları görünce elektronik hakkında ne kadar az şey bildiğimi farkediyorum.

Her zaman derim Keşke Anadolu Lisesi'nde okuyacağıma Endüstri Meslek Lisesi Elektronik Bölümü'nde okuyup yolumu ona göre çizseymişim. Tam benlik işler bunlar da ağaç artık yaş değil, kolay eğilmiyor.

Senin de okuldan gelen bir temelin var, yanılıyor muyum? Bir de mahsuru yoksa  mesleğini öğrenebilir miyim?
Logged

http://www.retrodergi.com - http://www.e-turay.com - http://www.karizmawow.com

Retro: Commodore 64, Amiga 500, Amiga 1200
Retromsu: Wii, XBox360, XBox, PS3 Slim, PS2 FAT, PS1, PS Vita, Nintendo 3DS, Nintendo 2DS
i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« Yanıtla #19 : Ocak 23, 2015, 09:41:13 ÖÖ »

Tüm bunları görünce elektronik hakkında ne kadar az şey bildiğimi farkediyorum.

Her zaman derim Keşke Anadolu Lisesi'nde okuyacağıma Endüstri Meslek Lisesi Elektronik Bölümü'nde okuyup yolumu ona göre çizseymişim. Tam benlik işler bunlar da ağaç artık yaş değil, kolay eğilmiyor.

Senin de okuldan gelen bir temelin var, yanılıyor muyum? Bir de mahsuru yoksa  mesleğini öğrenebilir miyim?

Bilg. müh. okudum, yazılım ile uğraşıyorum. Önemli olan ne okuduğun değil aslında. Bizim bölümden mezun olmuş 50 kişiden 3'ü ya da 4'ü ancak okul sonrası bu bilgileri hatırlayıp kullanmış yahut kullanıyordur. (Destekli sallamadım, doğrudan bizim sınıftan uğraşanları bildiğim için bu rakamı verdim )

Ya da şöyle diyeyim, abim alakasız bir müh. bölümünden mezun. Onun da ilgisi vardı ve ufak tefek şeyler yapmıştır. İlgi meselesi tamamen.

Ha bu arada ben de çok acemiyim hala Analog tarafım külliyen zayıf. Yavaş yavaş pratikle ben de geliştiririm umarım.

Neresi sana karışık geldi bu arada?
Logged

Every imagination is one's self reflection but not every self reflection is imagination. <I.R.on - 2001>

twitter | blog
Simon (Özay Turay)
Yönetici
*****
Mesaj Sayısı: 7.184


Commodore Forever


Üyelik Bilgileri WWW
« Yanıtla #20 : Ocak 23, 2015, 10:45:18 ÖÖ »

Karışık gelen birşey yok aslında da bir ara şu temel mantık işlemlerinde öteye geçerek Adder, BCD, Decoder, Multiplexer, De-Multiplexer gibi konuları incelemem lazım, gerekirse senin yaptığın gibi microcontroller, logic entegreler ve ledler ile sonuç görerek kafamda netleştirmem lazım ne gibi durumlarda kullanılabileceğini.

Bir de bit işlemlerini kullanmak gerek bol bol, yüksek seviyeli diller ile çalışmak insanı köreltiyor, standart işlemlerin dışında işlem kullanamaz hale geliyor insan. Temelde Matematik Bölümü mezunu olduğum için (her ne kadar şu anda memur olsam da) çok sıkıntı olmayacaktır.

Sonuçta dönüyor dolaşıyor zamana bağlanıyor konu. Ama gecenin bir yarısında da olsa bir led doğru koşulda yandığı zaman çok mutlu oluyor insan. Kahkaha
Logged

http://www.retrodergi.com - http://www.e-turay.com - http://www.karizmawow.com

Retro: Commodore 64, Amiga 500, Amiga 1200
Retromsu: Wii, XBox360, XBox, PS3 Slim, PS2 FAT, PS1, PS Vita, Nintendo 3DS, Nintendo 2DS
i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« Yanıtla #21 : Ocak 23, 2015, 11:42:49 ÖÖ »

İhtiyaç üzerine uğraşırsan daha iyi öğrenirsin. Bu nasıl çalışıyormuş dur deneyeyim de öğretiyor ama bilgi elementer düzeyde kalıyor ve sürekli taze olması gerekiyor. Bunların kombinasyonu ile ilgili çok fazla fikir vermiyor sana. Küçük bir proje belirleyip yapmaya çalış bence.

Teori de aynı şekilde sürekli taze kalmalı ki işine yarasın. Örn. geçen counter'lar elime ulaşmamışken dur yav elimdeki flip flop'larla yapayım diye bir araştırdım. Anlatımı yapan yerlerde karnaugh map kullanarak teorisinden çözüyorlardı olayı. Flip flop'lar artı and ve not kapıları kullanılıyordu. Okulda  logic dersinde karnaugh map görmüştük ama nasıl yaptığımızı net hatırlayamadım. Tekrar girmeye üşendim açıkçası, daha pratik bir şeyler aradım ve bir yerde daha pratik olarak mux ile flip flop'ları kombine ederek de counter yapılabileceğinden bahsetmişti. Yani her zaman teori üstünden gitmek yerine pratiğe dönmek daha faydalı olabiliyor

Gerçi ne oldu yaptığım counter devresi çalışmadı Logic analyzer'ım da gelmediği için üşendim debug etmeye, sonra counter'lar geldi zaten.
Logged

Every imagination is one's self reflection but not every self reflection is imagination. <I.R.on - 2001>

twitter | blog
i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« Yanıtla #22 : Ocak 23, 2015, 22:29:26 ÖS »

Bu arada bugün gidip posta dağıtım merkezinden aldım tl866'ımı Çalışıyor canavar gibi.

Bir adet 27c256 üstünden 5 tur antibakteriyel diş fırçası kabı ile geçtim bir kaç yer hariç nerdeyse tamamını sildi. İki tur daha geçersem tertemiz olur herhalde

Şimdilik bir şey yazmayacağım için ram entegrelerini falan test ettim. Sipariş ettiğim 10 adet eprom da gelirse silme işlemleri ile vakit kaybetmeden çalışmaları yaparım. Tabii önce o bacağını eline verdiğim 6510'u tamir edip bacağa sabitleyeceğim kablonun oynama yapmadan duracağı bir break out board tarzı bir şey hazırlamam lazım. Aslında görüntü problemi olan c64'lerden birine de hallenebilirim ama şansımı denemek istiyorum.

Bir an önce işlemci siparişlerini vermek lazım.
Logged

Every imagination is one's self reflection but not every self reflection is imagination. <I.R.on - 2001>

twitter | blog
i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« Yanıtla #23 : Ocak 24, 2015, 03:14:26 ÖÖ »

Bugünün özdeyişi şu : Kodda büyük sıçışlar sağlam debug gerektirir.
Ha bir de telepatik bir durum olduğunu görüyorsan koda çok dikkatli bakacakmışsın. Yanlış kurulmuş devrede bile sonuç düzgün çıkıyor ve buna anlam veremiyorsan sonucu yazdığın yere bakacaksın.

Neyse efendim, proteus'ta cayır cayır çalışan devreyi bugün 12 bit'lik counter ile kurdum. Çalıştırdım, baktım sonucu doğru üretiyor ama hata bulduğunda yaktığım yeşil led de parıl parıl parlıyor.&nbsp; Kodu tekrar incelediğimde telepatik güçlerin kaynağını buldum. Kodda sonucu göstermek için şunu kullanmışım&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;

PORTC = eqVal;

Halbuki benim ram'den okuduğum değer readByte değişkeninde. Neyse efendim kodu düzelttim. Baktım harbiden de saçma sapan değerler okuyorum ram'den gerçek devremde (proteus'ta hala düzgün çalışıyor) O zaman devrede problem var. Ne olabilir ne olabilir derken, 32kb'lik bellek kullandığımı ancak counter'ın yetmediği en anlamlı iki adres bacağını bir yere bağlamadığımı farkettim. 32KB'lik bellekte adres bacakları A0, A1...A13, A14 şeklinde 15 tane. Aslında iki değişik ram kullanıyorum, diğeri bununla pin uyumlu ve 8kb yani bir tane adres bacağını ground'a yani 0'a bağlamam yetiyordu. Breadboard'a düzgün oturmadığı için ondan da kıllandığım için değiştirmiştim.

Neyse efendim sram'in gereksiz olan adres bacaklarını toprağa bağladım. Bu arada data bus'ı yanlış bağladıysam diye programı değiştirdim. Checksum yerine 0-255 arası sayıları yazıp okumaya çalıştım. Pic için doğru delay rutinini de bulup yerleştirdim ve okumaları izlemeye başladım. Bu sefer de okunan sayılar gayet mantıklı birer birer artıyordu ama tüm okumalar hatalı gibi algılıyordu program. Yeni programa bakınca bir hata daha farkettim. Onu da düzeltince yeni program devre üstünde hatasız çalıştı sonunda.

Sonra bakayım tüm 12 bit'le adreslediğim yerlere düzgün yazıp okuyabiliyor muyum diye orjinal programın fix edilmiş halini devrede çalıştırdım. Nihayet o da düzgün çalıştı, doğru sonucu buldu ve bu sefer hataları müjdeleyen yeşil ledi yakmadı.

Böylece projenin önemli bir aşamasını daha atlatmış oldum. Okumaya gerek yok aslında nihai projede ancak yazmanın doğruluğunu test etmek için bunu da yapmak şarttı.

Bu arada devrenin sağını solunu mıncıklamak gerekiyor çalışması için demiştim. Bunun çaresi de benim kaynak olarak aldığım orjinal devrede bulunan direnç ve kapasitör üstünden MCLR hattına yapılan bağlantıymış, reset butonu da bağladım. O kısmı da taktıktan sonra artık kablolarla haşır neşir olmadan çalıştırabiliyorum mereti.

Sırada 6510'u kurtarma çalışması var... 6510'u adam edersek basit bir ses test programını kernal rom'u gibi kullanıp sid'den blip blop duymaya çalışacağım.

ps1 : Bu arada ilk mesajıma tekrar baktım da. Pcb işine olmaz olmaz olmaz demişim, halbuki paralelde çok başarılı olmasa da bu konuda da ilerleme kaydettim aslında. Bu güzel bir şey.

ps2 : Sipariş ettiğim eprom'lar ve logic analyzer da yurda girmiş. Umarım önümüzdeki hafta da onları teslim alırım.

Logic analyzer şöyle bir şey : http://www.aliexpress.com/item/1pcs-New-Arrival-USB-Logic-Analyzer-24M-8CH-MCU-ARM-FPGA-DSP-debug-tool/1710322113.html

7 küsür dolar, dijital devrelerde osiloskopun yerine geçiyor diyebiliriz. Tam sinyali değil zamana göre lojik seviyeleri gösteriyor. Daha önce hiç kullanmadım bakalım ne kadar işe yarayacak.
« Son Düzenleme: Ocak 24, 2015, 03:43:17 ÖÖ Gönderen: i_r_on » Logged

Every imagination is one's self reflection but not every self reflection is imagination. <I.R.on - 2001>

twitter | blog
i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« Yanıtla #24 : Ocak 25, 2015, 18:27:45 ÖS »

Maalesef 6510'un kopuk bacaklarına bağlantı lehimleme çalışması başarısızlıkla sonuçlandı.

6510 yahut 6502'yi tedarik etmem lazım. Aklıma ilk gelen Elimdeki 1541-II drive'ın içindeki 6502'yi çıkarmak. Netten baktığım resimlerde soketli olduğu gözüküyor. Ya da soketli 6502 içeren başka bir cihazdan temin etmek..

Elinde fazladan 6510 yahut 6502 olan varsa ve satabilirse sevinirim

ps1: Dayanamayıp eldeki kuşa bir bakayım dedim ve 1541-II'nin içini açtım. 6502 soketli değilmiş
ps2: Ebay ve aliexpress üzerinde mekik dokuduktan sonra şansıma Türkiyede UM6502 satan bir yer buldum ve oradan sipariş verdim. Allahtan Ebay'de 6502'nin bulgar klonunu satan eleman ilanında 5 adet alıma sınır koymuş. Yoksa oradan alıp bekleyecektim. (Buradan aldığımı beklemem inşallah )  28 pin ve 40 pin zif soket de sipariş ettim. Bu entegrelerin bacaklarına iyi bakmak lazım.
« Son Düzenleme: Ocak 25, 2015, 22:27:45 ÖS Gönderen: i_r_on » Logged

Every imagination is one's self reflection but not every self reflection is imagination. <I.R.on - 2001>

twitter | blog
i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« Yanıtla #25 : Ocak 26, 2015, 01:21:22 ÖÖ »

6502'leri beklerken diğer işlerle biraz ilgileneyim dedim. Öncelikle sd kart erişim olayını biraz araştırdım, sd kart ile spi üzerinden haberleşme için örnek kodlar buldum. Mplab kullandığım için adapte etmek zorunda kalacağım muhtemelen bazı kısımlarını. Sd kart için 3.3v regülatör lazım, ayrıca sd kart konnektörü lazım.

Bu arada araştırmalarım sonucunda 8 bit micro'lar için filesystem işine pek girişilmemiş gibi gördüm. 16f877'de 368 byte ram var aslında yeterli gibi okuma yapmak için ki hali hazırda sram'e yazacağım için büyük bir buffer'a falan da ihtiyacım yok benim. Petit fs içinde bit banging ile SPI yapan generic bir kod örneği de var. XC8 ile nasıl sonuç verir derlenmesi görmek lazım. Aslında forumları okuduğumda filesystem kullanmam sektör sektör özel bir formatta raw bir şekilde okurum diyordum ama derleme işleri hallolduktan sonra filesystem de kullanabilirim gibi. Derleme işleri zora girerse ya compiler değiştirilecek ya da raw erişim çözümüne döneceğim.

Proteus bu anlamda büyük nimet, sd kartı bilgisayardaki bir dosyaya yönlendirebiliyorsun, sram'ın da içeriğini görebiliyorsun. Mikroyu doğru programlamaya ve basitçe devreyi çizmeye kalıyor iş. Yazılım kısmını halletmek için çok güzel ortam sağlıyor.

Sd card araştırmasından sonra ikinci sid test rutini ile ilgilendim. Sid'in referans uygulamasında ilk testi sram kullanmadan sadece eprom ile yapmaya karar vermiştim. Sıfırdan bir şey yazmama gerek kalmadı, örnek olarak faydalandığım projede elemanın kullandığı ufak bir sid test rutini vardı. Bunu 6502 simulator & debugger'da yazıp derledim ve kernal.rom'u haline getirdim.

Program şu

Kod:
*=$FF00

LDA 3
STA $d418
LDA #$be
STA $d405
LDA #$f8
STA $d406
LDA #$18
STA $d400
LDA #$0E
STA $d401
LDA #$11
STA $d404
HOP CLC
BCC HOP

.ORG $FFFC

.BYTE $00, $FF

CCS64'ün altındaki rom dosyasını bu dosya ile değiştirip test ettim. Program kare dalga kullanarak ses çıkarıyor. Referans uygulamayı yaptığımda bu sesi duymayı bekliyorum.

Bu testi yapmadan önce halletmem gereken 2 mevzu daha var.

1. Clock sinyali : Ben işlemciyi 2mhz ile çalıştırırım diyordum ama sid'i unutmuşum. 2mhz desteklediğine dair bir bilgi bulamadım. Muhtemelen flip flop kullanarak 4mhz'i 2mhz'e indirmeyi bir adım öteye götürüp 4mhz'yi hali hazırda devreye 12 bit'i 16 bit'e tamamlamak için ekleyeceğim dual 4 bit counter'lardan boşta kalan birini kullanıp elde edeceğim.

counter'ın 0 nolu çıkışı her clock sinyalinde 0 ile 1 arasında gidip geliyor. Sinyali buradan almak demek frekansı 2'ye bölmek demek. 1 nolu çıkıştan alırsak da 4'e bölmüş olacağız.


2. 6502/6510 için reset sinyali. Orjinal uygulamalarda reset bacağına yarım saniyelik tek bir pulse gönderiliyor. Bu da 555 entegresi ile oluşturulmuş bir devre yardımı ile yapılıyor. Projenin finalinde reset bacağını pic ile kontrol etmeyi düşündüğüm için 555 kullanmama gerek yok. İlk test için de bu devre yerine elimdeki 16f84'lerden birini kullanmayı düşünüyorum. Çıkış bacaklarından birini yüksek seviyedeyken yarım saniye boyunca düşük seviyeye geçirmek sonra tekrar yüksek seviyeye çekmek yeterli olacak.

Şuradaki c64'ün servis kitabındaki 5. sayfada bahsettiğim devre mevcut.
http://www.bombjack.org/commodore/commodore/C64-C64C_Service_Manual_314001-03_%281992_Mar%29.pdf
Logged

Every imagination is one's self reflection but not every self reflection is imagination. <I.R.on - 2001>

twitter | blog
joker_
Genel Yönetici
*****
Mesaj Sayısı: 2.122



Üyelik Bilgileri
« Yanıtla #26 : Ocak 26, 2015, 08:01:58 ÖÖ »

i_r_on, paylaşımların için çok teşekkürler. Proje ait içeriklerde çok güzel bilgiler veriyorsun. İlgiyle takip ediyorum
Logged
AmigaMan
Deneyimli
*****
Mesaj Sayısı: 610



Üyelik Bilgileri
« Yanıtla #27 : Ocak 26, 2015, 08:33:23 ÖÖ »

Emeklerin bizler icin degerli birer altin bilezik tesekkurler
Logged

Amiga ölmedi, efsane uyuyor
i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« Yanıtla #28 : Ocak 28, 2015, 00:02:53 ÖÖ »

@joker, @AmigaMan : Sağolun, ben de aslında bir yandan öğreniyorum. Bu esnada sizlere yanlış yahut eksik bilgiler de verebilirim, kusura bakmayın. İdeali yapmak yerine biraz kolaya kaçmayı seviyorum herhalde. Benim çözümlerime biraz da o gözle bakın. Pic'lerle bu şekilde bir Sram entegrasyonunu görmedim misal, tembellikten fantaziye kaçtım biraz. Bu şekilde erişim otomatikman counter'ların yavaşlığını bellek erişimine ekliyor, bellek erişimi bir kaç kat yavaş oluyor. Max 64k doldurmak için benim devremde önemli değil ancak ses kaydetme çalma gibi işlerde bu hız yetmeyebilir.

Bu arada dün elde yeni malzeme olmadığı için elimdeki dandik ancak çok akım çekmeyeceğini bildiğim speaker'ı test etmek istedim. Başarısız bir deneme oldu, speaker'dan gürültü şeklinde sesler elde ettim daha çok. Elimdeki tek olan 16f877'yi harcamayayım dedim belki başarılı olursa ucu bir oyuncağa falan gidebilir diyerek elimdeki 16f84'lere 12+3=15 bit counter ile eprom'a (27C256) bağladım. Eprom'a da raw 8 bit bir ses kaydı koydum yaklaşık 15k'lık.

Önce PWM yapmayı deneyerek tek bir output bacağından sürmeye çalıştım speaker'ı. Hışırtı hariç bir şey duyamadım. 16f84 üzerinde ya da başka bir DAC entegre olarak olmadığı için direnç merdiveni yöntemi ile 3 bit çalayım bari dedim. O da yemedi. Artık ses kaydının formatı mı özel onu araştırmam lazım. Daha sonra 16f877'nin üzerindeki DAC ile tekrar deneyeceğim.

Neyse, yeni malzemeler elime ulaştı bugün. Şu şekilde,



Referans sid uygulamasını yapmayı deneyeceğim bugün. Aklıma address decoding'i bertaraf etmek için yine kaçak bir yöntem geldi. Daha önce paylaştığım minik assembly programında sid'in base adresini $D400 adresi yerine $8000'den küçük herhangi bir 32 byte'lık sayfadan kullanacağım. Eprom'a erişim sadece $FF00-$FF23 adreslerinden ve $FFFC-$FFFD adreslerinden olacağı için sid için tüm adresi decode etmek yerine adres hattının en anlamlı biti olan A15'in 1 olup olmadığını anlamak yeterli olacak. Sid'in CS sinyali low active yani 0 gönderdiğimizde sid'i enable edecek. Herhangi bir inverter'a vesaireye de böylece ihtiyaç olmayacak. A15'i doğrudan Sid'in /CS hattına bağlayabilirim.

Eprom'un CS sinyali de low active, eprom'a erişimler hep F (1111) ile başlıyor. Burada aynı üç kağıt yemiyor ne yazık ki. Eprom'da kullanılan adreslerde değişmeyen bir bit bulursam sid'i A15'in 0 olduğu ve o bit'in de sıfır olduğu bir adrese yerleştirmem durumunda Eprom'un CS sinyalinde kullanabilirim. Devreden bir inverter eksik edeceğiz de daha az elemanla test yapacağız diye attığımız taklalara bak.

Bunun için $00-$23 aralığını ve $FC-$FD sayılarını 8 bit binary olarak bir yazıyorum. Hissiyatım aradığım bit'in A6 olduğunu söylüyor bu arada.

A7 - A0 arası
$00 - 00000000
$01 - 00000001
..
$07 - 00000111
$08 - 00001000
$09 - 00001001
...
$0F - 00001111
....
$23 - 00100011

Bunların haricinde

$FC = 11111100
$FD = 11111101

Yanlış hesap. O inverter devreye girecek anlaşılan Adreslerde 0'dan 1'e değişimin olmadığı hiç bir bit yok. Cold reset vektörünün adreslenen bölgenin en sonuna yerleştirilmiş olması işimizi bozdu. Kod ardışık yazıldığı için mecbur en alt 5 bit'te hem 1'ler hem 0'lar var.&nbsp; $FC - $FD adresleri el mahkum kullanılıyor çünkü işlemci kullanıyor bu adresleri. Bu iki değerde göze çarpan düşük anlamlı 2. sıradaki bit'in sıfır olması. Kodu bu bitin hep sıfır olduğu adreslere yazarsak olabilir. Ancak bu da mümkün değil zira üç byte tutan STA komutları kullanmak mecburiyetindeyiz. Hadi zero page'i de bir şekilde kullandın ve 2 byte ile yazdın diyelim. Peşine dallanmak gerekecek...

Neyse tembellik başa bela, o inverter devreye girecek

İşe clock sinyali ile başlamayı düşünüyorum. Yeni gelen logic analyzer'ı test etmek için çok iyi bir fırsat bu.


ps : Logic analyzer beklediğimden tırt çıktı... Ya da ben bir şeyleri yanlış yaptım... İlk baktığımda counter'ı eklemeden devre 4mhz clock üretiyordu. Sonra counter'ı ekledim, doğru düzgün sonuç vermedi.  Sonra bir ara devreyi baştan yaptım counter'sız hali 12Mhz verdi... sonra da hiç sinyal alamadım. En iyisi devreyi proteus üstünde bir denemek. Clock sinyalini üretme kısmında kaldık anlayacağınız.




* 20150127_230058.jpg (63.08 KB, 800x450 - Görüntüleme: 3267 kez.)
« Son Düzenleme: Ocak 28, 2015, 02:18:35 ÖÖ Gönderen: i_r_on » Logged

Every imagination is one's self reflection but not every self reflection is imagination. <I.R.on - 2001>

twitter | blog
i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« Yanıtla #29 : Ocak 28, 2015, 22:38:47 ÖS »

Biraz geç oldu ama 1mhz'i üretmeyi başardım
Sorun counter'ın low active MR yani Master Reset bacağını toprağa bağlamamış olmam imiş. Başka bir noktadan sorunu yakalamaya çalışırken şurada cümle arasında görüp tespit ettim. http://electronics.stackexchange.com/questions/44786/hef4060b-counter-doesnt-count

Eleman MR'yi ground'a bağladım, vesaire vesaire yaptım demiş.. Lan ben bağlamadım dedim Daha önceki kullanımlarda MR bacağını Pic'e bağlamıştım. O zaman gerçekten sıfırlama amacıyla idi. Sıfırlama amacı olsun olmasın bağlamak lazımmış. Daha önce adres bacağını sıfırlamadığım için yediğim golden sonra bu da çalıştığım yerden geldi.

Logic analyzer'da şöyle gözüküyor. En üstteki 4mhz crystal'den ürettiğim sinyal. Sırasıyla alttakiler, 2mhz, 1mhz, 500khz şeklinde gidiyor. Bu arada epey komplike bir devre oluşuyor board'da sırf osilatör için. Şu dört bacaklı osilatörlerden kesin almam lazım.



ps: Sırada reset devresi var. Bunda vakit harcamam umarım.


* 1Mhz.png (42.45 KB, 860x429 - Görüntüleme: 3052 kez.)
« Son Düzenleme: Ocak 28, 2015, 22:42:06 ÖS Gönderen: i_r_on » Logged

Every imagination is one's self reflection but not every self reflection is imagination. <I.R.on - 2001>

twitter | blog
Sayfa: 1 [2] 3 4 ... 14   Yukarı git
Yazdır
Gitmek istediğiniz yer: