18F4620 ile SD Kart Kullanarak WAV Player Program
18F4620 ile SD Kart Kullanarak WAV Player Program |
Yazar: Tarık Konca
Mikro denetleyici uygulamalarında bence en mantıklı olan son çözüm sd (mmc) kart kullanmak. Daha önceki yazımda i2c eeprom kullanmıştım. 24C512 kolay bulunabiliyor.
Daha yüksek hafızası olan 24C serilerinden 8196 kadar var fakat zor bulunuyor ve fiyat hafıza karşılaştırması yapıldığında SD kart her zaman daha avantajlı. SD kart kullanmanın tek dezavantajı sd kart yuvasının zor bulunması ve 15 lira civarında olması. SD kart yuvasını yeni aramaktansa USB den kullanılan sd kart okuyucu alıp kart yuvasını sökmek daha iyi bir çözüm. Yada eski PC boardlarına bulunan isa kart yuvasını sokup keserek kullanabilirsiniz
Aslında mikro denetleyici ile hard disk okunup yazılabiliyor. Fakat bu tip bir uygulamada sadece hard disk bağlantısı için 30 yakin port kullanılıyor. PCB çizimi zor ve uğraştırıcı ayrıca hard disk çalışırken sd karta göre çok fazla güç harcıyor.
SD kart wav player uygulamasında proton basic , Swordfish basic ve mikro basic derleyicileri kullandım.
ccs c ve ansii c tabanlı diğer diğer derleyiciler için olan SD kart kütüphanelerini denedim fakat tam net sonuçlar alamadım. Bazıları SD kartı kurarken bazıları da fat dosya sisteminden okurken hata verdi fakat proton , Swordfish ve mikro basic derleyicilerinde herhangi bir sorun olmadı.
Mikro basic de SD kartı kurarken devreye ilk elektrik bağlantısı yapıldığında kuramıyor fakat mclr ucuna bağlayacağınız reset tuşuna bastığınızda kuruyor fat okumada sorun yok.
Program mikro denetleyicinin donanımsal spi veri yolu üzerinden sd(mmc) kartı kurar ve verilen dosya ismindeki dosyayı fat dosya sisteminde bulup ilk baytından okumaya başlayıp
portd ye okunan baytı eşitler. Portd üzerine bağlayacağınız r2r devreside dijital bilgiyi analog bilgiye dönüştürür. Sesi dinlemek için lm386’lı basit yükselteç yapmanız gerekiyor. Programda dosya sonu kontrolü vardır. Mikro denetleyicide 10 mhz kristal kullanılıp x4 pll açılıp mikro denetleyici 40 mhz de çalıştırılmıştır. Kullanılan komutlarla ilgili açıklama yazmadım derleyicilerin yardım dosyalarında açıklamalar var.
Proton basic’de dahili sd kart ve fat kütüphanesi bulunmuyor. Derleyicinin sitesinde plugin olarak veriliyor. Sitesinden gerekli plugini ve plugin için gerekli eklentileri kurmanız gerekiyor. Swordfish ve mikro basicde bu sorun yok. Dosya isimleri program ve sd kart üzerinde 7 karakter nokta wav formatında olmalı ve büyük harflerle yazılmalıdır. SD kartınızı fat olarak formatlamalısınız. Ses dosyasının formatı 8 bit 8 khz pcm mono olmalıdır. Ses dosyası formatını hazırlamakla ilgili Antrak Gazetesi temmuz 2012 sayısındaki yazımı okuyunuz.
Proton Basic Kodları:
Reminders = OFF
Device = 18F4620
Xtal = 10
PLL_Req = TRUE
TRISA=0
All_Digital = TRUE
TRISD=0
Symbol SD_CS = PORTC.2 ‘SPI CS to SD CS (SD pin 1)
Symbol SD_DI = PORTC.5 ‘SPI DO to SD DI (SD Pin 2)
Symbol SD_CLK = PORTC.3 ‘SPI CLK to SD CLK (SD Pin 5)
Symbol SD_DO = PORTC.4 ‘SPI DI to SD DO (SD Pin 7)
Include “mmc_lib.pbp” ‘Include managed library file
Dim Response As Byte
DelayMS 200
Main_Prog:
Repeat
Response = SD_Init_FS_MSSP SD_SPI_FOSC_04
Until Response = 0
winamp:
SD_File_Name = “WINAMP_”
SD_File_Ext = “WAV”
Response = SD_Open_File
If Response = 1 Then
Stop
EndIf
PORTA.0=1
While SD_EOF < 1
PORTD = SD_Read_Byte_From_File
DelayUS 115
Wend
Finish:
PORTA.0=0
Stop
Swordfish Basic Kodları:
//Device = 18F452
Device = 18f4620
Clock = 40
Config OSC = HSPLL ‘ Set 4x PLL on (10 MHz crystal * 4x = 40 MHz)
#option SD_SPI = MSSP // use hardware SPI
Include “SDFileSystem.bas”
TRISD = 0
PORTD = 0
DelayMS (1000)
If SD.Init(spiOscDiv4) Then
If SD.OpenFile(“WINAMP_.WAV”) = errOK Then
Repeat
PORTD = SD.ReadByte()
DelayUS (115)
Until SD.EOF
SD.CloseFile
EndIf
Dur:
Goto dur
EndIf
Mikro Basic Kodları:
program mmc_kart
dim
Mmc_Chip_Select as sbit at LATC2_bit ‘ for writing to output pin always use latch (PIC18 family)
Mmc_Chip_Select_Direction as sbit at TRISC2_bit
dim filename as string[14] ‘ File names
dim character as byte
dim size as longint
dim sure as word
main:
trisa=0
porta=0
ADCON1 = ADCON1 or 0x0F ‘ Configure AN pins as digital
‘CMCON = CMCON or 7 ‘ Turn off comparators
trisd=0
SPI1_Init_Advanced(_SPI_MASTER_OSC_DIV4 , _SPI_DATA_SAMPLE_MIDDLE, _SPI_CLK_IDLE_LOW, _SPI_LOW_2_HIGH)
delay_ms (2000)
basla:
if Mmc_Fat_Init() = 0 then
PORTA = 1
goto devam
end if
porta.2=1
delay_ms (500)
porta.2=0
delay_ms (500)
goto basla
devam:
Mmc_Fat_Reset(size)
filename = “WINAMP_.WAV”
Mmc_Fat_Assign(filename, 0)
Mmc_Fat_Reset(size)
while size > 0
portd = character
delay_us (115)
Mmc_Fat_Read(character)
Dec(size)
wend
porta=0
dur:
goto dur
end.
Kullanılan komutlar ve gerekli devre bağlantıları ile açıklamaları derleyicilerin yardim dosyalarında vardır. Yazıda anlatılan komutlarla ve derleyicilerle yapılan wav player uygulamalarını deney setimde denedim. Her hangi bir sorun olmadan çalıştı. r2r nin bağlantı şekli Antrak Gazetesi ağustos 2012 sayısında ki yazımda var.
Yazar: Tarık Konca