0

CY8C29466のADCINC12

PSoCの12ビットAD変換器を使う。

関連、PGAについても:s.h.log: PSoC Designer – CY8C29466の6bit ADコンバータ

■Device Editor

ADCINC12とPGA(Programmable AMP)の設定

CY8C29466 ADCINC12CY8C29466 ADCINC12

ADCINC12をPGAを通してPort_0_7に結線する

CY8C29466 ADCINC12

Read more

0

Arduino – UART、LED、AD変換を試した

昨日届いたArduino(右)

受け取って1時間で速攻で動作チェックした。

Wiring & Arduino

左はWiring。

Wiringは結構使った事がある。proce55ingの様に手軽に電子工作を「スケッチ」できる、難しいC言語とかを書かなくても簡単に赤外線やサーボの制御ができたりするツール。最近、avr-libcなどのよりローレベルなライブラリを読み込む事ができるようになって面白い。

ただし、16bitタイマ2つと8bitタイマ1つがWiringに占有されているので、タイマ処理(スレッドの様なもの)が使えない。また、外部入力やUSART受信など全ての割り込みが使えないので、1つのloop()メソッドの中で全てを処理しなければならなくなる。例えば、delay()で停止中にセンサからの入力があっても受け取ることができないのが弱点。ただ、そういう時はCPUを増やす(Wiring/Arudinoを2つ使う)という技でどうにかなる。

s.h.log: WiringでできることWiringタグ

Arduinoは、Wiringをベースに、マイコンや部品を人間の手で実装できる物に変えたもので、これも同じくスケッチツール。(部品が大きくてはんだづけしやすく、安い物を使っている)

性能も、できる事も全く同じで、ただしArduinoの方がピンが少ない(つまり制御できるLEDとかが少ない、まあマルチプレクサとかで工夫すればどうにでもなるが)

今学期SAをやってるインタラクションデザインの教材でもあるので、とりあえずよく使う機能を試してみた。

Read more

0

AVR – ATMEGA8のA/Dコンバータ

ついでに。atmega8というよく使うマイコンでのa/d converterのコードを張っておく。avr-gcc用。でもそろそろmega88に移行かな

sbi()cbi()マクロ使ってます。

この関数2つを適当にコピペして

/* ADコンバータ設定 */
void adc_init(void){
ADCSR =_BV(ADEN)|_BV(ADSC)|(0<<ADPS2)|(0<<ADPS1)|(0<<ADPS0)|(0<<ADFR);
// A/D変換許可、1回目変換開始(調整)、分周率2、連続変換しない
}
/* ピンを指定してAD変換 return 0-1023 */
int adc_convert(char pin){
int ad;
ADMUX = pin; // AD変換入力ピン
cbi(ADCSR,ADIF);
sbi(ADCSR,ADSC);
loop_until_bit_is_set(ADCSR,ADIF);
ad = ADCL;
return ad += (ADCH<<8); // 上位2bit取得
}

main()ではこんな感じで。
int main(void){
adc_init();
int ad;
ad = adc_convert(0); // ADC0でAD変換
}

ちなみに、adc_init()でAD変換の速度を最速にしてます。ADPS2,1,0のa/d変換分周率指定で変えれる。分周率が大きいほど遅い。

HERO’S Download データシートより

mega8-adps