raspberry pi zero tabanlı oyun konsolu (lm386 ses amfisi ile)





raspberry pi zero uygun fiyatı ile bir çok projede kullanılmakta. Bu projelerden biri de retro (eski oyun makinelerinin oyunlarının oynandığı) oyun konsolu. Net'te göz attığımızda ufak ili9341 tabanlı 2.4", 2.8" spi ekranları kullananların yanısıra 3.5" geri görüş monitörünü ekran olarak kullananlar da var.  Arduino ile kullanılan ili9341 2.4" paralel girişli ekranları kullanmak mümkün gözüküyorsa da denendiği bir proje bulamadım. Bu yazıda kendi konsol denememi dökümante etmeyi amaçladım.



Kullanılan malzemeler:
4.3" lcd
4.3" lcd kompozit giriş kontrol kartı (datasheet)
raspberry pi zero
usb 2.0 hub
deneme için usb oyun kolu (ps3 uyumlu)
lm386 tabanlı amfi

Raspberry pi zero için yorum yapmama gerek yok sanırım. LCD ekran, bu ekrana uyumlu giriş kartı'nı yukarıdaki linklerden inceleyebilirsiniz.  Kontrol kartı datasheet'inde dikkatimi çeken nokta ekranın dpi (yani paralel) olması dolayısıyla bu ekranı gpio üzerinden pi'a direkt bağlamak da mümkün görünüyor (!denemedim!) . Tabi ekranı direkt bağlamak için uygun bir konnektör ve buna uygun pcb yapılması gerekiyor. Ancak bu durumda pi'ın gpio'larının çoğu kullanılacağı için projenin son halinde kontrollerin gpio'lar üzerinden bağlanması zor hale gelmekte. Bahse konu kontrol kartı kompozit girişten bağlandığı için pi zero'ya sadece 2 pin'le bağlanmakta, buda gpio'ları istediğimiz gibi kullanbilmemiz için serbest bırakmakta. Ancak görüntü keskinliğinin düşük olduğunu hatırlatayım. Bu kontrol kartı üstünde 12V hatta daha yüksek (24V) gibi voltajları kartın çalışma voltajına (3.3V) çevirecek bir smps entegresi (LSC LSP5528) mevcut. Kartın datasheet'ine göre smps 5V ile beslendiğinde 3.3V sağlayabiliyor. Kartın güç pinlerini pi'ın 5V pinlerine bağladığımda gayet güzel çalıştı.  Ayrıca bu kontrol kartına renk ve parlaklık ayarı için 2 adet trimpot takmam gerekti. Trimpot kontrol header'ında 3.3V ve GND bağlantıları var, ancak pi'ın 3.3V pinlerinden kartın bu 3.3V pinlerini beslediğimde lcd çalışmadı, belki de backlight (arka ışık) için smps'den gelen daha yüksek bir voltaj gerekiyor olabilir.


Hafıza kartına recalbox 6.0 Dragonblaze kurduktan sonra bu ekranla ilgili pi zero hafıza kartı BOOT bölümü config.txt dosyasındaki değişiklikler şunlar:

# uncomment this if your display has a black border of unused pixels visible
# and your display can output without overscan
disable_overscan=0
overscan_scale=1

# uncomment the following to adjust overscan. Use positive numbers if console
# goes off screen, and negative if there is too much border
overscan_left=-10
overscan_right=0
overscan_top=-32
overscan_bottom=-16


#sdtv aspect 16:9(3)
sdtv_aspect=3


usb hub'a gelince: sırdan bir usb 2.0 hub'ı alıp bağlantı kablosunu kestiğim bir mikro usb data kablosu ile değiştirdim. Böylece pi zero'ya usb oyun kolunu takabildim. Mikro usb girişli hublar da var ancak fiyatları daha yüksek. Tabii bunun yerinde bir mikro usb otg kablo kullanmakta mümkün ancak bu durumda oyun kolu dışında başka usb cihaz takmak mümkün olmayacaktır.


Amfiye gelince gördüğüm projelerde PAM8403 amfi kartı kullanılmış. Tabi bu amfi öncesinde gpio çıkışına band pass filter (low pass filter ve high pass filter) konulmış. Low pass filter 270 ohm direnç ve 33nF kapasitör, high pass filter ise 10mF kapasitör ve 150 ohm direnç kullanılarak oluşturulmuş. Ben elimde bulunduğu için klas D amfilere göre verimliliği düşük olsa da LM386'yı kullanmayı tercih ettim. Bunun için devre şeması ve pcb dizaynını aşağıda bulabileceğiniz oldukça küçük bir kart tasarladım. Amfinin tasarımında http://www.circuitbasics.com/build-a-great-sounding-audio-amplifier-with-bass-boost-from-the-lm386/ adresindeki bir devre şemasını datasheet'e uygun biraz değiştirerek kullandım.

eagle dosyaları








pi zero gpio ses konusunda arama yaparsanız gpio üzerinden ses almak için hazırladığınız hafıza kartının BOOT bölümündeki config.txt dosyasında bir takım değişiklikler yapmak gerektiğini görürsünüz. Benim değişikliklerim şöyle:

#pwm-audio on gpio 18 and 13
##dtoverlay=pwm-2chan,pin=18,func=2,pin2=13,func2=4
dtoverlay=pwm,pin=13,func=4
disable_audio_dither=1
audio_pwm_mode=1


Böylece gpio13 üzerinden mono çıktı alabiliyoruz, stereo çıkış ihtiyacımız olmadığı için gpio 18'i işgal etmeye gerek yok. audio_pwm_mode=1 ve disable_audio_dither=1 ise gpio ses çıkışındaki müthiş distorsiyonu azaltmak için. Böylece kabul edilebilir kalitede bir ses alabiliyoruz.

Şu ana kadar yaptığımız konfigürasyonla pi ekrana görüntü veriyor, ancak emulatörde bir  oyun açtığınızda görüntü kayboluyor. Bunun nedeni recalbox.conf dosyasındaki bir ayarın pi'ı hdmi moduna alması. bunun için bu ayarı değiştirmemiz gerekiyor. recalbox.conf dosyasını pi'a samba (windows ağ paylaşımı) üzerinden bağlandığımızda /recalbox/share/system/recalbox.conf 'da bulabiliriz. Pi zero kullanıyorsanız ve herhangi bir usb network kartı takmadıysanız hafıza kartında bu dosyayı bularak değiştirebiliriz. Recalbox imajını karta ilk yazdığımızda mikro sd-kartta BOOT ve RECALBOX bölümleri (partition) oluşmakta. İlk çalıştırmamızda recalbox kartta SHARE bölümünü oluşturmakta ve RECALBOX bölümündeki /recalbox/share_init/system/recalbox.conf dosyasını SHARE bölümünde /system/recalbox.conf dosyasına kopyalamakta. Eğer SHARE bölümü henüz oluşturulmadıysa RECALBOX bölümündeki /recalbox/share_init/system/recalbox.conf dosyasını, SHARE bölümü oluşturuldu ise buradaki /system/recalbox.conf dosyasını değiştirmemiz gerekiyor. Değiştireceğimiz ayar global.videomode=CEA 4 HDMI bunu global.videomode=auto yapmamız yeterli. Bazı kaynaklarda global.videomode=default tavsiye edilmekte ancak bu durumda deneme maksatlı pi'ı hdmi monitöre bağladığınızda oyunlar çalışmayabilir.


Nihayet bitirdim. Ve bir sonraki yazıda huzurlarınızda ...

Yorumlar

Popüler Yayınlar