goo blog サービス終了のお知らせ 

明日、やろうかな・・・

思い立ったが吉日というが、ちょっと始めては、すぐ他の事に興味をもってしまう。
そんな日々のメモ帳。

ATtiny861A-PU の限界か?

2014-06-27 | マイコン関連
ようやく、設定なんかも解ってきて、

何とか、それなりの命令なんかも出来るようになってきた、

ATtiny 861A-PU だったが、

ここに来て、

色々と問題が出てきた。


まず、SPI通信をしようと、

MOSI、MISO、SCK、と

配線をしてみたが、

上手く通信出来ていない。

相手は、ステッピングモータドライバなのだが、

うんとも、スンとも、全く反応しない。


そこで、


キャラクタ液晶を使って、

戻りの情報を得ようと試みたのだが、


まず、


キャラクタ液晶が表示されない。

プログラムソース自体は、

ネット上に何種類かあって、

3種類ほど試してみたが、

黒い箱が並ぶだけ・・・・。


「何が悪いのか・・・・。」、と


ネットを検索していると、

表示の濃淡用の抵抗を付けないとダメらしい事が判明。


で、


早速、手元の可変抵抗を繋いで見ると、

文字化けはしてるものの、表示されている事がわかった。


さて、


この文字化けは何故起きているのか?

色々弄っていると、

どうやら、出力にスペースを入れているのが不味かったらしい。


そこで、


一文字のみを送ると、

ようやく表示が出来るようになった。


ここで、やっと『SPI通信』の域に入れそうだ。


SPIの送信情報を読み取り、

帰ってきた情報を見る訳だが、


全く戻らない・・・。


というか、正しく動いているのか解らない。


そこで、


スイッチをつけて、送信を発信してみようとしてみたら、

何故か、出力しっぱなしになっている。

設定を確認しても、

確かにボタンを押したら出力にしている。


「SPIと液晶が邪魔してるのか?」と


外してみても同じ。

どうやら、ポートを跨いで、入出力が出来ないらしい。

861のポートは少ない為、コレが出来ないのはイタイ。


そこで、しかたなくATmega328P-PUに乗り換える事にした。


まぁ、


多少使い勝手は違うものの、大きな変化はない。

それどころか、

861では擬似的にSPIを行っていたのに、

328Pでは標準で通信命令がセットされている。

最初から、こっちでやっておけば良かった・・・。


しかし、

ここからまた、キャラクタ液晶の設定とSPIで悩むことに・・・



ロータリーエンコーダーが上手く動作しない

2014-02-15 | マイコン関連
マイコンといえば、

必ず必要になるのが、

入力と出力。


出力デバイスは、

モーターだったり、

表示機だったり、

他にも、色々。


入力デバイスは、

タクトスイッチとか、

センサーとか。


で、


入力デバイスで、

『ロータリーエンコーダー』というのがある。


コレの説明書には、

1周24ノッチで、

1ノッチ毎にパルスを発生させ、

正転A側 0110
正転B側 0011

逆転A側 0011
逆転B側 0110

と、いう具合に信号を発生させるらしい。


そこで、


プログラムを、

パルスを入力したら、

ビットシフトさせて、

正転と逆転の回転方向を読み取る物を

書いてみたが・・・・、


上手く動作しない。


なんか、

微妙にB側とかA側の出力が残ってて、

ONが踏みっぱなしの状態もあったりする。


で、


不具合なんじゃないか?と、

バラしてみると、

単純な構造である事が判明。

接点が3箇所在り、

それを交互にずらしているだけ。


つまりは、


2つのスイッチを、

交互に順序よく押しているのと同じ。


ということで、

スイッチを二つ使ったときと同じようにフラグを立てて、

動かせば良い事に気が付いた。


単なるスイッチなら、

そう書いておいてよ・・・。




ATtiny861A-PU で 簡単にステッピングモーターを動かす

2014-02-08 | マイコン関連
さて、

AVRのプログラミング環境も整ったところで、

実際に動かしてみた。


しかし、


ATMEL STUDIO6では、

USB-aspを直接サポートしていない為、

そこは、コマンドラインからavrdude.exeで、

直接書き込むか、

AVRDUDE-GUIというソフトで書き込みをすればいいので、

とりあえず進めてみる。


ステッピングモーターを動かすには、

大まかに2通りある。

定電圧制御と、定電流制御。

定電圧の方は、

単純に1相励磁や2相励磁等のパルスを送り、

電圧は一定のまま動作させる制御法。

コレだと、

高速回転時に誘導抵抗によって電流が少なくなる為、

トルクが落ちてしまう。

一方、

定電流制御は、

トルクを安定させる為、

電流値をリアルタイムで読み込んで、

電流が下がると、

電圧を上昇させ、補う制御法。

こちらは、回路的に複雑になる。

と、いうことで、

今回は、単純な定電圧制御で動かしてみる。


まずは、

秋月電子で売っている

PICステッピングモータドライバキットをバラし、

トランジスタ4つと、

ダイオード4つを取り外し、

AVRで制御する為のボードを作成する。


Dsc_0096


ATMEL STUDIOを使い、

C言語でプログラムを書く。


ちょっと面倒なのが、

AVRのポート設定。


特に、PWM制御なんかを使う場合、

使うポートや、出力設定なんかを行わないといけない。


基本的には


TCCR1A(Timer/Counter1 Control Register A)や

TCCR1B、TCCR1C、TCCR1Dなどを、

2進数なら『TCCR1A=0b00000000;』という感じで設定する。


で、


最初は、PWM制御で動かすつもりで、

設定を行い、

タイマのタイミングを変えようと試みたが、


タイマの出力は、

PB0~PB3までで、

PB0に対しPB1で反転、

PB2に対しPB3で反転させる設定を

TCCR1A=0b01010011;(7~4ビット目の0101で反転出力、0と1ビット目の11でPWMの使用許可)

などとやって、テストしてみたが、


どうも、


タイマー自体の動きは同時に出力を始めてしまう為、

1相励磁ならなんとか出せるのだが、

2相励磁や1-2相励磁となると位相角度が90°となる為

設定に悩んでいた。


そこで試しに、


Cプログラムで、

4つのポートに、

ウェイトタイマーと、

オンとオフの出力を順番に行う命令を入れると、

意外とアッサリ動いてくれた。


市販のドライバICと比較してみたが、

大きな遜色は無い様だ。


まぁ、

ステッピングなんて、そんなに早く動かす訳でも無いし、

十分な速度を出せるだろう。


この方法で動かせると、

加減速の制御も容易だし、

他にも入力値で動きを変えられる。

非常に便利だな。



USBasp で Atmel studio を使う設定

2014-01-17 | マイコン関連

とある目的の為、

マイコンを使用するのに、

色々と調べていると、

PIC というのと、

AVR というのがあるらしい事がわかった。

早速、買って試してみようと思ったら、

書き込み用のハードが必要らしい。

で、

そのハードも思いの外、高い・・・。

とりあえず、試してみたいという事で、

最安のAVR用ライター 

『ATMEL AVR ATMega ATTIny 51』

というUSBaspを買ってみた。

しかし、

使い方がイマイチ解らない。

ネットでも調べてみるが、

日本語の解説は非常に少ない。

とりあえず、

ライターとマイコンを接続する為の基板を作った。

Dsc_0094

で、

ソフトは『Atmel Studio』を使用。

USBaspは標準ではサポートしていないので、

必要なソフトと設定を行う。

まず、

本体の AtmelStudio と、

AVRdude

USBasp のドライバー

をDLして、

ドライバーのインストールと、

AtmelStudioのインストール、

AVRdudeの解凍をしたら、

AtmelStudioのフォルダに同胞して置く。

で、

『Extemal Tools』の設定でUSBaspを追加。

CommandのパラメータはAVRdude.exeに設定(フォルダを指定)

Argumentsのパラメータは

-c usbasp -p t861 -U flash:w:”$(ProjectDir)Debug\$(ItemFileName).hex”:i

パラメーターの詳細は、

『-c usbasp』がプログラマの指定。

『-p t861』がターゲットデバイスの指定。

『-U flash:w:”$(ProjectDir)Debug\$(ItemFileName).hex”:i』がHEXファイルの読込み先指定。

ようするに、コマンドプロンプトのショートカットを作る様なものらしい。

後は、

USBaspにマイコンを接続し、

PCにUSBを差し込み、

AtmelStudioを起動し、接続を確認すればOK。

次回は、

実際に書き込みテストをしてみよう。