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)
commodore.gen.trGenel KategoriProjeMini proje - Arduino sid player
Sayfa: [1]   Aşağı git
Yazdır
Gönderen Konu: Mini proje - Arduino sid player  (Okunma Sayısı 8422 defa)
0 Üye ve 1 Ziyaretçi konuyu incelemekte.
i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« : 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

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.



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

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.



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



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



* IMG_1813.JPG (92.29 KB, 640x480 - Görüntüleme: 3363 kez.)

* IMG_1893.JPG (101.46 KB, 640x480 - Görüntüleme: 3129 kez.)
« Son Düzenleme: Aralık 01, 2016, 00:55:11 ÖÖ 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
atlantis
Uzman
*****
Mesaj Sayısı: 2.117



Üyelik Bilgileri WWW
« Yanıtla #1 : 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?
Logged

Truva Linux
http://www.truvalinux.org.tr
http://retromiga.blogspot.com
--------------------------------
Banana ARM Türkiye Destek Sitesi
https://www.bananapi.gen.tr
kaizen71
Üye
***
Mesaj Sayısı: 209



Üyelik Bilgileri
« Yanıtla #2 : 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.
Logged
Simon (Özay Turay)
Yönetici
*****
Mesaj Sayısı: 7.751


Commodore Forever


Üyelik Bilgileri WWW
« Yanıtla #3 : 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. Masum

Edit: Hatta bu şekilde çok satırlı #define yapılabildiğinin bile farkında değildim. Kahkaha
« Son Düzenleme: Aralık 02, 2016, 21:00:26 ÖS Gönderen: Simon (Özay Turay) » Logged

https://retrodergi.com - https://e-turay.com - https://karizmawow.e-turay.com

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


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #4 : 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
Logged

Doberman ♦ megaOne ♦ HDMI-64 ♦ HDMI-520 ♦ NewSchool
Simon (Özay Turay)
Yönetici
*****
Mesaj Sayısı: 7.751


Commodore Forever


Üyelik Bilgileri WWW
« Yanıtla #5 : 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. Kahkaha
Logged

https://retrodergi.com - https://e-turay.com - https://karizmawow.e-turay.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 #6 : 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.
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 #7 : 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.

Logged

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

twitter | blog
atlantis
Uzman
*****
Mesaj Sayısı: 2.117



Üyelik Bilgileri WWW
« Yanıtla #8 : 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.
Logged

Truva Linux
http://www.truvalinux.org.tr
http://retromiga.blogspot.com
--------------------------------
Banana ARM Türkiye Destek Sitesi
https://www.bananapi.gen.tr
Sayfa: [1]   Yukarı git
Yazdır
Gitmek istediğiniz yer: