commodore.gen.tr

Genel Kategori => Proje => Konuyu başlatan: i_r_on üzerinde Aralık 01, 2016, 00:41:17 ÖÖ



Konu Başlığı: Mini proje - Arduino sid player
Gönderen: i_r_on üzerinde Aralık 01, 2016, 00:41:17 ÖÖ
Daha önceki sid player projemi belki hatırlayanlar olacaktır. Aşağıdaki linkte :
http://www.commodore.gen.tr/forum/index.php?topic=9562.0 (http://www.commodore.gen.tr/forum/index.php?topic=9562.0)

O projede tamamen çalışan bir mini 6502 temelli bilgisayar ile sid çipini kullanarak sid çalma amacı ile yola çıkmıştım. Epey bir yol katettikten sonra iş devreyi pcb haline getirme aşamasında tıkanmıştı.

Geçenlerde forumdan Volkan (Voltron) arkadaşımız sid çipi olmayan c64'leri için swinsid imal ettiğini ancak çalışmalarında bir sıkıntı olduğunu ve yardım edip edemeyeceğimi sordu. Daha önce swinsid ile cebelleştiğim için yardımım dokunabileceğini düşünüp zevkle kabul ettim. Tembel bir adam olduğum için tabii şeytan direkt dürttü. Gelecek swinsid'i c64'e takmadan deneyeceğim bir devre yapsam ya diye düşündüm.

Gerçi swinsid'in çalışmama sebebini anlama aşamasına iş pratikte yine tembellikten ötürü dönüşemedi zira swinsid board'ları breadboard üstünde kablolamaya pek müsait değildi. Sorunu hali hazırda tespit edip c64'de de denediğim için o konu kapandı. Ancak fikir mini bir projeye dönüştü.

Yine tembellikten, hali hazırda daha önceki sid player için yaptığım swinsid katını kullanmak geldi aklıma. Arduino'dakine benzer iki yanına dişi header'lar koyulmuş bir board bu. Orjinal projede bir katta bellek, bir katta rom, bir katta da cpu var, buna ek ıvır zıvır falan var. Alttaki resimde soldaki board.

(http://www.commodore.gen.tr/forum/index.php?action=dlattach;topic=13412.0;attach=18326;image)

Bunun üstüne orjinal projedekine göre nispeten basit bir arduino katı çıkarsam kontrol ederim diye düşündüm. Yeni mini projede mantık şu : Bilgisayarda basitçe 6502 emülasyonu ile sid'lerin register dump'ları üretilebiliyor. Hatta bir amcam uğraşıp bunları fazla boyut kaplamadan saklayacak bir yöntem de geliştirmiş.

Tartışması şurada : https://www.ist-schlau.de/phpBB3/viewtopic.php?f=8&t=11 (https://www.ist-schlau.de/phpBB3/viewtopic.php?f=8&t=11)

Bunu alayım, arduino'da bir timer interrupt ile swinsid'e 5 adres pin'i ve 8 data pin'ini kontrol ederek boca ederek sid çalayım diye düşündüm. Yarın öbür gün istenirse gerçek sid de kullanılabilir. Gerek yaşın ilerlemiş olması, gerek audiophile olmamam gerekse de bir sid çipini daha öldürebilme ihtimali bana swinsid kullanmayı dikte ediyor orası ayrı.

Arduino'daki i/o pin'leri nihayetinde bana yetmez diyerek 74hc595 serial in parallel out shift register da sokuşturdum işin içine.

Düşünce güzeldi. Ancak uygulamada yeni yaptığım arduino pro mini / sd modül ve shift register içeren board üstünde shift register'ın pin'lerini aynalanmış bir şekilde ters lehimlediğimi anlayınca bir dizi hata ayıklama evresinden sonra ve 2 adet shift register'ı yaktıktan sonra çiplerin bacaklarını tersine çevirip sokete öyle sokuşturma gibi aktivitelere girmek durumunda kaldım :)

Bir süre de swinsid'in açılıştaki 1000hz'lik karşılama tonunu almak ile cebelleştim. Sorun çok daha önceden swinsid kullanırken yaşadığım sorunun aynısı çıktı. Low fuse bit'ler doğru set edilmediği için tırmalamış durmuşum yine. Hatta elimde hali hazırda çalışan programlanmış atmega çip varken de nasıl becerdiysem yanlış programlanmış olanı ile hata ayıklama işine de girişmiş ve farklı hataları kovalamışım.

Bu işi de hallettikten sonra en son konu blip blop'lar seviyesine geldi ve bugün de en nihayetine swinsid'e giden /CS sinyali ile shift register'ın /OE sinyalini ayırınca mutlu sona ulaşabildim. Daha pek tabii hem yazılımsal hem de donanımsal olarak olarak düzeltilmesi gereken bir sürü şey var. Buradan yürüyüp devam eder miyim bilmiyorum. Daha güçlü bir işlemcisi olan bir mikro işlemci ile (stm yahut esp) 6502 ve cia'yı emüle eden bir çözüm bir sonraki proje olur muhtemelen.

Sonuç aşağıdaki videoda olduğu gibi.

hsH4dj_-tVU

Zımbırtının bitmiş hali

(http://www.commodore.gen.tr/forum/index.php?action=dlattach;topic=13412.0;attach=18328;image)

74HC595 entegreye dikkat, pin'ler ters tarafına kıvrılmış halde :)


Referans olması açısından arduino kodu aşağıdaki şekilde. Önceki sid player'dan kalan Sidplay playlist özelliği de var ancak henüz entegre etmedim. Kodu buraya yapıştıramadım site dağılıyor,

http://pastie.org/10973604 (http://pastie.org/10973604)



Konu Başlığı: Ynt: Mini proje - Arduino sid player
Gönderen: atlantis üzerinde Aralık 01, 2016, 07:10:59 ÖÖ
Eline sağlık. Böyle bir projenin olgunluğa ulaşmasını bekliyordum bende. Sid çipinin 85 li versiyonu vardı sanırım. Onda da çalışabilir mi peki?


Konu Başlığı: Ynt: Mini proje - Arduino sid player
Gönderen: kaizen71 üzerinde Aralık 01, 2016, 07:59:21 ÖÖ
Ellerinize sağlık çok güzel bir proje olmuş. Bu forumda böyle kaliteli çalışmalar olması çok güzel.


Konu Başlığı: Ynt: Mini proje - Arduino sid player
Gönderen: Simon (Özay Turay) üzerinde Aralık 02, 2016, 20:50:47 ÖS
Eline emeğine sağlık. ;)

Kodda birşey dekkatimi çekti benim. ReadLine(file) fonksiyon olarak değil de makro olarak tanımlamışsın. Anlam veremedim. ::)

Edit: Hatta bu şekilde çok satırlı #define yapılabildiğinin bile farkında değildim. :D


Konu Başlığı: Ynt: Mini proje - Arduino sid player
Gönderen: eins üzerinde Aralık 02, 2016, 21:04:16 ÖS
Eline sağlık. Konu mankeni olarak jeroen tel /supremacy kullanarak beni benden aldın. En sevdiğim sid. Bu proje clonelanır tabiki pic ile ;)


Konu Başlığı: Ynt: Mini proje - Arduino sid player
Gönderen: Simon (Özay Turay) üzerinde Aralık 02, 2016, 21:07:24 ÖS
74HC595 entegreye dikkat, pin'ler ters tarafına kıvrılmış halde :)
Ha ha ha. Bunu farketmemişim. Dead bug style'a yeni bir anlam kazandırmışsın. :D


Konu Başlığı: Ynt: Mini proje - Arduino sid player
Gönderen: i_r_on üzerinde Aralık 02, 2016, 21:16:07 ÖS
Parametreli makro o. Burada niye kullandım hatırlayamadım. Muhtemelen ilk yazdığımda satır buffer'ını global değişken yapıp heap'ten yemiyeyim diye olabilir. Daha çok doğal inline kod olarak kullanıyorum. Bazen inline yazsan da compiler onu fonksiyon çağrısı olarak compile ediyor. Burada gerçi performans yahut timing o kadar önemli değil.

Bazen böyle copy paste'lerle kod context değiştirdiğinde anlamsızlaşıyor.

Arduino'nun serial.print'i falan cacık bazen ondan sebep de böyle atraksiyonlara girmek gerekebiliyor.


Konu Başlığı: Ynt: Mini proje - Arduino sid player
Gönderen: i_r_on üzerinde Aralık 19, 2016, 00:05:39 ÖÖ
@atlantis : Sorunu cevaplamayı atlamışım yeni farkettim. Swinsid yerine 8580 yahut 6581 bağlanabilir. Pek tabii onların kendilerine ait farklı destek devreleri olması lazım. 9v yahut 12v besleme gerekiyor, filtre kapasitörleri ve pal ve/veya ntsc için osilatör lazım.

Bu apartman tarzında aslında hepsini bir arada kullanmak mümkün. Devreyi 12v ile besleyip 9v ve 5v elde edilebilirse. Header'lar üstünde her bir sid/swinsid board'u için ayrı chip select hattı oluşturup 2 tane yahut 3 tane sid/swinsid sürülebilir.



Konu Başlığı: Ynt: Mini proje - Arduino sid player
Gönderen: atlantis üzerinde Aralık 19, 2016, 07:27:16 ÖÖ
Sağol. O zaman beni aşar şu an için. Zamanla değişiklik olursa bende denemeye çalışırım artık.