上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--.--.-- -- l スポンサー広告 l top
シルバーウィークの半分は休めることになりましたので、次のIchigojam工作を始めました。
目標はIchigojamのサウンド機能の改善です。

ichigojamはPLAY文によって音楽演奏できますが、基本的には矩形波なのでどうしても単調になります。
これを改善してみようと思います。最初はアナログフィルタ回路を付けて音をまろやかにしようかと思っていたのですが、どうもそれだけではおもしろくない。そこで、以前使った8bitAD付きのPICマイコンを持ってくることにしました。

PICマイコンPIC16F1705をICHIGOJAM-U用拡張基板に載せたサウンド改良シールドです。


回路図は以下のようになります。


IchigojamのSPK出力をIOとして読み取り、それをトリガとして内蔵した波形を再生する、という考えです。
Ichigojamは音程がやや外れるといわれているようですので、できればSPK出力を単にトリガとするだけではなく、周波数を解析して補正してあげられないかな、とも考えています。(後半は結構たいへんそうですが。)

「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">





とりあえず今日ハンダ付けしてテスト中のところ。


単純にSPKをトリガとして正弦波に変換する動作は以下のような比較的簡単なソフトで動きました。


#include xc.h     // ※includeはファイル名を<と>で囲んでください。
#include "math.h"

#pragma config FOSC = INTOSC // use intosc , clkout = IO
#pragma config WDTE = OFF // WDT off
#pragma config PWRTE = ON // PWT on
#pragma config MCLRE = OFF // MCLR disabled
#pragma config CP = OFF // Memory code protection disabled
#pragma config BOREN = ON // BOR enabled
#pragma config CLKOUTEN = OFF // CLKOUT = IO
#pragma config IESO = OFF // IESO disabled
#pragma config FCMEN = OFF // FCMEN disabled
#pragma config WRT = OFF // FLASH write protection disabled
#pragma config PPS1WAY = OFF // PPSWAYdisabled
#pragma config ZCDDIS = ON // ZCD enabled
#pragma config PLLEN = ON // 4xPLL enabled
#pragma config STVREN = ON // Stack overflow reset enabled
#pragma config BORV = HI // BOR voltage = HI
#pragma config LPBOR = OFF // PLBOR disabled
#pragma config LVP = OFF // LOW voltage program disabled

unsigned int sin0[256];

void main()
{
int i;

OSCCON = 0b01110000 ; // internal osc 32MHz with 4xPLL
ANSELA = 0b00000000 ; // PORTA all digital
ANSELC = 0b00000000 ; // PORTC all digital
TRISA = 0b00100000 ; // PORTA AN5 = INPUT
TRISC = 0b0000000 ; // PORTC all output

// DAC & OPAMP1 initialization
DAC1CON0 = 0b10110000; // DAC enable ,OUT1/2 enable
OPA1CON = 0b11010010; // OPAMP1 Enable , DAC-> + , OUT-> -

for(i=0;i<256;i++) {
sin0[i] =(int)(128*sin(3.1415926*2*(float)i/254)+128);
}

while(1) {
while (PORTAbits.RA5==0) {};
for (i=0;i<256;i++) {
DAC1CON1 =sin0[i];
}
while (PORTAbits.RA5==1) {};
}
}

オシロで見ると波形が結構ひずんでますし、音も小さいです。そういえばこのPICのアナログ出力は結構インピーダンスが大きかったはずで、圧電スピーカ直結はできなかったかもしれません。

その当たりなおした後で、次はもう少し凝った音の変換をしてみようかと思います。

それではまたです。

2015.09.19 Sat l ICHIGOJAM l コメント (0) l top

コメント

コメントの投稿












上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。