ATMELのAT-Tiny26,ATmega,R8Cなどのワンチップマイコン,C言語,JAVAなどのプログラミング言語の入門のためのページです.サンプルプログラムを中心に紹介します.他にもLinixや数学ソフトなどの紹介も行います.

このブログを検索

あなたは 番目のお客様です.

2009年6月20日土曜日

ATTINY13,ATTINY25,AT90S2313

AVRの8ピンマイコンATTINY13,ATTINY25,AT90S2313を使ってみました.
AT90S2313は外部発振のみ,ATTINY13とATTINY25は,外部発振と内部発振が使えます.
ATTINY13とATTINY25は,AD変換機能を持っています.
基本的なピン配置は同じなので,同じ書き込み回路が使えます.










ただし,AVRstudio4からISPmkIIを使って書き込みをする場合,AT90S2313は
デバイスの認識ができません.(しかし書き込みはできます)
1:RESRT
2:8MHzクリスタル
3:8MHzクリスタル
4:GND
5:MOSI
6:MISO
7:SCK
8:VCC

以下はPB0,PB1,PB2にLEDを付けたフラッシャーのプログラムです.
ATTINY13,ATTINY25,AT90S2313いずれでも動きます.
#include <avr/io.h>

void wait(int x);

int main( void )
{
DDRB=0B00000111; /* PortB0,1,2を出力に設定する */

for (;;) { /* 無限ループ */
PORTB=0B00000001;
wait(10);
PORTB=0B00000010;
wait(10);
PORTB=0B00000100;
wait(10);
}
}

void wait(int x){
int i,j;
for(i=1;i<x;i++){
for(j=1;j<20000;j++){
j=j;
}
}
}

次のプログラムはtiny13AでAD変換を行い,AD変換の値に比例して
LEDを点灯(調光)します
点灯時間の調整にはタイマ・カウンタのオーバーフローを利用しています.
//tiny13A用AD変換LED出力
//AD入力ADC2(PB4),LED出力PB0
#include <avr/io.h>

void delay(uint8_t t){
TCCR0B=0B00000011;//clk/64 (64分周)
TIFR0 |= 1<<TOV0;//TOV0クリア
TCNT0=255-t;
while(!(TIFR0 & (1<<TOV0))){}//カウンタがオーバーフローするまで待つ
}

int main( void )
{
uint8_t ad;
DDRB=0B00000001; /* PB0を出力に設定する */
ADMUX=0B00100010; //VCCが基準電圧 Left Adjust ADC2(PB4)
ADCSRA=0B10000110; //CK/64

while(1){
ADCSRA |= 1<<ADSC; //AD start
while(!(ADCSRA & (1<<ADIF))){} //ADCSRのビット4(ADIF)が1になるまで待つ
ad=ADCH;
PORTB |= 1<<0; //PB0セット
delay(ad);
PORTB &= ~(1<<0); //PB0クリア
delay(255-ad);
}//while(1)
}


次のプログラムはtiny25でAD変換を行い,AD変換の値に比例して
LEDを点灯(調光)します
点灯時間の調整にはタイマ・カウンタのオーバーフローを利用しています.
//tiny25用AD変換LED出力
//AD入力ADC2(PB4),LED出力PB0
#include <avr/io.h>

void delay(uint8_t t){
TCCR0B=0B00000011;//clk/64 (64分周)
TIFR |= 1<<TOV0;//TOV0クリア
TCNT0=255-t;
while(!(TIFR & (1<<TOV0))){}//カウンタがオーバーフローするまで待つ
}

int main( void )
{
uint8_t ad;
DDRB=0B00000001; /* PB0を出力に設定する */
ADMUX=0B00100010; //VCCが基準電圧 Left Adjust ADC2(PB4)
ADCSRA=0B10000110; //CK/64

while(1){
ADCSRA |= 1<<ADSC; //AD start
while(!(ADCSRA & (1<<ADIF))){} //ADCSRのビット4(ADIF)が1になるまで待つ
ad=ADCH;
PORTB |= 1<<0; //PB0セット
delay(ad);
PORTB &= ~(1<<0); //PB0クリア
delay(255-ad);
}//while(1)
}

次のプログラムはtiny25でAD変換を行い,AD変換の値に比例して
LEDを点灯(調光)します
点灯時間の調整には非同期高速PWMを利用しています.
OCR0Aに255を代入し,カウンタのTOPとし,
OCR0BにAD変換値を代入します
//非同期高速PWM動作のテストTINY13A
//TCNT0の高速PWM動作を使う
//出力OC0B COM0B1-0:10
//BOTTOM:0TOP:OCR0A WGM02-01:111
//カウンタ分周CLK/8 CS02-00:010
//AD入力ADC2(PB4)

#include <avr/io.h>

int main( void )
{
uint8_t ad;
DDRB=0B00000010; /* PB1 OC0Bを出力に設定する */
ADCSRA=0B10000110; //CK/64
TCCR0A=0B00100011;
TCCR0B=0B00001010;
OCR0A=0B11111111;

ADMUX=0B00100010; //VCCが基準電圧 Left Adjust ADC2(PB4)
while(1){
ADCSRA |= 1<<ADSC; //AD start
while(!(ADCSRA & (1<<ADIF))){} //ADCSRのビット4(ADIF)が1になるまで待つ
ad=ADCH;
OCR0B=ad;
}//while(1)
}



2009年6月11日木曜日

maximaの使い方

Windows版maximaの使い方のメモです.
高校,大学の数学の問題はほとんどmaximaで解決してしまいます.

式を入力すると入力(%i*)に対する結果(%o*)が表示される.

Maximaでは変数への代入に:(コロン)を用いる.
a:2;
sqrt(a);

関数は()でくくる.関数の最初は小文字である.
よく使う定数
%e(自然対数の低),%pi(円周率),%i(虚数),inf(無限大)

数式の処理
たとえば x^3 + y^3;で式が記憶される.
この式の因数分解を行いたい場合
factor(%);
ここで%は直前の式をあらわす
今度は,上の結果を展開したい場合
expand(%);
でもとに戻る

式の通分
ratsimp(1/(x+1)+2/(x-1));

方程式の解法
solve(4*x-1=0,x);
solve(a*x^2+b*x+c=0,x);
solve([x-4*y=-2,2*x+y=5],[x,y]);

関数の極限
limit((1+1/x)^x,x,inf);

式の微分
x^3-4*x^2+exp(-x^2)+sin(2*x);
diff(%,x);

微分方程式
atvalue(x(t),t=0,A);初期条件
atvalue(diff(x(t),t),t=0,0);初期条件
desolve(m*diff(x(t),t,2)=-k*x(t),x(t));
Is k*m positive, negative, or zero?と聞かれたら
positive;
などと入力する.
plot2d(式,[変数,開始,終了]);で結果をグラフ表示することも可能である.
plot2d(x^2,[x,-2,2]);

式の積分
1/x-4*x^2+exp(-x)+sin(2*x);
integrate(%,x);
定積分
integrate(exp(-x^2),x,0,1);
integrate(4/(1+x^2),x,0,1);

式の値を数値で与えるには
float(a);

桁数を指定する場合
fpprec:n;
bfloat(a);

fpprec:20;
bfloat(%pi);

複素数の絶対値と偏角
z:(1 + %i)/sqrt(2);
cabs(z); (絶対値)
carg(z);偏角 (argument)

行列演算
v1:[1,0,2]; (ベクトルの定義)

A:matrix([1,4],[2,-1]); (行列の定義)
Y:matrix([-2,5]);
invert(A).Y; (逆行列)

行列の演算
A.B (積)
A^3(累乗)
determinant(A);(行列式)

固有値
load(eigen);
eigenvalues(A);

固有ベクトル
load(eigen);
eigenvectors(A);


行列の固有値と固有ベクトルが条件を満たすか確認する.
A:matrix([3,-5,-5],[-1,7,5],[1,-9,-7]);
load(eigen);
eigenvectors(A);
 [[[-2,2,3],[1,1,1]],[1,-1,2],[0,1,-1],[1,-1,1]]
固有値,重複数,ベクトルの順に表示される

固有値-2に対する固有ベクトルがB:[1, -1, 2];のとき
A.B;と-2*B;が同じ結果になることが確認できる.

グラフ描画
plot2d(sin(4*x),[x,-5,5]);
plot2d([sin(4*x),exp(-x^2)],[x,-2,2],[y,-4,4]);


(媒介変数表示)
plot2d([parametric,cos(t),sin(2*t)],[t,0,2*%pi]);
標準では媒介変数を10の領域に分割していて,[nticks,*]でグラフが荒いので分割数を増やす.
plot2d([parametric,cos(t),sin(2*t)],[t,0,2*%pi],[nticks,100]);
plot3d(exp(-(x-2)^2-y^2)+exp(-(x+2)^2-y^2),[x,-5,5],[y,-5,5]);
plot3d(exp(-(x-2)^2-y^2)+exp(-(x+2)^2-y^2),[x,-5,5],[y,-5,5],[grid,100,100]);
plot3d([cos(x)*cos(y),sin(x)*cos(y),sin(y)],[x,0,2*%pi],[y,-%pi/2,%pi/2]);

関数の定義
f(x):=x^2*sin(x);
plot2d(f(x),[x,-5,5]);

値のクリア
kill(all);

2009年6月2日火曜日

動画や音声の保存

動画や音声の保存に関するメモです

Youtubeで動画を保存する方法
ブラウザにFirefoxをインストールする.
続いてEasy YouTube Video Downloader 1.1をアドオンとしてインストールする.
FirefoxからYoutubeを開くと,mp4などのフォーマットで動画をダウンロード(保存)できます.

PCの外部入力から音声をmp3として保存する
超録(フリーウェア版)をインストールします
インストール後フォルダにlame_enc.dllを入れるとmp3で録音できます.
ラジオや色々なオーディオのmp3録音ができます.

CDからmp3作成
昔はCDからmp3ファイル作成は結構大変でした.
現在ではMediaPlayerの10以降を使えば,CDからmp3の作成ができます.
まずMediaPlayerを右クリックしクラシックメニューの表示にすると,ツールバーが現れます.
ツールのオプション「音楽の取り込み」で保存先とmp3の設定を行います.
あとはCDを入れて取り込みボタンを押せばOKです.

動画からmp3を抽出する
フリーソフトMediaCoderをインストールします
MediaCoderを立ち上げます
○.mp4ファイルをMediaCoderにドラッグします
Audioタグの設定はそのままで,VideoタグでEnableVideoをoffにします.
StartTranscodingで○.mp3ファイルが出来上がります.
またAnyAudioConverterもフリーソフトで,簡単に動画からmp3を抽出することができます.

mp3とwma
FM放送などを録音しておいて後で聞きたいけど,音質は求めない.
32kbpsで録音した場合,私の聞いた感じではmp3よりもwmaの方が高音質で,
mp3は聴くのが辛い,wmaはそれなりに聴けるという感じでした.